Installation
Install using the CLI
Section titled “Install using the CLI”The ts-pack CLI allows you to manage parsers and run code analysis directly from your terminal.
You can use it in CI pipelines, automation scripts, or to explore and experiment with 371 supported languages.
brew tap xberg-io/homebrew-tapbrew install xberg-io/homebrew-tap/ts-packcargo install ts-pack-cliOr grab the prebuilt binary with cargo-binstall:
cargo binstall ts-pack-clits-pack --versionts-pack list # language names, then a blank line and an "N language(s)" totalRun the MCP Server
Section titled “Run the MCP Server”The CLI bundles an MCP server for AI agents:
ts-pack mcpSee the MCP Server guide for integration with Claude Code, Cursor, VS Code, and other tools.
Language Bindings
Section titled “Language Bindings”Tree-sitter-language-pack is available for every major ecosystem. All packages share the same version and API surface.
Python
Section titled “Python”Requires Python 3.10+.
pip install tree-sitter-language-packuv add tree-sitter-language-packpoetry add tree-sitter-language-packVerify:
language_count returns the number of languages available in the current build/cache
from tree_sitter_language_pack import language_count
def main() -> None: result = language_count() print(result)
main()Node.js
Section titled “Node.js”Requires Node.js 18+. Pre-built binaries for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64).
npm install @xberg-io/tree-sitter-language-packpnpm add @xberg-io/tree-sitter-language-packyarn add @xberg-io/tree-sitter-language-packVerify:
language_count returns the number of languages available in the current build/cache
import { languageCount } from "@xberg-io/tree-sitter-language-pack";function main() { const result = languageCount(); console.log(result);}
void main();Requires Rust 1.85+.
cargo add tree-sitter-language-pack[dependencies]tree-sitter-language-pack = "1"Verify:
language_count returns the number of languages available in the current build/cache
use tree_sitter_language_pack::language_count;
fn main() { let result = language_count(); println!("{:?}", result);}Requires Go 1.26+. The binding uses cgo and links against the pre-compiled C FFI library.
go get github.com/xberg-io/tree-sitter-language-pack/packages/goVerify:
language_count returns the number of languages available in the current build/cache
package main
import ( "fmt" tspack "github.com/xberg-io/tree-sitter-language-pack/packages/go")
func main() { result := tspack.LanguageCount() fmt.Printf("%+v\n", result)}Requires JDK 25+ (uses Panama FFM API).
<dependency> <groupId>io.xberg.treesitterlanguagepack</groupId> <artifactId>tree-sitter-language-pack</artifactId> <version>1.14.3</version></dependency>dependencies { implementation("io.xberg.treesitterlanguagepack:tree-sitter-language-pack:1.14.3")}dependencies { implementation 'io.xberg.treesitterlanguagepack:tree-sitter-language-pack:1.14.3'}Verify:
language_count returns the number of languages available in the current build/cache
import io.xberg.treesitterlanguagepack.*;
public final class Example { public static void main(String[] args) throws Exception { var result = TreeSitterLanguagePack.languageCount(); System.out.println(result); }}Requires .NET 10.
dotnet add package XbergIo.TreeSitterLanguagePack --version 1.14.3Verify:
language_count returns the number of languages available in the current build/cache
using System;using TreeSitterLanguagePack;
var result = TreeSitterLanguagePackConverter.LanguageCount();Console.WriteLine(result);The NuGet package includes native runtime assets for Windows, Linux, and macOS.
Requires Ruby 3.2+.
gem install tree_sitter_language_packgem "tree_sitter_language_pack", "~> 1.14"bundle installVerify:
language_count returns the number of languages available in the current build/cache
require "tree_sitter_language_pack"result = TreeSitterLanguagePack.language_count()puts result.inspectElixir
Section titled “Elixir”Requires Elixir 1.14+ and OTP 25+.
defp deps do [ {:tree_sitter_language_pack, "~> 1.14"} ]endmix deps.getVerify:
language_count returns the number of languages available in the current build/cache
result = TreeSitterLanguagePack.language_count()IO.inspect(result)Requires PHP 8.2+. This package is a native PHP extension (type: php-ext). Install
mlocati/php-extension-installer first
so Composer can download and register the compiled .so/.dll:
composer require mlocati/php-extension-installercomposer require xberg-io/tree-sitter-language-pack{ "require": { "mlocati/php-extension-installer": "^2.0", "xberg-io/tree-sitter-language-pack": "^1.14" }}Verify:
language_count returns the number of languages available in the current build/cache
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use Tree\Sitter\Language\Pack\TreeSitterLanguagePack;$result = TreeSitterLanguagePack::languageCount();var_dump($result);Requires Dart 3.11+.
dart pub add tree_sitter_language_packVerify:
language_count returns the number of languages available in the current build/cache
import 'dart:io';import 'package:tree_sitter_language_pack/tree_sitter_language_pack.dart';import 'package:tree_sitter_language_pack/src/tree_sitter_language_pack_bridge_generated/frb_generated.dart' show RustLib;Future<void> main() async { await RustLib.init(); try { final result = await TreeSitterLanguagePackBridge.languageCount(); stdout.writeln(result); } finally { RustLib.dispose(); }}Kotlin Android
Section titled “Kotlin Android”Requires Android minSdk 21 and Java 17 bytecode.
implementation("io.xberg.tslp.android:tree-sitter-language-pack-android:1.14.3")This is an Android AAR. Kotlin/JVM users should use the Java artifact.
Verify:
language_count returns the number of languages available in the current build/cache
import io.xberg.tslp.android.*
fun main() { val result = TreeSitterLanguagePack.languageCount() println(result)}Requires Swift 6.0+.
.package( url: "https://github.com/xberg-io/tree-sitter-language-pack", exact: "1.14.3")Verify:
language_count returns the number of languages available in the current build/cache
import TreeSitterLanguagePack
let result = try TreeSitterLanguagePack.languageCount()print(result)Requires Zig 0.16+.
zig fetch --save <release tarball url>The package name is tree_sitter_language_pack.
Verify:
language_count returns the number of languages available in the current build/cache
const std = @import("std");const tree_sitter_language_pack = @import("tree_sitter_language_pack");
pub fn main() !void { const result = tree_sitter_language_pack.language_count(); std.debug.print("{any}\n", .{result});
}Download the shared library and generated C header from GitHub Releases. The C FFI is the stable native contract used by the generated native packages.
WebAssembly
Section titled “WebAssembly”Use from any JavaScript environment — browsers, Deno, and Cloudflare Workers.
npm install @xberg-io/tree-sitter-language-pack-wasm<script type="module"> import { availableLanguages, languageCount } from "https://cdn.jsdelivr.net/npm/@xberg-io/tree-sitter-language-pack-wasm/+esm"; console.log(languageCount(), availableLanguages());</script>import { availableLanguages, languageCount } from "npm:@xberg-io/tree-sitter-language-pack-wasm";
{/* Verify snippets come from the alef-generated corpus (fixture `registry_language_count`). Node.js reuses the TypeScript rendering; there is no generated corpus for the CLI. */}console.log(languageCount(), availableLanguages());Verify:
language_count returns the number of languages available in the current build/cache
import { languageCount } from "@xberg-io/tree-sitter-language-pack-wasm";function main() { const result = languageCount(); console.log(result);}
void main();The WASM package is a static curated subset of parsers compiled into the module. It does not expose the native download/cache helpers.
Next Steps
Section titled “Next Steps”- Quick Start — parse your first file in 5 minutes
- Download parsers — pre-download grammars for production, CI, or offline use
- Download model — understand how parser caching works
- Languages — full list of 371 supported languages