A language server for OCaml and related languages
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.



A language server for OCaml and Reason


The OCaml Language Server is an implementation of the Language Server Protocol (LSP) for OCaml, Reason, and related tooling, including support for BuckleScript.

The OCaml Language Server works by providing a standardized JSON-RPC interface (via the LSP) to existing OCaml and Reason tooling. This makes it much easier to provide a uniform development experience across the different editors without duplication of effort.

The OCaml Language Server is not intended to be a replacement for existing OCaml and Reason language tooling. It is intended to make existing language tooling–much of which is excellent and has been developed with great effort–easier to integrate into editors and more accessible to users without requiring extensive configuration effort.


The OCaml Language Server supports the following LSP capabilities and custom features:

  • OCaml support
  • Reason support
  • BuckleScript build system
  • compiler diagnostics
  • incremental document synchronization
  • code action provider
  • code lens provider
  • completion provider
  • definition provider
  • document formatting provider
  • document highlight provider
  • document range formatting provider (Reason)
  • document symbol provider
  • hover provider
  • references provider
  • workspace symbol provider


The following editor plugins are configured to work with the OCaml Language Server:




Some clients (noted above) do not ship the server and require it to be installed separately:

npm install -g ocaml-language-server

You also need to globally install Merlin, used by this project under the hood. Try https://github.com/reasonml/reason-cli or, if you're using OPAM, opam install merlin. If you're using Reason with BuckleScript, make sure you're on the 4.02.3 ocaml switch and do opam install merlin.2.5.4.


Manually launching the server should only be necessary if you are using a custom configuration or an LSP client that is not already configured for the OCaml Language Server. In that case, the server can be started with one of the following commands:

ocaml-language-server --node-ipc          # communicate over the node IPC
ocaml-language-server --socket={number}   # communicate over a unix socket
ocaml-language-server --stdio             # communicate over stdio


Contributions are welcome and encouraged. Please see the following documents: