Distributed tree-sitter query maintenance for Neovim.
| Repository | Description |
|---|---|
| treesitter-parser-registry | Editor-agnostic parser catalogue — registry.json, schema, documentation |
| nvim-treesitter | Neovim plugin — parser installer, query runtime, :TSInstall UX |
| .github | Org-wide reusable CI workflows and community health files |
The neovim-treesitter org exists to make tree-sitter queries a
community-maintained, per-language concern rather than a monolithic
bottleneck. We aim to:
-
Distribute ownership — each language's Neovim queries are maintained by people who actually use that language, not by a small core team reviewing 300+ languages.
-
Decouple queries from parsers — query updates and parser bumps ship independently, so a highlight fix for Python doesn't block a grammar update for Rust.
-
Provide shared infrastructure — reusable CI workflows, a schema-validated parser registry, and automated version-bump tooling so maintainers can focus on query quality rather than plumbing.
-
Encourage upstream ownership — parser authors are the best people to maintain Neovim queries for their grammar. We provide the CI and registry support to make shipping queries directly from the parser repo (the self-contained model) straightforward.
The treesitter-parser-registry is an editor-agnostic catalogue of every known tree-sitter parser and where its Neovim queries live. The registry is designed to be consumed by any installer — nvim-treesitter is the first consumer, and the schema is open for others to adopt.
Each language has one of these source types:
| Type | Meaning |
|---|---|
self_contained |
Queries ship inside the upstream parser repo |
external_queries |
Queries live in a separate nvim-treesitter-queries-<lang> repo |
queries_only |
No parser — shared queries inherited by other languages |
For languages that don't ship their own queries, we maintain individual
nvim-treesitter-queries-<lang> repositories. Each has:
- Neovim query
.scmfiles (highlights, injections, folds, indents, locals) - A
parser.jsonmanifest pinning the parser version queries are tested against - CI that validates queries on every push and PR
- Automated weekly checks for upstream parser releases
All CI is centralised as reusable workflows in the
.github repo:
- query-validate.yml — validates queries for
external_queriesrepos - self-contained-validate.yml — validates queries for
self_containedparser repos - query-bump.yml — automated parser version bumping
If you maintain a tree-sitter parser, we want to help you ship Neovim queries directly from your repo.
Shipping queries alongside your grammar means:
- Query changes can land in the same PR as grammar changes
- You control the quality and release cadence
- Users get queries that are always tested against the correct parser version
- No dependency on a separate repo or external maintainer
- Add
nvim-queries/<lang>/to your parser repo with.scmfiles - Add a CI job calling our reusable workflow (4 lines of YAML)
- Open a PR against the registry to mark your language as
self_contained
Full walkthrough: Self-Contained Migration Guide
Reference implementation: tree-sitter-zsh
If your language already has an nvim-treesitter-queries-<lang> repo and
you'd like to take ownership:
- Claim maintainership — open a PR adding yourself to
CODEOWNERSin the query repo - Or migrate to self-contained — move queries into your parser repo and we'll archive the standalone query repo
Either way, the community benefits from active maintenance.
329 languages — 1 self-contained, 325 external queries, 3 queries-only
This table is auto-generated from registry.json. Do not edit manually.
Supported languages
| Document | Description |
|---|---|
| Registry overview | Motivation and design of the distributed model |
| Architecture | Full system design — registry format, source types, installer integration |
| Contributing | Adding languages, creating query repos, governance |
| Testing | Running CI locally, ts_query_ls, corpus tests, dependency resolution |
| Self-contained migration | Guide for parser maintainers shipping their own queries |
| Registry schema | JSON Schema for registry.json and parser.json |
- Parser authors — ship queries with your grammar using the self-contained guide
- Language users — claim maintainership of a query repo for a language you use daily
- Query contributors — improve highlights, injections, folds, and indents for any language
Questions or ideas? Open an issue on the registry repo.