Editor support

Write .milda with the comforts you expect from a real language: syntax highlighting, live diagnostics, completion, hover docs, go-to-definition, a document outline, and folding. It all comes from one language server, so every editor behaves the same.

No editor at hand?
The Playground runs the same language server in the browser: highlighting, diagnostics, completion and hover, next to a live preview of what the file produces.

#What you get

  • Syntax highlighting - keywords, types, colour functions, strings, numbers, and dotted token references, coloured the instant a file opens.
  • Diagnostics - syntactic and cross-file semantic errors as you type (unknown archetypes, dangling token references, literal-vs-declared-type mismatches, and more).
  • Completion, hover, and go-to-definition over keywords, types, tokens, and component references.
  • Document outline & folding - jump around foundations, components, and parts from the breadcrumb / symbol list.

#VS Code

Install Milda from the VS Code Marketplace, or from the command line:

bash
code --install-extension milda.milda-vscode

The language server ships inside the extension and runs on VS Code's own runtime, so there is nothing else to install - not even Node.js.

#Cursor, Windsurf, VSCodium

VS Code forks install from Open VSX. Search Milda in the extensions panel, or:

bash
cursor --install-extension milda.milda-vscode   # Windsurf, VSCodium: use their CLI or the UI

#JetBrains IDEs

In IntelliJ IDEA Ultimate, WebStorm, PyCharm, GoLand, Rider, and other paid JetBrains IDEs, open Settings › Plugins › Marketplace and search Milda, or install it from the JetBrains Marketplace page. The plugin bundles the language server; you only need Node.js on your machine to run it.

Paid IDEs only
JetBrains exposes the LSP integration API only in its paid IDEs, not the Community editions. Syntax highlighting, file recognition, and commenting still work everywhere; the language-server features (diagnostics, completion, hover, definition) need a paid IDE.

#Any other editor

The server is a standard LSP over stdio, so it works with Neovim, Zed, Emacs, Helix, Sublime, and anything else with an LSP client. Install it from npm:

bash
npm install -g @mildastudio/milda-lsp   # provides the `milda-lsp` binary

Then point your editor's LSP client at the milda-lsp command for .milda files. For example, with Neovim's built-in client:

lua
vim.filetype.add({ extension = { milda = 'milda' } })

vim.api.nvim_create_autocmd('FileType', {
  pattern = 'milda',
  callback = function(args)
    vim.lsp.start({
      name = 'milda-lsp',
      cmd = { 'milda-lsp' },
      root_dir = vim.fs.dirname(args.file),
    })
  end,
})
Highlighting outside VS Code / JetBrains
Editors that consume the server get semantic-token highlighting from it directly. The VS Code and JetBrains packages additionally bundle a native grammar for zero-latency colouring before the server has started.

#Checking files from the command line

The same package ships milda-check, the reader without an editor around it. Give it files or directories; a directory contributes every .milda file in it, and all the files of one call are checked together, so a token declared in one file resolves a reference in another.

bash
npx -y -p @mildastudio/milda-lsp milda-check design-system/
# or, installed globally
milda-check --strict design-system/ shared/tokens.milda

It prints one finding per line as path:line:col severity [code] message, the same diagnostics the editors show, then a count. It exits 1 on any error, and with --strict on any warning too, so it can gate a pull request in CI. It is also how the Milda skill has an AI assistant check its own work.

#One server, one vocabulary

Every editor is driven by the same @mildastudio/milda-lsp server, and all three highlighters (the server's semantic tokens, the VS Code TextMate grammar, and the JetBrains lexer) are generated from a single shared vocabulary. They cannot drift on what counts as a keyword, a type, or a colour function. See the value literals and facets & tokens pages for what those colours mean.