For npm users
For those familiar with npm, esy allows to work with Reason/OCaml projects within the familiar npm-like workflow:
Declare dependencies in
Install and build with
esy buildcommands. Dependencies' source code end up in
Share your work with other developers by publishing on npm registry and/or github.
Access packages published on OPAM (a package registry for OCaml) via
@opamnpm scope (for example
lwtlibrary from OPAM).
For OPAM users
For those who familiar with OPAM, esy provides a powerful alternative (to
opam tool, OPAM packages are still accessible with Esy):
Manages OCaml compilers and dependencies on a per project basis.
Sandboxes project environment by exposing only those packages which are defined as dependencies.
Fast parallel builds which are agressively cached (even across different projects).
Keeps the ability to use packages published on OPAM repository.
Project metadata is managed inside
Clean environment builds for reproducibility.
Global build cache automatically shared across all projects — initializing new projects is often cheap.
File system sandboxing to prevent builds from mutating locations they don't own.
Solves environment variable pain. Native toolchains rely heavily on environment variables, and
esymakes them behave predictably, and usually even gets them out of your way entirely.
Allows symlink workflows for local development (by enforcing out-of-source builds). This allows you to work on several projects locally, make changes to one project and the projects that depend on it will automatically know they need to rebuild themselves.
Run commands in project environment quickly
Makes sharing of native projects easier than ever by supporting "eject to
Build dependency graph without network access.
Build dependency graph where
nodeis not installed and where no package manager is installed.