Skip to main content

Language Support

Jotain gives every programming language the same baseline the moment its buffer opens — no language server required:
  • Completion — in-buffer completion via corfu + cape (dabbrev, file, keyword).
  • Diagnostics — on-the-fly checking via flymake.
  • Documentation — echo-area docs via eldoc.
  • Navigation — xref, imenu, tree-sitter code folding, and a breadcrumb header line.
  • Formatting on save — via apheleia, where a formatter is configured (below).
  • Editing hygiene — editorconfig, indentation detection (dtrt-indent), and snippets (tempel).
When a language server is on the project’s PATH (Jotain resolves servers from the project’s own devenv/environment, not from this config), eglot starts automatically and upgrades completion, documentation, navigation, and diagnostics to semantic LSP, and adds go-to-definition into dependencies, find-references, rename, code actions, and workspace-symbol search. Debugging is provided by dape for the languages with a DAP adapter below. The table lists the language-specific wiring on top of that baseline. It is the declared standard from the language registry; the live, ground-truth matrix (actual mode routing and which servers are bundled/available) is produced by nix build .#lang-eval-matrix, and a live end-to-end LSP probe by nix build .#lang-eval-live. Notes: marks a server set by an explicit eglot-server-programs override in init-prog.el (the rest are eglot’s built-in defaults). Live-probed ✓ marks the curated subset checked end-to-end by .#lang-eval-live. Tree-sitter ✓ means a grammar backs the major mode (all grammars ship with the distribution). This page is generated from etc/lang-eval/jotain-lang-registry.el — edit the registry, not this file, then run just docs-refresh-lang-matrix.
Last modified on September 1, 2026