... and use them with Javascript, JVM, or even native libraries
Status as of April 15th, 2026: updated to latest and greatest, API is stabilising
- API documentation
- SBT:
libraryDependencies += "tech.neander" %%% "langoustine-app" % "0.1.0" - Mill:
ivy"tech.neander::langoustine-app::0.1.0" - Scala CLI
//> using lib "tech.neander::langoustine-app::0.1.0"
It's a clean room implementation of the LSP protocol definitions.
By "clean room" we mean
- Using only Scala libraries
- Idiomatic Scala code
- Using Scala 3 features
Most of the code is generated directly from the recently published LSP specification in JSON format.
Introducing Quickmaffs, a primitive language with a LSP, REPL, and an interpreter, designed specifically to demonstrate how easy it is to build Language Servers with Langoustine.
Writing a language server for:
-
your own toy language
-
already existing language but with specific requirements
For example, see Grammar.js LSP - written specifically for the
grammar.jsfiles in the Tree Sitter grammars.It uses the Scala.js artifact of this project, because it's easier to parse JavaScript using a JavaScript library and package the whole server as a Node.js application.
-
markup languages and protocol files, think
- Certain YAML files (LSP with verification for Github Actions YAML files!)
- Avro files
- Protobuf files
- Smithy files (jk a great one already exists)
- LLVM IR text files (for all those compiler engineers!)
- Scala Native's NIR files
- loads and loads more
Even basic Go To Definition implementation for the files you work with for hours on a daily basis can have an immeasurable impact on your productivity.
Depends on how amazing you want the UX to be really, but if you're a lazy sloth like we are, head over the following list :
