What & Why
esy is a rapid workflow for developing Reason/OCaml projects. It supports native packages hosted on opam and npm.
npm users
Foresy lets you manage native Reason/OCaml projects with a familiar npm-like workflow:
Declare dependencies in
package.json
.Run the
esy
command within your project to download/build dependencies.Share and consume individual Reason/OCaml package sources on the npm registry or Github.
Access packages published on opam (a package registry for OCaml) via
@opam
npm scope (for example@opam/lwt
to pulllwt
library from opam).Easily bundle your project into a self contained, prebuilt binary package and share it on npm. These can be installed by anyone using plain npm.
opam users
Foresy provides a fast and powerful workflow for local development of opam packages without requiring "switches". Opam packages are still accessable, and you can publish your packages to opam repository.
Manages OCaml compilers and dependencies on a per project basis.
Isolates each package environment by exposing only those packages which are defined as dependencies.
Fast parallel builds which are aggressively cached (even across different projects).
Keeps the ability to use packages published on opam repository.
In depth
Project metadata is managed inside
package.json
.Parallel builds.
Clean environment builds for reproducibility.
Global build cache automatically shared across all projects — initializing new projects is often cheap.
File system checks to prevent builds from mutating locations they don't own.
Solves environment variable pain. Native toolchains rely heavily on environment variables, and
esy
makes them behave predictably, and usually even gets them out of your way entirely.Allows symlink style workflows for local development using
link:
dependencies. Allows you to work on several projects locally, automatically rebuilding any linked dependencies that have changed. There is no need to first register a package as "linkable".Run commands in project environment quickly
esy <anycommand>
.