First attempt to write a language server for Elm.
Switch branches/tags
Nothing to show
Clone or download
Razzeee Merge pull request #13 from ringods/info
Adding link to requirements document
Latest commit 6720378 Nov 28, 2018


It's very early in development, please keep that in mind


First attempt to write a language server for Elm.

See for a description of the protocol.


  • Diagnostics

If you want to work on more, please reach out and create an issue, before you start working on it.

Conceptual workings of the language server

The editor should start one language server for each Elm project (there may be multiple). rootPath should be set to the location of the elm.json file.

  • On the initialize notification, the language server will copy all files in the project to a temporary directory. This is so that we can handle open files by saving them there. It will then compile all files in the project, to get diagnostics. It will then send diagnostics for all files to the editor.
  • When a file is changed in the editor, we change it in our copy, and recompile everything to get new diagnostics.

Libraries used

  • haskell-lsp
  • json-rpc-server
  • elm-compiler-library (which is a version of elm-compiler)


  • Code formatted using hlint


Clone the repository and its subrepositories:

  • git clone
  • git submodule update --init --recursive Install ghc and dependencies. You need to have stack installed
  • stack setup
  • stack install