This repository now host multiple npm packages under one roof:
The examples not requiring a backend are now available via GitHub Pages.
Since monaco-languageclient version 10 we started to build an official documentation. This will be continuously extended.
We added a migration guide with the release of monaco-languageclient version 10.
CHANGELOGs for each project are available from the linked location:
monaco-languageclient is found herevscode-ws-jsonrpc is found here@typefox/monaco-editor-react is found heremonaco-languageclient-examples is found hereImportant Project changes and notes about the project's history are found here.
These are the current versions of packages from this repository and their alignment with @codingame/monaco-vscode-api monaco-editor and vscode:
10.7.0 (release date: 2026-02-04)7.7.0 (release date: unrel2026-02-04eased)25.1.21.108.20.55.13.5.0 (release date: 2025-08-11)Check find the full compatibility table with all previous versions.
We recommend mise-en-place to setup corrects version of required tools like node and npm (described here). If you have mise installed use the optional isntruction below.
On your local machine you can prepare your dev environment as follows. At first it is advised to build everything. Locally, from a terminal do:
# clone the git repository
git clone https://github.com/TypeFox/monaco-languageclient.git
cd monaco-languageclient
# optional: if you have mise installed
mise upgrade
# install npm dependencies
npm i
# Cleans-up, compiles and builds everything
npm run build
Start the Vite dev server. It serves all client code at localhost. You can go to the index.html and navigate to all client examples from there. You can edit the client example code directly (TypeScript) and Vite ensures it automatically made available:
npm run dev
# OR: this clears the cache and has debug output
npm run dev:debug
As this is a npm workspace the main package.json contains script entries applicable to the whole workspace like watch, build and lint, but it also contains shortcuts for launching scripts from the childe packages like npm run build:examples.
If you want to change the libries and see this reflected directly, then you need to run the watch command that compiles all TypeScript files form both libraries and the examples:
npm run watch
Please look at the respective section in the packages:
monaco-languageclient is found herevscode-ws-jsonrpc is found here@typefox/monaco-editor-react is found hereThe examples demonstrate mutliple things:
monaco-languageclient is use by monaco-edtior-wrapper or @typefox/monaco-editor-react to have an editor that is connected to a language server either running in the browser in a web worker or vscode-ws-jsonrpc. is used to an external process via web-socket.The json-server runs an external Node.js Express app where web sockets are used to enable communication between the language server process and the client web application (see JSON Language Server). The json-client using extended mode as editor app which connects to the language server and therefore requires the node server app to be run in parallel. The json-client using classic mode as editor app which connects to the language server and therefore requires the node server app to be run in parallel.
The python-server runs an external Node.js Express app where web sockets are used to enable communication between the language server process and the client web application (see Pyright Language Server). The python-client contains the editor app which connects to the language server and therefore requires the node server app to be run in parallel. It is also possible to use a @typefox/monaco-editor-react app to connect to the server. Both versions now feature a debugger, see here.
The groovy-server runs an external Java app where web sockets are used to enable communication between the language server process and the client web application (Groovy Language Server). The groovy-client contains the editor app which connects to the language server and therefore requires the node server app to be run in parallel.
The java-server runs an external Java app where web sockets are used to enable communication between the language server process and the client web application (Java Language Server). The java-client contains the editor app which connects to the language server and therefore requires the node server app to be run in parallel.
Langium examples (here client and server communicate via vscode-languageserver-protocol/browser instead of a web socket used in the three examples above
It contains both the language client and the langauge server (web worker). The clangd language server is compiled to wasm so it can be executed in the browser. Heads up: This is a prototype and still evolving.
This example uses the view service provider from @codingame/monaco-vscode-editor-api to build an application that utilizes more vscode features. Alternatively, it is possible to use a react version of the app Heads up: This is a prototype and still evolving.
It contains both the language client and the langauge server (web worker). Here you can chose beforehand if the wrapper should be started in classic or extended mode.
It contains both the language client and the langauge server (web worker). It is also possible to use a @typefox/monaco-editor-react app to connect to the server.
This demonstrates how an editor app can be combined with a language service written in JavaScript. This example can now be considered
$ claude mcp add monaco-languageclient \
-- python -m otcore.mcp_server <graph>