Neovim and Tree-Sitter Post-Archival

On April 3rd, 2026, the lauded nvim-treesitter was archived, due to maintainer burnout.1 This post introduces tree-sitter-dl, a simple Python script I wrote to replace one of the primary functionalities of nvim-treesitter: parser installation. My goals for the script were the following:

If you want to get started using tree-sitter-dl, check out the GitHub repository. In the rest of this post, I will go over the main features of the script.

Overview

I will walk through installing a parser for the Zig programming language. Basic parser installation looks like this:

./tree-sitter-dl.py install zig

This will install parsers, queries, and a lock file into the following locations depending on your OS:

OS Path
Unix $XDG_CONFIG_HOME/nvim or ~/.config/nvim
Windows %LOCALAPPDATA%\nvim or %USERPROFILE%\AppData\Local

This should be the location of your Neovim config directory. If you would like to specify an installation location instead, use the -o option:

./tree-sitter-dl.py install zig -o my-install-dir

Make sure that the installation location is in your Neovim runtimepath so that Neovim can find it!3 Now try editing a .zig file with this content:

const std = @import("std");

pub fn main(init: std.process.Init) !void {
    std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
}

You shouldn't see any tree-sitter highlights yet! To activate them, run :lua vim.treesitter.start()! If you want to automate this process, the following into ftplugin/zig.lua:4

vim.treesitter.start()
-- Uncomment if you want tree-sitter folding
-- vim.wo[0][0].foldexpr = 'v:lua.vim.treesitter.foldexpr()'
-- vim.wo[0][0].foldmethod = 'expr'

Specific Parser Repositories

Many languages have multiple different tree-sitter parser implementations. For example, for Lua, there's:

tree-sitter-dl will automatically try to select the best implementation. If you have a specific implementation in mind, though, you can run something like:

./tree-sitter-dl.py install lua:https://github.com/Azganoth/tree-sitter-lua

If you want to get more specific, like retrieving a specfic version, run:

# Tag
./tree-sitter-dl.py install lua:https://github.com/Azganoth/tree-sitter-lua@v2.1.3
# Commit SHA
./tree-sitter-dl.py install lua:https://github.com/Azganoth/tree-sitter-lua@7ab58496586502285a944e380b2cf05339035844
# Branch
./tree-sitter-dl.py install lua:https://github.com/Azganoth/tree-sitter-lua@shebang-magic

This flexibility is important for some parsers. For exmaple, I personally use the following to install my Python parser:

./tree-sitter-dl.py install python:https://github.com/tree-sitter/tree-sitter-python@v0.25.0

Uninstalling

Run the following to uninstall parser(s):

./tree-sitter-dl.py uninstall zig

DO NOT REMOVE THE PARSER FILES YOURSELF! Trying to do so might mess up the lock file that tree-sitter-dl maintains.

WebAssembly

By default, parsers are shared libraries (i.e. .so, .dll, or .dylib files). Thus, you should only install trusted parsers from trusted sources on your machine, because if a parser is run, it can do anything it wants (under your user permissions).

However, if your parser is bundled as a WebAssembly module, you can achieve both portability and safety. tree-sitter-dl supports this:

./tree-sitter-dl.py install zig --wasm

Note that, to use WebAssembly parsers, Neovim must be built with ENABLE_WASMTIME. Check out the Neovim docs for building from source. Fair warning: this feature is somewhat incomplete; I ran into numerous different crashes while running Neovim like this.5

Listing Installed Parsers

Installed parsers can be listed like this:

./tree-sitter-dl.py list

It is useful to use the -v flag for more detailed output:

./tree-sitter-dl.py list -v

Wrap Up

I hope this post was helpful! If you interested in tree-sitter-dl, check out the GitHub repository. The script is not perfect, but I hope it gets the job done for you.

As always, if you had questions, comments, or issues with this post, let me know by posting an issue.


  1. From what it looks like, one of the primary motivators of the burnout was the amount of rude and uninformed comments the maintainer received whilst rewriting nvim-treesitter. I hope this stands as a lesson to be kind to maintainers, and to not fall back to posting an issue at the first sign of hardship when using an open source project. ↩︎

  2. Python 3, tree-sitter CLI, and git should be in your PATH. ↩︎

  3. The location of your Neovim config should be in runtimepath already, so installation should work by default. ↩︎

  4. If you haven't already, you can create ftplugin/zig.lua in your configuration directory. ↩︎

  5. At the time of writing, of course. ↩︎