README
February 26, 2026 ยท View on GitHub
This is an unofficial script that builds tree-sitter grammars that can be used by Emacs 29 and above.
Tree-sitter language grammars are just dynamic library object files. You need git and a C/C++ compiler to build them.
To build the language grammar for a particular language, run
./build.sh <language>
e.g.,
./build.sh html
The dynamic library will be in directory /dist.
To build all modules at once, run
./batch.sh
This gives you C, JSON, Go, HTML, Javascript, CSS, Python, Typescript (tsx), C# (csharp), C++ (cpp), Rust, etc, etc. The complete list is in batch.sh. If you don't see your favoriate language in the list, submit a PR.
You can enable parallel build with the JOBS variable, like this:
JOBS=8 ./batch.sh
NEW
I vibe-coded a convenient CLI for building and installing grammars and managing versions. The CLI still uses build.sh and batch.sh to do most of the work.
./langman.py --help usage: langman.py [-h] {build,install,version} ...
Tree-sitter grammar builder and installer
positional arguments: {build,install,version} build Build grammar(s) install Build and install grammar(s) version Show installed version
optional arguments: -h, --help show this help message and exit
Examples: langman.py build python langman.py build --version v0.23.2 python langman.py build # Build all languages langman.py install python langman.py install # Install all languages langman.py version python
Environment: INSTALL_DIR Override default install directory (~/.emacs.d/tree-sitter)
Caching: Versioned builds (--version) are cached and reused on subsequent builds. HEAD builds (no --version) always rebuild from the latest commit.
Note: On mac and linux, version is stored in the grammar file using xattr, on windows, the version is stored in a separate version file alongside the grammar file.