:zap: Native, high-performance, cross-platform desktop apps - built with Reason!
Build native, high-performance, cross-platform desktop apps with reason!
:construction: NOTE: Revery is a work-in-progress and in active development! :construction:
Today, Electron is one of the most popular tools for building desktop apps - using an HTML, JS, CSS stack. However, it has a heavy footprint in terms of both RAM and CPU - essentially packing an entire browser into the app. Even with that tradeoff, it has a lot of great aspects - it's the quickest way to build a cross-platform app & it provides a great development experience - as can be testified by its usage in popular apps like VSCode, Discord, and Slack.
Revery is kind of like super-fast, native code Electron - with bundled React-like/Redux-like libraries and a fast build system - all ready to go!
Your apps are compiled to native code with the Reason / OCaml toolchain - with instant startup and performance comparable to native C code. Revery features platform-accelerated, GPU-accelerated rendering. The compiler itself is fast, too!
Revery is an experiment - can we provide a great developer experience and help teams be productive, without making sacrifices on performance?
A major value prop of Electron is that you can build for all platforms at once. You have great confidence as a developer that your app will look and work the same across different platforms. Revery is the same - aside from platform-specific behavior, if your app looks or behaves differently on another platform, that's a bug! As a consequence, Revery is like flutter in that it does not use native widgets. This means more work for us, but also that we have more predictable functionality cross-platform!
Performance should be at the forefront, and not a compromise - we need to develop and build benchmarks that help ensure top-notch performance and start-up time.
We might have some dirty mutable objects for performance - but our high-level API should be purely functional. You should be able to follow the React model of modelling your UI as a pure function of application state -> UI.
We'd love your help, and welcome PRs and contributions.
Some ideas for getting started: - Build and run Revery - View our Roadmap - Help us improve our documentation - Help us build examples - Help us fix bugs and build features - Help us log bugs and open issues - Support the project on OpenCollective - Follow us on Twitter or chat with us on Discord!
Revery is provided under the MIT License.
Revery bundles several dependencies under their own license terms - please refer to ThirdPartyLicenses.txt.
Thanks to everyone who has contributed to Revery!
Thank you to all our backers! 🙏 [Become a backer]
reverywould not be possible without a bunch of cool tech: - ocaml made these tools possible - thanks Inria & OCaml Labs! - reasonml made revery possible - thanks @jordwalke! - flex by @jordwalke - briskml - brisk-reconciler - the "native React" implementation. - reason-sdl2 - SDL2 - stb-image - reason-fontkit - freetype2 - harfbuzz - reason-gl-matrix - gl-matrix - glm - @reason-native/console
reverywas inspired by some awesome projects: - react-native - ReactMini - cuite - wall - elm - reprocessing
We don't have a Hot Reload yet but it is on our roadmap. In the meantime, you can check branch feat/hot-reload to see the progression.
In the meantime @mbernat has done a script that allow to relaunch the APP when the binary changed.