¿Qué es tree-sitter-cli?
tree-sitter-cli es la herramienta de línea de comandos para desarrollar parsers de Tree-sitter. Tree-sitter es un generador de parsers y una biblioteca de análisis incremental: construye un árbol sintáctico concreto de un archivo fuente y lo actualiza con muy poco coste mientras editas, por eso Neovim, Helix, Zed y GitHub lo usan para el resaltado, el plegado, los objetos de texto y la navegación de código. Las gramáticas se hacen con esta CLI: crea el repositorio de una gramática, genera un parser en C a partir de grammar.js, lo compila a una biblioteca compartida o a WebAssembly, ejecuta los tests de corpus, analiza, consulta, resalta y etiqueta archivos, y levanta un playground web. Es un único binario de Rust, y el comando que escribes es tree-sitter.
tree-sitter.json que escribe tree-sitter init y el runtime QuickJS integrado detrás de --js-runtime native llegaron todos después de las versiones congeladas en los archivos. Un repositorio de gramática generado con una CLI actual espera esa misma versión o una más nueva en la máquina de cada colaborador y en la CI. El 0.22.6 de Debian stable y el 0.20.8 de Ubuntu 24.04 son anteriores a casi todo eso, y los binarios de Linux de upstream necesitan glibc 2.39, así que ni siquiera arrancan en Debian 12 ni en Ubuntu 22.04.
⚡ Funciones clave de tree-sitter-cli
🧱 Un repositorio de gramática en un comando
tree-sitter init hace unas pocas preguntas y escribe grammar.js, tree-sitter.json y los archivos de bindings y de paquete, así que la gramática se puede publicar para Node.js, Python, Rust, Go, Swift y C desde el primer día.
⚙️ Generación de parsers
tree-sitter generate convierte grammar.js en un parser en C sin dependencias dentro de src/ e informa de los conflictos. Ejecuta la gramática con node o, con --js-runtime native, con el runtime QuickJS integrado.
🔨 Compilación nativa y WebAssembly
tree-sitter build compila el parser en una biblioteca compartida que cargan los editores, y --wasm produce un módulo .wasm para web-tree-sitter y el playground.
🧪 Tests de corpus
tree-sitter test analiza los ejemplos de test/corpus, compara los árboles con las S-expressions esperadas y ejecuta también los tests de resaltado y de etiquetas. --update reescribe lo esperado tras un cambio intencionado.
🔍 Analizar, consultar, resaltar, etiquetar
parse imprime el árbol sintáctico, query ejecuta una consulta .scm y lista sus capturas, highlight pinta en la terminal o en HTML, y tags extrae definiciones y referencias.
🛝 Playground web
tree-sitter playground sirve una página local donde escribes código, ves cómo el árbol se actualiza mientras editas y le lanzas consultas: la forma más rápida de entender por qué una regla no encaja.
apt upgrade te mantiene en la última versión.
📦 Instalación desde deb.griffo.io
Paso 1: Añadir el repositorio
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 Existe un espejo gratis para siempre. deb-free.griffo.io sirve paquetes gratis para siempre: sin cuenta, sin suscripción, como máximo 2 meses por detrás del upstream, correcciones de seguridad inmediatas. Ahora mismo incluye cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud y Zed; tree-sitter-cli no está entre ellas, así que hoy el repositorio de arriba es la única forma de instalarlo — pídelo y puede añadirse.
Paso 2: Instalar tree-sitter-cli
# Instalar la última versión de tree-sitter-cli
sudo apt install tree-sitter-cli
# Verificar la instalación, el comando es tree-sitter y no tree-sitter-cli
tree-sitter --version# Instalar la última versión de tree-sitter-cli
apt install tree-sitter-cli
# Verificar la instalación, el comando es tree-sitter y no tree-sitter-cli
tree-sitter --versionPaso 3: Crear tu primera gramática
# El comando es tree-sitter. Compilar y probar parsers requiere un compilador de C,
# y generate ejecuta grammar.js con node salvo que elijas el runtime integrado
sudo apt install build-essential nodejs
# Crear el repositorio de una gramática respondiendo unas pocas preguntas
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Generar el parser, compilarlo y ejecutar los tests de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Los autocompletados de bash, zsh, fish y nushell vienen en el paquete
tree-sitter --help# El comando es tree-sitter. Compilar y probar parsers requiere un compilador de C,
# y generate ejecuta grammar.js con node salvo que elijas el runtime integrado
apt install build-essential nodejs
# Crear el repositorio de una gramática respondiendo unas pocas preguntas
mkdir tree-sitter-mylang && cd tree-sitter-mylang
tree-sitter init
# Generar el parser, compilarlo y ejecutar los tests de corpus
tree-sitter generate
tree-sitter build
tree-sitter test
# Los autocompletados de bash, zsh, fish y nushell vienen en el paquete
tree-sitter --help🎯 Ejemplos básicos de uso
Trabajar en una gramática:
# Regenerar tras cada cambio en grammar.js, sin node, con el QuickJS integrado
tree-sitter generate --js-runtime native
# Ejecutar solo los tests cuyo nombre coincide y aceptar la nueva salida como esperada
tree-sitter test --include 'function'
tree-sitter test --update
# Compilar una biblioteca compartida, o un módulo WebAssembly para web-tree-sitter
tree-sitter build -o mylang.so
tree-sitter build --wasmAnalizar archivos:
# Imprimir el árbol sintáctico de un archivo
tree-sitter parse examples/hello.mylang
# Analizar muchos archivos en silencio e informar de cuántos salen bien
tree-sitter parse examples/*.mylang --quiet --stat
# Cronometrar un análisis, útil cuando un cambio en la gramática lo ralentiza
tree-sitter parse examples/big.mylang --timeConsultas, resaltado y etiquetas:
# Lanzar una consulta sobre un archivo y listar lo que captura
tree-sitter query queries/highlights.scm examples/hello.mylang
# Resaltar un archivo en la terminal, o generar una página HTML independiente
tree-sitter highlight examples/hello.mylang
tree-sitter highlight --html examples/hello.mylang > hello.html
# Extraer definiciones y referencias con la consulta de etiquetas
tree-sitter tags examples/hello.mylangGramáticas existentes y el playground:
# Trabajar sobre una gramática existente
git clone https://github.com/tree-sitter/tree-sitter-json
cd tree-sitter-json
tree-sitter generate && tree-sitter test
# Crear un archivo de configuración y añadir tus gramáticas en parser-directories
tree-sitter init-config
# Compilar a WebAssembly y abrir el playground interactivo en el navegador
tree-sitter build --wasm
tree-sitter playground🔧 Integraciones con otras herramientas
La CLI de Tree-sitter está entre una gramática y las herramientas que la cargan:
- Neovim: la rama main de nvim-treesitter compila los parsers con la CLI
tree-sittery pide una versión reciente, más nueva que la de Debian stable o Ubuntu LTS - Helix: el resaltado, la indentación y los objetos de texto son consultas de Tree-sitter; comprueba un cambio en
highlights.scmcontree-sitter queryantes de recompilar las gramáticas conhx --grammar build - Zed: las extensiones de lenguaje fijan un repositorio de gramática y un commit, así que genera y prueba la gramática en local antes de subir esa referencia
- CI:
tree-sitter generateseguido degit diff --exit-code src/hace fallar un pull request cuyo parser commiteado está desactualizado - Registros de paquetes: los bindings que escribe
tree-sitter initpermiten publicar la misma gramática en npm, PyPI y crates.io
🚀 ¿Por qué elegir deb.griffo.io?
- Ubuntu oficial: incluye tree-sitter-cli en universe, pero 24.04 LTS trae la 0.20.8, 26.04 ya va por detrás de upstream y 22.04 no tiene paquete
- Binario upstream: actualizado, pero los binarios precompilados de Linux de upstream están enlazados contra glibc 2.39, así que no arrancan en Debian 12 ni en Ubuntu 22.04, y quedan fuera de apt en
/usr/local/bin - cargo o npm:
cargo install tree-sitter-clinecesita una toolchain de Rust y una compilación completa en cada actualización, y el paquete de npm descarga el mismo binario precompilado con el mismo requisito de glibc - deb.griffo.io: última versión con actualizaciones automáticas
- ✅ El mismo paquete, más nuevo: mismo nombre que el
tree-sitter-clide Ubuntu y la misma ruta/usr/bin/tree-sitter, así que apt lo trata como una actualización y no como una segunda instalación - ✅ Compilado desde la etiqueta upstream: compilado con cargo a partir del código fuente etiquetado de upstream en Ubuntu 22.04, porque los binarios precompilados de Linux de upstream exigen glibc 2.39; este funciona en todas las suites desde Bookworm y Jammy
- ✅ Actualizaciones automáticas: los paquetes se actualizan pocas horas después de cada versión upstream
- ✅ Paquete completo: el binario
tree-sittercompilado desde la etiqueta de código fuente de upstream, autocompletados de bash, zsh, fish y nushell, y ninguna dependencia aparte delibc6ylibgcc-s1 - ✅ Cuatro arquitecturas: amd64, arm64, armhf e i386: la Raspberry Pi y el viejo portátil de 32 bits reciben el mismo tree-sitter
- ✅ Multidistribución: funciona en Ubuntu 22.04, 24.04, 25.10 y 26.04
- ✅ Mantenimiento sencillo: actualizaciones con los comandos apt de siempre
📦 Repositorio de compilación del paquete
Los paquetes de Ubuntu se compilan y mantienen automáticamente en este repositorio de GitHub:
- 🌲 tree-sitter-cli-debian - Compilaciones de las últimas versiones
🔗 Paquetes relacionados
También disponibles en deb.griffo.io:
- Neovim - nvim-treesitter compila sus parsers con esta CLI
- Helix - Editor cuyo resaltado y objetos de texto son consultas de Tree-sitter
- Zed - Editor cuyas extensiones de lenguaje traen gramáticas de Tree-sitter
- difftastic - Diff estructural basado en parsers de Tree-sitter
