A language object defines how to parse a particular programming language. It is usually dynamically loaded from a shared library (.dylib, .so, .dll).

The variable tree-sitter-load-path is a list of directories that the function tree-sitter-require uses to search for these shared libraries. This is similar to how the built-in function require searches for Emacs libraries on load-path. The default value contains the directory used by the tree-sitter CLI tool.

;; Load the language definition for Rust, if it hasn't been loaded.
;; Return the language object.
(tree-sitter-require 'rust)


The package tree-sitter-langs is a language bundle that contains shared libraries for some languages (as well as syntax highlighting queries). When it is loaded, its shared libraries are prioritized over the CLI’s directory.

Syntax-aware language-agnostic mechanisms are meant to be defined by tree-sitter-mode and its dependent minor modes. They determine the language object to use by consulting the variable tree-sitter-major-mode-language-alist. This list is empty by default, and gets populated by tree-sitter-langs when it is loaded, and by language major modes that are tree-sitter-aware.

Language major modes use these generic mechanisms to provide functionalities specific to their languages. Currently, there are not many language major modes built on top of tree-sitter. An example is csharp-mode.

For the full list of languages bundled by tree-sitter-langs, see the submodules under its repos/ directory.

Binaries for older versions were hosted on bintray, which was shut down. If you install from source, you should update the code to a newer version whose binaries are hosted on GitHub.

If, for some reason, you cannot update, the older binaries can be downloaded from here.