> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jylhis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Language Support

> Which editor features Jotain wires up for each supported language

# 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`.

| Language | Major mode | Tree-sitter | Language server | Formatter | Debug (DAP) | Snippets | Inlay | Live-probed |
| - | - | - | - | - | - | - | - | - |
| Nix | `nix-ts-mode` | ✓ | `nixd` / `nil` | `nixfmt` | — | — | ✓ | ✓ |
| Python | `python-ts-mode` | ✓ | `basedpyright-langserver` / `pyright-langserver` / `pylsp` ᵉ | `ruff` | `debugpy` | ✓ | ✓ | ✓ |
| Rust | `rust-ts-mode` | ✓ | `rust-analyzer` | `rustfmt` | `codelldb` | ✓ | ✓ | — |
| Go | `go-ts-mode` | ✓ | `gopls` ᵉ | `goimports` | `dlv` | ✓ | ✓ | ✓ |
| TypeScript | `typescript-ts-mode` | ✓ | `typescript-language-server` ᵉ | `prettier` | — | ✓ | ✓ | ✓ |
| TSX | `tsx-ts-mode` | ✓ | `typescript-language-server` ᵉ | `prettier` | — | ✓ | ✓ | — |
| JavaScript | `js-ts-mode` | ✓ | `typescript-language-server` ᵉ | `prettier` | — | ✓ | — | — |
| CSS / SCSS | `css-ts-mode` | ✓ | `vscode-css-language-server` | `prettier` | — | — | — | — |
| C | `c-ts-mode` | ✓ | `clangd` ᵉ | `clang-format` | `codelldb` | ✓ | ✓ | — |
| C++ | `c++-ts-mode` | ✓ | `clangd` ᵉ | `clang-format` | `codelldb` | ✓ | ✓ | — |
| CUDA | `cuda-ts-mode` | ✓ | `clangd` ᵉ | `clang-format` | `codelldb` | ✓ | ✓ | — |
| Bash / shell | `bash-ts-mode` | ✓ | `bash-language-server` | `shfmt` | — | — | — | ✓ |
| Dockerfile | `dockerfile-ts-mode` | ✓ | `docker-langserver` ᵉ | — | — | — | — | ✓ |
| YAML | `yaml-ts-mode` | ✓ | `yaml-language-server` | `prettier` | — | — | — | ✓ |
| JSON | `json-ts-mode` | ✓ | `vscode-json-language-server` | `prettier` | — | — | — | — |
| TOML | `toml-ts-mode` | ✓ | `taplo` | — | — | — | — | — |
| Zig | `zig-ts-mode` | ✓ | `zls` | `zig` | — | — | ✓ | — |
| OCaml | `neocaml-mode` | ✓ | `ocamllsp` ᵉ | `ocamlformat` | — | — | ✓ | — |
| Haskell | `haskell-ts-mode` | ✓ | `haskell-language-server-wrapper` | — | — | — | ✓ | — |
| Terraform | `terraform-mode` | — | `terraform-ls` | — | — | — | — | — |
| CMake | `cmake-ts-mode` | ✓ | `cmake-language-server` | — | — | — | — | — |
| Meson | `meson-mode` | — | — | `meson` | — | — | — | — |
| QML | `qml-ts-mode` | ✓ | `qmlls` ᵉ | `qmlformat` | — | — | — | — |
| LikeC4 | `likec4-mode` | — | `likec4-lsp` / `likec4` ᵉ | — | — | — | — | — |
| HTML | `mhtml-ts-mode` | ✓ | `vscode-html-language-server` / `html-languageserver` ᵉ | — | — | — | — | — |
| CSV | `csv-mode` | — | — | — | — | — | — | — |
| SQL | `sql-mode` | — | — | — | — | — | — | — |
| Dune | `dune-mode` | — | — | — | — | — | — | — |
| Bazel / Starlark | `bazel-build-mode` | — | — | `buildifier` | — | — | — | — |
| Structurizr DSL | `jotain-structurizr-mode` | — | — | — | — | — | — | — |
| Jinja2 | `jinja2-mode` | — | — | — | — | — | — | — |
| Just | `just-ts-mode` | ✓ | — | — | — | — | — | — |

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`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.