Skip to content
⚡️ Native, high-performance, cross-platform desktop apps - built with Reason!
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.ci Developer Experience: JavaScript builds (#476) Apr 28, 2019
.github/ISSUE_TEMPLATE Add bug report & feature request templates (#454) Apr 15, 2019
assets README: Add 'Built with Revery' section (#478) May 3, 2019
bench.esy.lock Improve documentation (#446) Apr 16, 2019
bench Refactoring: Remove minimal layout mode (#426) Apr 1, 2019
doc.esy.lock Improve documentation (#446) Apr 16, 2019
esy.lock Improve documentation (#446) Apr 16, 2019
examples Make Input component controlled (#406) Apr 19, 2019
js.esy.lock Developer Experience: JavaScript builds (#476) Apr 28, 2019
scripts Initial release packages (#340) Feb 16, 2019
src Simplify animation hook, using reducer + ref (#479) May 3, 2019
test Implement animation direction (#443) Apr 12, 2019
.gitattributes Initial release packages (#340) Feb 16, 2019
.gitignore feature/radio-buttons (#254) Jan 26, 2019
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Jan 24, 2019
LICENSE Initial commit Sep 19, 2018
README.md README: Add 'Built with Revery' section (#478) May 3, 2019
Revery.opam Sketch out initial source tree Sep 24, 2018
ReveryBench.opam Performance: 'Minimal' layout mode (#369) Feb 26, 2019
ReveryExampleJs.opam Refactoring: Remove extra OPAM packages (#460) Apr 16, 2019
azure-pipelines.yml Performance: 'Minimal' layout mode (#369) Feb 26, 2019
bench.json Improve documentation (#446) Apr 16, 2019
doc.json Improve documentation (#446) Apr 16, 2019
dune Initial "playground" for examples (#314) Feb 8, 2019
dune-project CI: Use dune for formatting (#267) Feb 11, 2019
esy.lock.json Feature/mouseenter/leave/out/over events (#313) Feb 19, 2019
js.json Refactoring: Remove extra OPAM packages (#460) Apr 16, 2019
package.json 0.18.0 Apr 16, 2019

README.md

Logo

Build native, high-performance, cross-platform desktop tops with reason!

Build Status npm version Join the chat on discord! Backers


Slider components

🚧 NOTE: Revery is a work-in-progress and in active development! 🚧

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.

Quickstart

Check out revery-quick-start to get up and running with your own Revery app!

License

Revery is provided under the MIT License.

Contributing

We'd love your help, and welcome PRs and contributions.

Some ideas for getting started:

Contributors

Thanks to everyone who has contributed to Revery!

Backers

Thank you to all our backers! 🙏 [Become a backer]

Built with Revery

Onivim 2

Special Thanks

revery would not be possible without a bunch of cool tech:

revery was inspired by some awesome projects:

You can’t perform that action at this time.