Awesome
<p align="center"> <a href="https://www.outrunlabs.com/revery" title="Revery"> <img src="./assets/logo.png" alt="Logo"> </a> </p> <p align="center"> <span>Build <b>native</b>, <i>high-performance</i>, <b>cross-platform</b> desktop apps with <a href="https://reasonml.github.io">reason!</a></span> </p> <p align="center"> <a href="https://github.com/revery-ui/revery/actions"><img src="https://github.com/revery-ui/revery/workflows/Validate%20Pull%20Request/badge.svg" /></a> <a href="https://dev.azure.com/revery-ui/revery/_build/latest?definitionId=2?branchName=master"> <img src="https://dev.azure.com/revery-ui/revery/_apis/build/status/revery-ui.revery?branchName=master" alt="Build Status"/> </a> <a href="https://badge.fury.io/js/revery"> <img src="https://badge.fury.io/js/revery.svg" alt="npm version"/> </a> <a href="https://discord.gg/4pxY5Cp"> <img src="https://img.shields.io/discord/526111832478449695.svg" alt="Join the chat on discord!"/> </a> <a href="#backers"> <img src="https://opencollective.com/revery/backers/badge.svg" alt="Backers"/> </a> </p><p align="center"> <a href="https://www.outrunlabs.com/revery/playground" title="Playground"> <img src="./assets/screenshot.png" alt="Slider components"> </a> </p>
:construction: NOTE: Revery is a work-in-progress and in active development! :construction:
To get a taste of Revery, check out our JavaScript + WebGL build on the playground. For the best experience, though, you'll want to try a native build.
Motivation
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!
Revery is built with reasonml, which is a javascript-like syntax on top of OCaml This means that the language is accessible to JS developers.
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?
Design Decisions
- Consistent cross-platform behavior
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!
NOTE: If you're looking for something that does leverage native widgets, check out briskml. Another alternative is the cuite OCaml binding for Qt.
- High performance
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.
- Type-safe, functional code
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.
Getting Started
- Check out revery-quick-start to get up and running with your own Revery app!
- Try out our interactive playground
- Read through our docs
Contributing
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!
License
Revery is provided under the MIT License.
Revery bundles several dependencies under their own license terms - please refer to ThirdPartyLicenses.txt.
Contributors
Thanks to everyone who has contributed to Revery!
Backers
Thank you to all our backers! 🙏 [Become a backer]
<a href="https://opencollective.com/revery#backers" target="_blank"><img src="https://opencollective.com/revery/backers.svg?width=890"></a>
Built with Revery
<p align="left"> <a href="https://v2.onivim.io/"> <img src="./assets/onivim-logo.png" alt="Onivim 2" /> </a> </p>Special Thanks
revery
would 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
- reason-fontkit
- reason-gl-matrix
- @reason-native/console
revery
was inspired by some awesome projects:
Hot reload
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.