Page
Library
Module
Module type
Parameter
Class
Class type
Source
Powered by the versatile OCaml type system, with best-in-class type inference, Melange produces robust JavaScript code.
Melange is released to OPAM. You can obtain it in multiple ways:
$ opam install mel
melange-re/melange-opam-template provides a GitHub template repository that can be used as a project starter.
Note: mel build
builds a Melange project. Before running the resulting JavaScript, the Melange runtime library needs to be present in node_modules
so that it can be found by JavaScript based tooling:
ln -sfn $(opam var prefix)/lib/melange/runtime node_modules/melange
After installing Melange, you should now be able to run mel
from your switch:
$ opam exec -- mel --help
Get Esy on NPM:
npm install -g esy
installs Esy globallynpm
is installed, npx esy
can be used to run Esy locallyAn Esy project starter also exists to get started quickly with Esy.
Once the repository has been cloned, run esy
in the project root.
Melange has good support for Nix:
nix run github:melange-re/melange#mel -- --help
runs melange.nix shell github:melange-re/melange#mel -c $SHELL
enters a shell with mel
and melc
in $PATH
. Try out mel --help
for available options.github:melange-re/melange
can be added as a flake inputThe current Melange distribution targets OCaml 4.14. There's an old version of Melange based on OCaml 4.12 that requires version 4.12.0+mel
of melange-compiler-libs
.
Until Melange has first-class support in Dune, editor integration is based on a .merlin
file workflow.
.merlin
files automatically as part of the buildocaml-lsp
based Language Server Protocol support needs to be configured as follows:Install ocaml-lsp
and dot-merlin-reader
:
$ opam install ocaml-lsp dot-merlin-reader
Add the following to esy.json
:
// esy.json
{
"devDependencies": {
"@opam/ocaml-lsp-server": ">= 1.12.0",
"@opam/dot-merlin-reader": "*"
}
}
--fallback-read-dot-merlin
to ocaml-lsp
ocaml-lsp
requires the --fallback-read-dot-merlin
flag to look for .merlin
files.
ocaml-lsp
via the following command template:// .vscode/settings.json
{
"ocaml.sandbox": {
"kind": "custom",
"template": "esy $prog $args --fallback-read-dot-merlin"
}
}
#melange
channel in the ReasonML DiscordThis project is forked from the ReScript compiler, focused on a deeper integration with the OCaml ecosystem. This allows sharing code between backend and frontend using Dune's virtual libraries.
Melange also introduces a ReScript compatibility layer to maintain compatibility with ReScript syntax - preserving access to ReScript's package ecosystem.
A small write-up with more details on the motivation behind this project can be found in the announcement blog post.
Below is a quick comparison between Melange and other tools:
Name | Purpose | Dependencies | Notes |
---|---|---|---|
Package manager | Installed with NPM | Obtaining dependencies such as | |
Package manager | None | Obtaining dependencies such as | |
Build tool | Installed with e.g. | Composable build tool for OCaml; supports composing custom rules to build any project | |
Syntax | Installed with e.g. | Alternative syntax to OCaml | |
Compiler that emits Script | Esy / OPAM (to install), Dune (to build) | Supports OCaml, Reason and ReScript syntax; derived from ReScript, focused on deeper integration with OCaml | |
The brand around a syntax and a compiler that emits JavaScript | None | Distributed via NPM as prebuilt binaries; previously called BuckleScript |
Yes! ReScript syntax is supported, but ReScript won't have as many features as the OCaml or Reason syntaxes due to ReScript being built on top of an old OCaml version (4.06 - released in 2018). (e.g. letop
binding operators, generalized module open expressions, or local substitutions in signatures).
See CONTRIBUTING.md.
See also Credits.md concerning some individual components of Melange.
See COPYING and COPYING.LESSER
See Credits for more details.