diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md
index 62bd838d474d..e6bc5b735720 100644
--- a/book/src/SUMMARY.md
+++ b/book/src/SUMMARY.md
@@ -30,3 +30,4 @@
- [Adding indent queries](./guides/indent.md)
- [Adding injection queries](./guides/injection.md)
- [Adding tags queries](./guides/tags.md)
+ - [Adding rainbow bracket queries](./guides/rainbow_bracket_queries.md)
diff --git a/book/src/editor.md b/book/src/editor.md
index b919250985e5..052b94c357e5 100644
--- a/book/src/editor.md
+++ b/book/src/editor.md
@@ -63,6 +63,7 @@
| `end-of-line-diagnostics` | Minimum severity of diagnostics to render at the end of the line. Set to `disable` to disable entirely. Refer to the setting about `inline-diagnostics` for more details | "disable"
| `clipboard-provider` | Which API to use for clipboard interaction. One of `pasteboard` (MacOS), `wayland`, `x-clip`, `x-sel`, `win-32-yank`, `termux`, `tmux`, `windows`, `termcode`, `none`, or a custom command set. | Platform and environment specific. |
| `editor-config` | Whether to read settings from [EditorConfig](https://editorconfig.org) files | `true` |
+| `rainbow-brackets` | Whether to render rainbow colors for matching brackets. Requires tree-sitter `rainbows.scm` queries for the language. | `false` |
### `[editor.clipboard-provider]` Section
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 2875cb72405a..e6ca8bce7c34 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -1,285 +1,285 @@
-| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Code Navigation Tags | Default language servers |
-| --- | --- | --- | --- | --- | --- |
-| ada | ✓ | ✓ | | | `ada_language_server` |
-| adl | ✓ | ✓ | ✓ | | |
-| agda | ✓ | | | | |
-| alloy | ✓ | | | | |
-| amber | ✓ | | | | `amber-lsp` |
-| astro | ✓ | | | | `astro-ls` |
-| awk | ✓ | ✓ | | | `awk-language-server` |
-| bash | ✓ | ✓ | ✓ | | `bash-language-server` |
-| bass | ✓ | | | | `bass` |
-| beancount | ✓ | | | | `beancount-language-server` |
-| bibtex | ✓ | | | | `texlab` |
-| bicep | ✓ | | | | `bicep-langserver` |
-| bitbake | ✓ | | | | `bitbake-language-server` |
-| blade | ✓ | | | | |
-| blueprint | ✓ | | | | `blueprint-compiler` |
-| c | ✓ | ✓ | ✓ | ✓ | `clangd` |
-| c-sharp | ✓ | ✓ | | ✓ | `OmniSharp` |
-| cabal | | | | | `haskell-language-server-wrapper` |
-| caddyfile | ✓ | ✓ | ✓ | | |
-| cairo | ✓ | ✓ | ✓ | | `cairo-language-server` |
-| capnp | ✓ | | ✓ | | |
-| cel | ✓ | | | | |
-| circom | ✓ | | | | `circom-lsp` |
-| clarity | ✓ | | | | `clarinet` |
-| clojure | ✓ | | | | `clojure-lsp` |
-| cmake | ✓ | ✓ | ✓ | | `neocmakelsp`, `cmake-language-server` |
-| codeql | ✓ | ✓ | | | `codeql` |
-| comment | ✓ | | | | |
-| common-lisp | ✓ | | ✓ | | `cl-lsp` |
-| cpon | ✓ | | ✓ | | |
-| cpp | ✓ | ✓ | ✓ | ✓ | `clangd` |
-| crystal | ✓ | ✓ | ✓ | ✓ | `crystalline`, `ameba-ls` |
-| css | ✓ | | ✓ | | `vscode-css-language-server` |
-| csv | ✓ | | | | |
-| cue | ✓ | | | | `cuelsp` |
-| cylc | ✓ | ✓ | ✓ | | |
-| d | ✓ | ✓ | ✓ | | `serve-d` |
-| dart | ✓ | ✓ | ✓ | | `dart` |
-| dbml | ✓ | | | | |
-| debian | ✓ | | | | |
-| devicetree | ✓ | | | | `dts-lsp` |
-| dhall | ✓ | ✓ | | | `dhall-lsp-server` |
-| diff | ✓ | | | | |
-| djot | ✓ | | | | |
-| docker-compose | ✓ | ✓ | ✓ | | `docker-compose-langserver`, `yaml-language-server` |
-| dockerfile | ✓ | ✓ | | | `docker-langserver` |
-| dot | ✓ | | | | `dot-language-server` |
-| dtd | ✓ | | | | |
-| dune | ✓ | | | | |
-| dunstrc | ✓ | | | | |
-| earthfile | ✓ | ✓ | ✓ | | `earthlyls` |
-| edoc | ✓ | | | | |
-| eex | ✓ | | | | |
-| ejs | ✓ | | | | |
-| elisp | ✓ | | | ✓ | |
-| elixir | ✓ | ✓ | ✓ | ✓ | `elixir-ls` |
-| elm | ✓ | ✓ | | ✓ | `elm-language-server` |
-| elvish | ✓ | | | | `elvish` |
-| env | ✓ | ✓ | | | |
-| erb | ✓ | | | | |
-| erlang | ✓ | ✓ | | ✓ | `erlang_ls`, `elp` |
-| esdl | ✓ | | | | |
-| fennel | ✓ | | | | `fennel-ls` |
-| fga | ✓ | ✓ | ✓ | | |
-| fidl | ✓ | | | | |
-| fish | ✓ | ✓ | ✓ | | `fish-lsp` |
-| forth | ✓ | | | | `forth-lsp` |
-| fortran | ✓ | | ✓ | | `fortls` |
-| fsharp | ✓ | | | | `fsautocomplete` |
-| gas | ✓ | ✓ | | | `asm-lsp` |
-| gdscript | ✓ | ✓ | ✓ | ✓ | |
-| gemini | ✓ | | | | |
-| gherkin | ✓ | | | | |
-| ghostty | ✓ | | | | |
-| git-attributes | ✓ | | | | |
-| git-commit | ✓ | ✓ | | | |
-| git-config | ✓ | ✓ | | | |
-| git-ignore | ✓ | | | | |
-| git-notes | ✓ | | | | |
-| git-rebase | ✓ | | | | |
-| gjs | ✓ | ✓ | ✓ | ✓ | `typescript-language-server`, `vscode-eslint-language-server`, `ember-language-server` |
-| gleam | ✓ | ✓ | | | `gleam` |
-| glimmer | ✓ | | | | `ember-language-server` |
-| glsl | ✓ | ✓ | ✓ | | `glsl_analyzer` |
-| gn | ✓ | | | | |
-| go | ✓ | ✓ | ✓ | ✓ | `gopls`, `golangci-lint-langserver` |
-| go-format-string | ✓ | | | | |
-| godot-resource | ✓ | ✓ | | | |
-| gomod | ✓ | | | | `gopls` |
-| gotmpl | ✓ | | | | `gopls` |
-| gowork | ✓ | | | | `gopls` |
-| gpr | ✓ | | | | `ada_language_server` |
-| graphql | ✓ | ✓ | | | `graphql-lsp` |
-| gren | ✓ | ✓ | | | |
-| groovy | ✓ | | | | |
-| gts | ✓ | ✓ | ✓ | ✓ | `typescript-language-server`, `vscode-eslint-language-server`, `ember-language-server` |
-| hare | ✓ | | | | |
-| haskell | ✓ | ✓ | | | `haskell-language-server-wrapper` |
-| haskell-persistent | ✓ | | | | |
-| hcl | ✓ | ✓ | ✓ | | `terraform-ls` |
-| heex | ✓ | ✓ | | | `elixir-ls` |
-| helm | ✓ | | | | `helm_ls` |
-| hocon | ✓ | ✓ | ✓ | | |
-| hoon | ✓ | | | | |
-| hosts | ✓ | | | | |
-| html | ✓ | ✓ | | | `vscode-html-language-server`, `superhtml` |
-| htmldjango | ✓ | | | | `djlsp`, `vscode-html-language-server`, `superhtml` |
-| hurl | ✓ | ✓ | ✓ | | |
-| hyprlang | ✓ | | ✓ | | `hyprls` |
-| idris | | | | | `idris2-lsp` |
-| iex | ✓ | | | | |
-| ini | ✓ | | | | |
-| ink | ✓ | | | | |
-| inko | ✓ | ✓ | ✓ | ✓ | |
-| janet | ✓ | | ✓ | | |
-| java | ✓ | ✓ | ✓ | | `jdtls` |
-| javascript | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
-| jinja | ✓ | | | | |
-| jjconfig | ✓ | ✓ | ✓ | | `taplo`, `tombi` |
-| jjdescription | ✓ | | | | |
-| jjrevset | ✓ | | | | |
-| jjtemplate | ✓ | | | | |
-| jq | ✓ | ✓ | | | `jq-lsp` |
-| jsdoc | ✓ | | | | |
-| json | ✓ | ✓ | ✓ | | `vscode-json-language-server` |
-| json-ld | ✓ | ✓ | ✓ | | `vscode-json-language-server` |
-| json5 | ✓ | | | | |
-| jsonc | ✓ | | ✓ | | `vscode-json-language-server` |
-| jsonnet | ✓ | | | | `jsonnet-language-server` |
-| jsx | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
-| julia | ✓ | ✓ | ✓ | | `julia` |
-| just | ✓ | ✓ | ✓ | | `just-lsp` |
-| kdl | ✓ | ✓ | ✓ | | |
-| koka | ✓ | | ✓ | | `koka` |
-| kotlin | ✓ | ✓ | ✓ | | `kotlin-language-server` |
-| koto | ✓ | ✓ | ✓ | | `koto-ls` |
-| latex | ✓ | ✓ | | | `texlab` |
-| ld | ✓ | | ✓ | | |
-| ldif | ✓ | | | | |
-| lean | ✓ | | | | `lean` |
-| ledger | ✓ | | | | |
-| llvm | ✓ | ✓ | ✓ | | |
-| llvm-mir | ✓ | ✓ | ✓ | | |
-| llvm-mir-yaml | ✓ | | ✓ | | |
-| log | ✓ | | | | |
-| lpf | ✓ | | | | |
-| lua | ✓ | ✓ | ✓ | | `lua-language-server` |
-| luap | ✓ | | | | |
-| luau | ✓ | ✓ | ✓ | | `luau-lsp` |
-| mail | ✓ | ✓ | | | |
-| make | ✓ | | ✓ | | |
-| markdoc | ✓ | | | | `markdoc-ls` |
-| markdown | ✓ | | | ✓ | `marksman`, `markdown-oxide` |
-| markdown-rustdoc | ✓ | | | | |
-| markdown.inline | ✓ | | | | |
-| matlab | ✓ | ✓ | ✓ | | |
-| mermaid | ✓ | | | | |
-| meson | ✓ | | ✓ | | `mesonlsp` |
-| mint | | | | | `mint` |
-| mojo | ✓ | ✓ | ✓ | | `pixi` |
-| move | ✓ | | | | |
-| msbuild | ✓ | | ✓ | | |
-| nasm | ✓ | ✓ | | | `asm-lsp` |
-| nestedtext | ✓ | ✓ | ✓ | | |
-| nginx | ✓ | | | | |
-| nickel | ✓ | | ✓ | | `nls` |
-| nim | ✓ | ✓ | ✓ | | `nimlangserver` |
-| nix | ✓ | ✓ | ✓ | | `nil`, `nixd` |
-| nu | ✓ | | | | `nu` |
-| nunjucks | ✓ | | | | |
-| ocaml | ✓ | | ✓ | | `ocamllsp` |
-| ocaml-interface | ✓ | | | | `ocamllsp` |
-| odin | ✓ | ✓ | ✓ | | `ols` |
-| ohm | ✓ | ✓ | ✓ | | |
-| opencl | ✓ | ✓ | ✓ | | `clangd` |
-| openscad | ✓ | | | | `openscad-lsp` |
-| org | ✓ | | | | |
-| pascal | ✓ | ✓ | | | `pasls` |
-| passwd | ✓ | | | | |
-| pem | ✓ | | | | |
-| perl | ✓ | ✓ | ✓ | | `perlnavigator` |
-| pest | ✓ | ✓ | ✓ | | `pest-language-server` |
-| php | ✓ | ✓ | ✓ | ✓ | `intelephense` |
-| php-only | ✓ | | | ✓ | |
-| pkgbuild | ✓ | ✓ | ✓ | | `termux-language-server`, `bash-language-server` |
-| pkl | ✓ | | ✓ | | `pkl-lsp` |
-| po | ✓ | ✓ | | | |
-| pod | ✓ | | | | |
-| ponylang | ✓ | ✓ | ✓ | | |
-| powershell | ✓ | | | | |
-| prisma | ✓ | ✓ | | | `prisma-language-server` |
-| prolog | ✓ | | ✓ | | `swipl` |
-| properties | ✓ | ✓ | | | |
-| protobuf | ✓ | ✓ | ✓ | | `buf`, `pb`, `protols` |
-| prql | ✓ | | | | |
-| pug | ✓ | | | | |
-| purescript | ✓ | ✓ | | | `purescript-language-server` |
-| python | ✓ | ✓ | ✓ | ✓ | `ty`, `ruff`, `jedi-language-server`, `pylsp` |
-| qml | ✓ | ✓ | ✓ | | `qmlls` |
-| quarto | ✓ | | ✓ | | |
-| quint | ✓ | | | | `quint-language-server` |
-| r | ✓ | | | | `R` |
-| racket | ✓ | | ✓ | | `racket` |
-| regex | ✓ | | | | |
-| rego | ✓ | | | | `regols` |
-| rescript | ✓ | ✓ | | | `rescript-language-server` |
-| rmarkdown | ✓ | | ✓ | | `R` |
-| robot | ✓ | | | | `robotframework_ls` |
-| ron | ✓ | | ✓ | | |
-| rst | ✓ | | | | |
-| ruby | ✓ | ✓ | ✓ | ✓ | `ruby-lsp`, `solargraph` |
-| rust | ✓ | ✓ | ✓ | ✓ | `rust-analyzer` |
-| rust-format-args | ✓ | | | | |
-| rust-format-args-macro | ✓ | ✓ | ✓ | | |
-| sage | ✓ | ✓ | | | |
-| scala | ✓ | ✓ | ✓ | | `metals` |
-| scheme | ✓ | | ✓ | | |
-| scss | ✓ | | | | `vscode-css-language-server` |
-| slang | ✓ | ✓ | ✓ | | `slangd` |
-| slint | ✓ | ✓ | ✓ | | `slint-lsp` |
-| smali | ✓ | | ✓ | | |
-| smithy | ✓ | | | | `cs` |
-| sml | ✓ | | | | |
-| snakemake | ✓ | | ✓ | | `pylsp` |
-| solidity | ✓ | ✓ | | | `solc` |
-| sourcepawn | ✓ | ✓ | | | `sourcepawn-studio` |
-| spade | ✓ | | ✓ | | `spade-language-server` |
-| spicedb | ✓ | | | ✓ | |
-| sql | ✓ | ✓ | | | |
-| sshclientconfig | ✓ | | | | |
-| starlark | ✓ | ✓ | ✓ | | `starpls` |
-| strace | ✓ | | | | |
-| supercollider | ✓ | | | | |
-| svelte | ✓ | | ✓ | | `svelteserver` |
-| sway | ✓ | ✓ | ✓ | | `forc` |
-| swift | ✓ | ✓ | | | `sourcekit-lsp` |
-| systemd | ✓ | | | | `systemd-lsp` |
-| t32 | ✓ | | | | |
-| tablegen | ✓ | ✓ | ✓ | | |
-| tact | ✓ | ✓ | ✓ | | |
-| task | ✓ | | | | |
-| tcl | ✓ | | ✓ | | |
-| teal | ✓ | | | | `teal-language-server` |
-| templ | ✓ | | | | `templ` |
-| tera | ✓ | | | | |
-| textproto | ✓ | ✓ | ✓ | | |
-| tfvars | ✓ | | ✓ | | `terraform-ls` |
-| thrift | ✓ | | | | |
-| tlaplus | ✓ | | | | |
-| todotxt | ✓ | | | | |
-| toml | ✓ | ✓ | | | `taplo`, `tombi` |
-| tsq | ✓ | | | | `ts_query_ls` |
-| tsx | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
-| twig | ✓ | | | | |
-| typescript | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
-| typespec | ✓ | ✓ | ✓ | | `tsp-server` |
-| typst | ✓ | | | ✓ | `tinymist` |
-| ungrammar | ✓ | | | | |
-| unison | ✓ | ✓ | ✓ | | |
-| uxntal | ✓ | | | | |
-| v | ✓ | ✓ | ✓ | | `v-analyzer` |
-| vala | ✓ | ✓ | | | `vala-language-server` |
-| vento | ✓ | | | | |
-| verilog | ✓ | ✓ | | | `svlangserver` |
-| vhdl | ✓ | | | | `vhdl_ls` |
-| vhs | ✓ | | | | |
-| vim | ✓ | | | | |
-| vue | ✓ | | | | `vue-language-server` |
-| wast | ✓ | | | | |
-| wat | ✓ | | | | `wat_server` |
-| webc | ✓ | | | | |
-| werk | ✓ | | | | |
-| wesl | ✓ | ✓ | | | |
-| wgsl | ✓ | | | | `wgsl-analyzer` |
-| wit | ✓ | | ✓ | | |
-| wren | ✓ | ✓ | ✓ | | |
-| xit | ✓ | | | | |
-| xml | ✓ | ✓ | ✓ | | |
-| xtc | ✓ | | | | |
-| yaml | ✓ | ✓ | ✓ | | `yaml-language-server`, `ansible-language-server` |
-| yara | ✓ | | | | `yls` |
-| yuck | ✓ | | | | |
-| zig | ✓ | ✓ | ✓ | | `zls` |
+| Language | Syntax Highlighting | Treesitter Textobjects | Auto Indent | Code Navigation Tags | Rainbow Brackets | Default language servers |
+| --- | --- | --- | --- | --- | --- | --- |
+| ada | ✓ | ✓ | | | | `ada_language_server` |
+| adl | ✓ | ✓ | ✓ | | | |
+| agda | ✓ | | | | | |
+| alloy | ✓ | | | | | |
+| amber | ✓ | | | | | `amber-lsp` |
+| astro | ✓ | | | | | `astro-ls` |
+| awk | ✓ | ✓ | | | | `awk-language-server` |
+| bash | ✓ | ✓ | ✓ | | ✓ | `bash-language-server` |
+| bass | ✓ | | | | | `bass` |
+| beancount | ✓ | | | | | `beancount-language-server` |
+| bibtex | ✓ | | | | | `texlab` |
+| bicep | ✓ | | | | | `bicep-langserver` |
+| bitbake | ✓ | | | | | `bitbake-language-server` |
+| blade | ✓ | | | | | |
+| blueprint | ✓ | | | | | `blueprint-compiler` |
+| c | ✓ | ✓ | ✓ | ✓ | ✓ | `clangd` |
+| c-sharp | ✓ | ✓ | | ✓ | | `OmniSharp` |
+| cabal | | | | | | `haskell-language-server-wrapper` |
+| caddyfile | ✓ | ✓ | ✓ | | | |
+| cairo | ✓ | ✓ | ✓ | | | `cairo-language-server` |
+| capnp | ✓ | | ✓ | | | |
+| cel | ✓ | | | | | |
+| circom | ✓ | | | | | `circom-lsp` |
+| clarity | ✓ | | | | | `clarinet` |
+| clojure | ✓ | | | | ✓ | `clojure-lsp` |
+| cmake | ✓ | ✓ | ✓ | | | `neocmakelsp`, `cmake-language-server` |
+| codeql | ✓ | ✓ | | | | `codeql` |
+| comment | ✓ | | | | | |
+| common-lisp | ✓ | | ✓ | | ✓ | `cl-lsp` |
+| cpon | ✓ | | ✓ | | | |
+| cpp | ✓ | ✓ | ✓ | ✓ | ✓ | `clangd` |
+| crystal | ✓ | ✓ | ✓ | ✓ | | `crystalline`, `ameba-ls` |
+| css | ✓ | | ✓ | | ✓ | `vscode-css-language-server` |
+| csv | ✓ | | | | | |
+| cue | ✓ | | | | | `cuelsp` |
+| cylc | ✓ | ✓ | ✓ | | | |
+| d | ✓ | ✓ | ✓ | | | `serve-d` |
+| dart | ✓ | ✓ | ✓ | | | `dart` |
+| dbml | ✓ | | | | | |
+| debian | ✓ | | | | | |
+| devicetree | ✓ | | | | | `dts-lsp` |
+| dhall | ✓ | ✓ | | | | `dhall-lsp-server` |
+| diff | ✓ | | | | | |
+| djot | ✓ | | | | | |
+| docker-compose | ✓ | ✓ | ✓ | | | `docker-compose-langserver`, `yaml-language-server` |
+| dockerfile | ✓ | ✓ | | | | `docker-langserver` |
+| dot | ✓ | | | | | `dot-language-server` |
+| dtd | ✓ | | | | | |
+| dune | ✓ | | | | | |
+| dunstrc | ✓ | | | | | |
+| earthfile | ✓ | ✓ | ✓ | | | `earthlyls` |
+| edoc | ✓ | | | | | |
+| eex | ✓ | | | | | |
+| ejs | ✓ | | | | | |
+| elisp | ✓ | | | ✓ | | |
+| elixir | ✓ | ✓ | ✓ | ✓ | ✓ | `elixir-ls` |
+| elm | ✓ | ✓ | | ✓ | | `elm-language-server` |
+| elvish | ✓ | | | | | `elvish` |
+| env | ✓ | ✓ | | | | |
+| erb | ✓ | | | | | |
+| erlang | ✓ | ✓ | | ✓ | ✓ | `erlang_ls`, `elp` |
+| esdl | ✓ | | | | | |
+| fennel | ✓ | | | | | `fennel-ls` |
+| fga | ✓ | ✓ | ✓ | | | |
+| fidl | ✓ | | | | | |
+| fish | ✓ | ✓ | ✓ | | | `fish-lsp` |
+| forth | ✓ | | | | | `forth-lsp` |
+| fortran | ✓ | | ✓ | | | `fortls` |
+| fsharp | ✓ | | | | | `fsautocomplete` |
+| gas | ✓ | ✓ | | | | `asm-lsp` |
+| gdscript | ✓ | ✓ | ✓ | ✓ | | |
+| gemini | ✓ | | | | | |
+| gherkin | ✓ | | | | | |
+| ghostty | ✓ | | | | | |
+| git-attributes | ✓ | | | | | |
+| git-commit | ✓ | ✓ | | | | |
+| git-config | ✓ | ✓ | | | | |
+| git-ignore | ✓ | | | | | |
+| git-notes | ✓ | | | | | |
+| git-rebase | ✓ | | | | | |
+| gjs | ✓ | ✓ | ✓ | ✓ | | `typescript-language-server`, `vscode-eslint-language-server`, `ember-language-server` |
+| gleam | ✓ | ✓ | | | ✓ | `gleam` |
+| glimmer | ✓ | | | | | `ember-language-server` |
+| glsl | ✓ | ✓ | ✓ | | | `glsl_analyzer` |
+| gn | ✓ | | | | | |
+| go | ✓ | ✓ | ✓ | ✓ | ✓ | `gopls`, `golangci-lint-langserver` |
+| go-format-string | ✓ | | | | | |
+| godot-resource | ✓ | ✓ | | | | |
+| gomod | ✓ | | | | | `gopls` |
+| gotmpl | ✓ | | | | | `gopls` |
+| gowork | ✓ | | | | | `gopls` |
+| gpr | ✓ | | | | | `ada_language_server` |
+| graphql | ✓ | ✓ | | | | `graphql-lsp` |
+| gren | ✓ | ✓ | | | | |
+| groovy | ✓ | | | | | |
+| gts | ✓ | ✓ | ✓ | ✓ | | `typescript-language-server`, `vscode-eslint-language-server`, `ember-language-server` |
+| hare | ✓ | | | | | |
+| haskell | ✓ | ✓ | | | | `haskell-language-server-wrapper` |
+| haskell-persistent | ✓ | | | | | |
+| hcl | ✓ | ✓ | ✓ | | | `terraform-ls` |
+| heex | ✓ | ✓ | | | | `elixir-ls` |
+| helm | ✓ | | | | | `helm_ls` |
+| hocon | ✓ | ✓ | ✓ | | | |
+| hoon | ✓ | | | | | |
+| hosts | ✓ | | | | | |
+| html | ✓ | ✓ | | | ✓ | `vscode-html-language-server`, `superhtml` |
+| htmldjango | ✓ | | | | | `djlsp`, `vscode-html-language-server`, `superhtml` |
+| hurl | ✓ | ✓ | ✓ | | | |
+| hyprlang | ✓ | | ✓ | | | `hyprls` |
+| idris | | | | | | `idris2-lsp` |
+| iex | ✓ | | | | | |
+| ini | ✓ | | | | | |
+| ink | ✓ | | | | | |
+| inko | ✓ | ✓ | ✓ | ✓ | | |
+| janet | ✓ | | ✓ | | | |
+| java | ✓ | ✓ | ✓ | | ✓ | `jdtls` |
+| javascript | ✓ | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
+| jinja | ✓ | | | | | |
+| jjconfig | ✓ | ✓ | ✓ | | | `taplo`, `tombi` |
+| jjdescription | ✓ | | | | | |
+| jjrevset | ✓ | | | | | |
+| jjtemplate | ✓ | | | | | |
+| jq | ✓ | ✓ | | | | `jq-lsp` |
+| jsdoc | ✓ | | | | | |
+| json | ✓ | ✓ | ✓ | | ✓ | `vscode-json-language-server` |
+| json-ld | ✓ | ✓ | ✓ | | | `vscode-json-language-server` |
+| json5 | ✓ | | | | | |
+| jsonc | ✓ | | ✓ | | | `vscode-json-language-server` |
+| jsonnet | ✓ | | | | | `jsonnet-language-server` |
+| jsx | ✓ | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
+| julia | ✓ | ✓ | ✓ | | | `julia` |
+| just | ✓ | ✓ | ✓ | | | `just-lsp` |
+| kdl | ✓ | ✓ | ✓ | | | |
+| koka | ✓ | | ✓ | | | `koka` |
+| kotlin | ✓ | ✓ | ✓ | | | `kotlin-language-server` |
+| koto | ✓ | ✓ | ✓ | | | `koto-ls` |
+| latex | ✓ | ✓ | | | | `texlab` |
+| ld | ✓ | | ✓ | | | |
+| ldif | ✓ | | | | | |
+| lean | ✓ | | | | | `lean` |
+| ledger | ✓ | | | | | |
+| llvm | ✓ | ✓ | ✓ | | | |
+| llvm-mir | ✓ | ✓ | ✓ | | | |
+| llvm-mir-yaml | ✓ | | ✓ | | | |
+| log | ✓ | | | | | |
+| lpf | ✓ | | | | | |
+| lua | ✓ | ✓ | ✓ | | | `lua-language-server` |
+| luap | ✓ | | | | | |
+| luau | ✓ | ✓ | ✓ | | | `luau-lsp` |
+| mail | ✓ | ✓ | | | | |
+| make | ✓ | | ✓ | | | |
+| markdoc | ✓ | | | | | `markdoc-ls` |
+| markdown | ✓ | | | ✓ | | `marksman`, `markdown-oxide` |
+| markdown-rustdoc | ✓ | | | | | |
+| markdown.inline | ✓ | | | | | |
+| matlab | ✓ | ✓ | ✓ | | | |
+| mermaid | ✓ | | | | | |
+| meson | ✓ | | ✓ | | | `mesonlsp` |
+| mint | | | | | | `mint` |
+| mojo | ✓ | ✓ | ✓ | | | `pixi` |
+| move | ✓ | | | | | |
+| msbuild | ✓ | | ✓ | | | |
+| nasm | ✓ | ✓ | | | | `asm-lsp` |
+| nestedtext | ✓ | ✓ | ✓ | | | |
+| nginx | ✓ | | | | | |
+| nickel | ✓ | | ✓ | | | `nls` |
+| nim | ✓ | ✓ | ✓ | | | `nimlangserver` |
+| nix | ✓ | ✓ | ✓ | | ✓ | `nil`, `nixd` |
+| nu | ✓ | | | | | `nu` |
+| nunjucks | ✓ | | | | | |
+| ocaml | ✓ | | ✓ | | | `ocamllsp` |
+| ocaml-interface | ✓ | | | | | `ocamllsp` |
+| odin | ✓ | ✓ | ✓ | | | `ols` |
+| ohm | ✓ | ✓ | ✓ | | | |
+| opencl | ✓ | ✓ | ✓ | | | `clangd` |
+| openscad | ✓ | | | | | `openscad-lsp` |
+| org | ✓ | | | | | |
+| pascal | ✓ | ✓ | | | | `pasls` |
+| passwd | ✓ | | | | | |
+| pem | ✓ | | | | | |
+| perl | ✓ | ✓ | ✓ | | | `perlnavigator` |
+| pest | ✓ | ✓ | ✓ | | | `pest-language-server` |
+| php | ✓ | ✓ | ✓ | ✓ | | `intelephense` |
+| php-only | ✓ | | | ✓ | | |
+| pkgbuild | ✓ | ✓ | ✓ | | | `termux-language-server`, `bash-language-server` |
+| pkl | ✓ | | ✓ | | | `pkl-lsp` |
+| po | ✓ | ✓ | | | | |
+| pod | ✓ | | | | | |
+| ponylang | ✓ | ✓ | ✓ | | | |
+| powershell | ✓ | | | | | |
+| prisma | ✓ | ✓ | | | | `prisma-language-server` |
+| prolog | ✓ | | ✓ | | | `swipl` |
+| properties | ✓ | ✓ | | | | |
+| protobuf | ✓ | ✓ | ✓ | | | `buf`, `pb`, `protols` |
+| prql | ✓ | | | | | |
+| pug | ✓ | | | | | |
+| purescript | ✓ | ✓ | | | | `purescript-language-server` |
+| python | ✓ | ✓ | ✓ | ✓ | ✓ | `ty`, `ruff`, `jedi-language-server`, `pylsp` |
+| qml | ✓ | ✓ | ✓ | | | `qmlls` |
+| quarto | ✓ | | ✓ | | | |
+| quint | ✓ | | | | | `quint-language-server` |
+| r | ✓ | | | | | `R` |
+| racket | ✓ | | ✓ | | ✓ | `racket` |
+| regex | ✓ | | | | ✓ | |
+| rego | ✓ | | | | | `regols` |
+| rescript | ✓ | ✓ | | | | `rescript-language-server` |
+| rmarkdown | ✓ | | ✓ | | | `R` |
+| robot | ✓ | | | | | `robotframework_ls` |
+| ron | ✓ | | ✓ | | | |
+| rst | ✓ | | | | | |
+| ruby | ✓ | ✓ | ✓ | ✓ | ✓ | `ruby-lsp`, `solargraph` |
+| rust | ✓ | ✓ | ✓ | ✓ | ✓ | `rust-analyzer` |
+| rust-format-args | ✓ | | | | | |
+| rust-format-args-macro | ✓ | ✓ | ✓ | | | |
+| sage | ✓ | ✓ | | | | |
+| scala | ✓ | ✓ | ✓ | | | `metals` |
+| scheme | ✓ | | ✓ | | ✓ | |
+| scss | ✓ | | | | ✓ | `vscode-css-language-server` |
+| slang | ✓ | ✓ | ✓ | | | `slangd` |
+| slint | ✓ | ✓ | ✓ | | | `slint-lsp` |
+| smali | ✓ | | ✓ | | | |
+| smithy | ✓ | | | | | `cs` |
+| sml | ✓ | | | | | |
+| snakemake | ✓ | | ✓ | | | `pylsp` |
+| solidity | ✓ | ✓ | | | | `solc` |
+| sourcepawn | ✓ | ✓ | | | | `sourcepawn-studio` |
+| spade | ✓ | | ✓ | | | `spade-language-server` |
+| spicedb | ✓ | | | ✓ | | |
+| sql | ✓ | ✓ | | | | |
+| sshclientconfig | ✓ | | | | | |
+| starlark | ✓ | ✓ | ✓ | | ✓ | `starpls` |
+| strace | ✓ | | | | | |
+| supercollider | ✓ | | | | | |
+| svelte | ✓ | | ✓ | | | `svelteserver` |
+| sway | ✓ | ✓ | ✓ | | | `forc` |
+| swift | ✓ | ✓ | | | | `sourcekit-lsp` |
+| systemd | ✓ | | | | | `systemd-lsp` |
+| t32 | ✓ | | | | | |
+| tablegen | ✓ | ✓ | ✓ | | | |
+| tact | ✓ | ✓ | ✓ | | | |
+| task | ✓ | | | | | |
+| tcl | ✓ | | ✓ | | | |
+| teal | ✓ | | | | | `teal-language-server` |
+| templ | ✓ | | | | | `templ` |
+| tera | ✓ | | | | | |
+| textproto | ✓ | ✓ | ✓ | | | |
+| tfvars | ✓ | | ✓ | | | `terraform-ls` |
+| thrift | ✓ | | | | | |
+| tlaplus | ✓ | | | | | |
+| todotxt | ✓ | | | | | |
+| toml | ✓ | ✓ | | | ✓ | `taplo`, `tombi` |
+| tsq | ✓ | | | | | `ts_query_ls` |
+| tsx | ✓ | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
+| twig | ✓ | | | | | |
+| typescript | ✓ | ✓ | ✓ | ✓ | ✓ | `typescript-language-server` |
+| typespec | ✓ | ✓ | ✓ | | | `tsp-server` |
+| typst | ✓ | | | ✓ | | `tinymist` |
+| ungrammar | ✓ | | | | | |
+| unison | ✓ | ✓ | ✓ | | | |
+| uxntal | ✓ | | | | | |
+| v | ✓ | ✓ | ✓ | | | `v-analyzer` |
+| vala | ✓ | ✓ | | | | `vala-language-server` |
+| vento | ✓ | | | | | |
+| verilog | ✓ | ✓ | | | | `svlangserver` |
+| vhdl | ✓ | | | | | `vhdl_ls` |
+| vhs | ✓ | | | | | |
+| vim | ✓ | | | | | |
+| vue | ✓ | | | | | `vue-language-server` |
+| wast | ✓ | | | | | |
+| wat | ✓ | | | | | `wat_server` |
+| webc | ✓ | | | | | |
+| werk | ✓ | | | | | |
+| wesl | ✓ | ✓ | | | | |
+| wgsl | ✓ | | | | | `wgsl-analyzer` |
+| wit | ✓ | | ✓ | | | |
+| wren | ✓ | ✓ | ✓ | | | |
+| xit | ✓ | | | | | |
+| xml | ✓ | ✓ | ✓ | | ✓ | |
+| xtc | ✓ | | | | | |
+| yaml | ✓ | ✓ | ✓ | | ✓ | `yaml-language-server`, `ansible-language-server` |
+| yara | ✓ | | | | | `yls` |
+| yuck | ✓ | | | | | |
+| zig | ✓ | ✓ | ✓ | | | `zls` |
diff --git a/book/src/guides/README.md b/book/src/guides/README.md
index c25768e68961..e53983d60fb1 100644
--- a/book/src/guides/README.md
+++ b/book/src/guides/README.md
@@ -1,4 +1,4 @@
# Guides
This section contains guides for adding new language server configurations,
-tree-sitter grammars, textobject queries, and other similar items.
+tree-sitter grammars, textobject and rainbow bracket queries, and other similar items.
diff --git a/book/src/guides/rainbow_bracket_queries.md b/book/src/guides/rainbow_bracket_queries.md
new file mode 100644
index 000000000000..1cba6a9907d1
--- /dev/null
+++ b/book/src/guides/rainbow_bracket_queries.md
@@ -0,0 +1,132 @@
+# Adding Rainbow Bracket Queries
+
+Helix uses `rainbows.scm` tree-sitter query files to provide rainbow bracket
+functionality.
+
+Tree-sitter queries are documented in the tree-sitter online documentation.
+If you're writing queries for the first time, be sure to check out the section
+on [syntax highlighting queries] and on [query syntax].
+
+Rainbow queries have two captures: `@rainbow.scope` and `@rainbow.bracket`.
+`@rainbow.scope` should capture any node that increases the nesting level
+while `@rainbow.bracket` should capture any bracket nodes. Put another way:
+`@rainbow.scope` switches to the next rainbow color for all nodes in the tree
+under it while `@rainbow.bracket` paints captured nodes with the current
+rainbow color.
+
+For an example, let's add rainbow queries for the tree-sitter query (TSQ)
+language itself. These queries will go into a
+`runtime/queries/tsq/rainbows.scm` file in the repository root.
+
+First we'll add the `@rainbow.bracket` captures. TSQ only has parentheses and
+square brackets:
+
+```tsq
+["(" ")" "[" "]"] @rainbow.bracket
+```
+
+The ordering of the nodes within the alternation (square brackets) is not
+taken into consideration.
+
+> Note: Why are these nodes quoted? Most syntax highlights capture text
+> surrounded by parentheses. These are _named nodes_ and correspond to the
+> names of rules in the grammar. Brackets are usually written in tree-sitter
+> grammars as literal strings, for example:
+>
+> ```js
+> {
+> // ...
+> arguments: seq("(", repeat($.argument), ")"),
+> // ...
+> }
+> ```
+>
+> Nodes written as literal strings in tree-sitter grammars may be captured
+> in queries with those same literal strings.
+
+Then we'll add `@rainbow.scope` captures. The easiest way to do this is to
+view the `grammar.js` file in the tree-sitter grammar's repository. For TSQ,
+that file is [here][tsq grammar.js]. As we scroll down the `grammar.js`, we
+see that the `(alternation)`, (L36) `(group)` (L57), `(named_node)` (L59),
+`(predicate)` (L87) and `(wildcard_node)` (L97) nodes all contain literal
+parentheses or square brackets in their definitions. These nodes are all
+direct parents of brackets and happen to also be the nodes we want to change
+to the next rainbow color, so we capture them as `@rainbow.scope`.
+
+```tsq
+[
+ (group)
+ (named_node)
+ (wildcard_node)
+ (predicate)
+ (alternation)
+] @rainbow.scope
+```
+
+This strategy works as a rule of thumb for most programming and configuration
+languages. Markup languages can be trickier and may take additional
+experimentation to find the correct nodes to use for scopes and brackets.
+
+The `:tree-sitter-subtree` command shows the syntax tree under the primary
+selection in S-expression format and can be a useful tool for determining how
+to write a query.
+
+### Properties
+
+The `rainbow.include-children` property may be applied to `@rainbow.scope`
+captures. By default, all `@rainbow.bracket` captures must be direct descendant
+of a node captured with `@rainbow.scope` in a syntax tree in order to be
+highlighted. The `rainbow.include-children` property disables that check and
+allows `@rainbow.bracket` captures to be highlighted if they are direct or
+indirect descendants of some node captured with `@rainbow.scope`.
+
+For example, this property is used in the HTML rainbow queries.
+
+For a document like `link`, the syntax tree is:
+
+```tsq
+(element ; link
+ (start_tag ;
+ (tag_name)) ; a
+ (text) ; link
+ (end_tag ;
+ (tag_name))) ; a
+```
+
+If we want to highlight the `<`, `>` and `" "` and `` and ``, and `>,
textobject_query: OnceCell