github.com/odvcencio/gotreesitter
v0.51.0
#2371 most downloaded on Go modules
odvcencio/gotreesitter
What this package is like to depend on
Last release today
24 Aug 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 93 of 100 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
606 releases · first in 2026
606 releases in the last 12 months
see the full history below
Release timeline
606 releases · Feb 2026 to Aug 2026Releases
latest 60 of 606-
v0.51.1-0.20260824051428-83e0cfbc30ad24 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260824043016-51d66e79966124 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260824032150-74543caa8bb824 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823211856-af9ded2b77b723 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823205212-d134ed5f963c23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823194336-cf58fba517ed23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823183814-e19acacba35223 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823170951-e24ccf5a87bb23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823161116-055051a24a1123 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823145757-5eaa38e536e523 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823134914-a62b9db306bc23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823124251-af8a9a5bdb5b23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823112018-2c533f5c19f523 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823101816-929609ccde7823 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823085000-7b6f40fe089223 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823073032-54c7f521505e23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823062812-5e307cb2509f23 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823050448-14f6692fac6523 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823005807-7498a678c52023 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260823000946-613a0775a32923 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822225820-30f470f5c2bf22 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822220743-78e8e139623522 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822195713-0c34a681db2922 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822174209-a01f8037319c22 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822165844-6c94426b69f522 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822160803-d530d969429522 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822152955-1098c5d881bf22 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822140615-3c4ea879011122 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822125632-c1a07ed176b422 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822104751-44ad279ecfc222 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822081031-9ff47f2cb94222 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822045814-69d5ccaf1c2e22 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822020723-9ed8c9d0911722 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260822005918-6cd2f66ade8a22 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821235247-0b9a90d8ad8e21 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821212513-bb1e43c9c92121 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821200110-de4fe455d3a921 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821103651-34bdc837d55821 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821070615-bb09ff6978cb21 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821042937-f60aee0ae93c21 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260821015636-9531af46a1aa21 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260820232946-c625069e49ca20 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260820173226-3a7e2428656020 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260817211736-efe5b71c6fb817 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260816201804-19460490008a16 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260816180824-6d4a50d28e8b16 Aug 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260816173710-3484b1b3598316 Aug 2026 pre-releaseNothing published for this version
-
v0.51.016 Aug 2026Release notes
Open source →Added
-
Add
grammars.ParseFilePooledStrict. It rejects a partial tree and returns
the parser stop error. -
Add
Tagger.TagStrict. It returns tags only after a complete parse and
preserves parser errors.
Changed
-
Bound pending fork-stack retention. Keep a bounded reserve during parsing,
and drop oversized storage at parse and parser-pool boundaries. -
Separate C-runtime recovery walk, convergence, and fallback state. Reset
these states across parse, retry, snippet, pool, and iteration boundaries. -
Provision dense reach marks when generalized LR (GLR) slabs grow. Owned nodes
no longer use the pointer-map fallback.
Fixed
- Clear stale C-runtime recovery state after a clean condense. A clean suffix
no longer inherits an active recovery-cost gate.
Tests
- Align the Application Binary Interface version 14 (ABI-14) lexer-mode probe
with generated end-of-file behavior. The probe now checks the emitted layout
without injecting an end-of-file state.
Continuous integration (CI)
- The project merged pull request (PR) #732.
Its CI-only change separates query-fleet smoke tests from regular shards and
is not part of this release.
Open work
The following items remain open:
-
Issue #454 tracks
downstream field reports. -
Issue #576 tracks
Swift recovery divergence. -
Issue #586 tracks
shared GLR error-cost bounds. -
Issue #728 tracks
external-scanner incremental reuse.
Release notes
Open source →Added
-
Add
grammars.ParseFilePooledStrict. It rejects a partial tree and returns the parser stop error. -
Add
Tagger.TagStrict. It returns tags only after a complete parse and preserves parser errors.
Changed
-
Bound pending fork-stack retention. Keep a bounded reserve during parsing, and drop oversized storage at parse and parser-pool boundaries.
-
Separate C-runtime recovery walk, convergence, and fallback state. Reset these states across parse, retry, snippet, pool, and iteration boundaries.
-
Provision dense reach marks when generalized LR (GLR) slabs grow. Owned nodes no longer use the pointer-map fallback.
Fixed
- Clear stale C-runtime recovery state after a clean condense. A clean suffix no longer inherits an active recovery-cost gate.
Tests
- Align the Application Binary Interface version 14 (ABI-14) lexer-mode probe with generated end-of-file behavior. The probe now checks the emitted layout without injecting an end-of-file state.
Continuous integration (CI)
- The project merged pull request (PR) #732. Its CI-only change separates query-fleet smoke tests from regular shards and is not part of this release.
Open work
The following items remain open:
-
Issue #454 tracks downstream field reports.
-
Issue #576 tracks Swift recovery divergence.
-
Issue #586 tracks shared GLR error-cost bounds.
-
The Swift #586 compact-parser receipt records a NO-GO recovery-cost and token-producer blocker. Keep the issue open.
-
Issue #728 tracks external-scanner incremental reuse.
Release notes
Open source →Added
-
Add
grammars.ParseFilePooledStrict. It rejects a partial tree and returns the parser stop error. -
Add
Tagger.TagStrict. It returns tags only after a complete parse and preserves parser errors.
Changed
-
Bound pending fork-stack retention. Keep a bounded reserve during parsing, and drop oversized storage at parse and parser-pool boundaries.
-
Separate C-runtime recovery walk, convergence, and fallback state. Reset these states across parse, retry, snippet, pool, and iteration boundaries.
-
Provision dense reach marks when generalized LR (GLR) slabs grow. Owned nodes no longer use the pointer-map fallback.
Fixed
- Clear stale C-runtime recovery state after a clean condense. A clean suffix no longer inherits an active recovery-cost gate.
Tests
- Align the Application Binary Interface version 14 (ABI-14) lexer-mode probe with generated end-of-file behavior. The probe now checks the emitted layout without injecting an end-of-file state.
Continuous integration (CI)
- The project merged pull request (PR) #732. Its CI-only change separates query-fleet smoke tests from regular shards and is not part of this release.
Open work
The following items remain open:
-
Issue #454 tracks downstream field reports.
-
Issue #576 tracks Swift recovery divergence.
-
Issue #586 tracks shared GLR error-cost bounds.
-
Issue #728 tracks external-scanner incremental reuse.
-
-
v0.50.2-0.20260816132621-8c17e0e942e016 Aug 2026 pre-releaseNothing published for this version
-
v0.50.2-0.20260816120041-298fa050001716 Aug 2026 pre-releaseNothing published for this version
-
v0.50.2-0.20260816072012-556ba43b2ada16 Aug 2026 pre-releaseNothing published for this version
-
v0.50.2-0.20260816051803-ed5dd9cdd5e416 Aug 2026 pre-releaseNothing published for this version
-
v0.50.2-0.20260816033615-899783970a9316 Aug 2026 pre-releaseNothing published for this version
-
v0.50.2-0.20260815010114-bd1fa3cc8ded15 Aug 2026 pre-releaseNothing published for this version
-
v0.50.114 Aug 2026Release notes
Open source →Fixed
-
Restore single-language
grammar_subsetbuilds. Shared lexer helpers and
Python-derived scanner state now compile with each grammar that uses them.
Derivative-only builds do not register Python scanner metadata. -
Add a blocking subset build sweep. Continuous integration now builds all
206 registered grammars with their individualgrammar_subsettags.
Release notes
Open source →Fixed
-
Restore single-language
grammar_subsetbuilds. Shared lexer helpers and Python-derived scanner state now compile with each grammar that uses them. Derivative-only builds do not register Python scanner metadata. -
Add a blocking subset build sweep. Continuous integration now builds all 206 registered grammars with their individual
grammar_subsettags.
-
-
v0.50.1-0.20260814213657-4e586e92e37614 Aug 2026 pre-releaseNothing published for this version
-
v0.50.014 Aug 2026Release notes
Open source →Added
-
TestOutlineOracleDifferential(cgo_harness/outline_differential_test.go)
runs each language's resolved tags query through both the pure-Go query
engine and the official C tree-sitter runtime, then diffs the two capture
streams. It hard-asserts capture parity for the core nine outline
languages (go,python,javascript,typescript,tsx,rust,
java,c,cpp) and logs a census for every other language with a
resolvable tags query. -
TestOutlineCoverageWitnesses(grammars/outline_coverage_witness_test.go)
pins 30 languages against the realOutlinerpipeline. Each case names an
exact symbol its resolved tags query must produce, so a pattern that
compiles but never fires now fails the test instead of hiding behind a
non-empty query string. -
File-outline tags-query coverage rose from a 30-language floor to 84 of
206 registered languages: 83 with a real-corpus fixture and 1 with a
smoke-sample fixture (grammars/testdata/outline_census/baseline.json).
TestInferredTagsQueryCoverage(grammars/registry_test.go) now enforces
84 as the floor. Seedocs/outline.mdfor the full coverage tiers and the
file outline API. -
OutlineSymbol.Ownernow resolves on everyOutlineTreecall. A rule
attached throughWithOutlineOwnerRulesmatches a symbol byNodeType,
reads itsOwnerField, and descends through the rule'sUnwrapnode
types until it reaches exactly oneNameTypesterminal. Any other
outcome — an absent field, or a walk that reaches zero or more than one
terminal — leavesOwnerempty and counts one
OutlineReport.OwnerRuleMisses; aNodeTypeno attached rule names
touches neither field. -
grammars.OutlineOwnerRules(entry)gates the shipped owner-rule table by
symbol and field presence in each language's own compiled grammar, the
same wayResolveTagsQuery's inference table is gated, and composes
directly withgotreesitter.WithOutlineOwnerRules. The shipped Go rule
resolves all four receiver shapes — value, pointer, generic value, and
generic pointer — to the receiver's base type name. Seedocs/outline.md
for the full resolution contract and a worked example.
Removed
- Native root-extra folding and reduction now own Elixir comment placement
and map entry grouping. Parsing drops the hidden
_newline_before_commentscanner token without a post-parse pass.
Reduction groups map keyword pairs and wraps update and arrow entries in
the map grammar'sbinary_operatornode. This removes the Elixir
result-compatibility dispatcher arm.
Removed
- Native scheduling and reduction now own the Enforce
const intformal
parameter shape. Parsing classifiesconstas a
formal_parameter_modifierandintastype_intdirectly. It keeps
the parameter's own name and default value instead of losing them to a
misread type/name pair. This removes the Enforce result-compatibility
dispatcher arm.
Fixed
-
TypeScript and TSX no longer split a signed right-shift operator into two
generic closers.splitCompactCloseAngleTokennarrows a>>token to a
single>so nested closers such asArray<Array<string>>parse. Java
gated that split behind an "unclosed<precedes this run" check, because
>>is also a shift operator there; TypeScript and TSX carried no such
gate. Any>>whose next byte was one of( ) [ ] { } , . ; : ?was torn
apart, sox = a >> (b)failed to parse whilex = a >> bsucceeded. The
angle-depth gate now covers TypeScript and TSX, and runs only when a>>
symbol is actually active in the state: with no shift alternative to
protect, narrowing to>remains the only way to make progress. Found
while migrating the GoSX browser runtime to TypeScript, on
indices[i] = (src[i >> 3] >> (i & 7)) & 1;.
on,off,yes,no) at lex time. The grammar's word token pattern can
absorb leading whitespace before a keyword, and the keyword re-lex
previously required its match to start at byte zero, so it missed that
case and left the value as a generic string token. DFA keyword promotion
now skips the leading run first, the same way tree-sitter's own generated
keyword lexer does. This retires the Hyprlang dispatcher arm and fixes a
related bug: a trailing space after the keyword no longer produces an
incorrect boolean node. -
Seven of the file outline's core nine languages carried tags-query rows
that reference a child node type the grammar never produces at that
position:javascript,typescript,tsx,java,c,cpp, and
rust. The C query compiler rejects such a row as an "Impossible
pattern" and drops the entire multi-pattern query with it. The pure-Go
query engine has no matching check, so it compiled the same row and
silently matched nothing. The dead rows are now removed or corrected.
TestOutlineOracleDifferential's core-nine tier reports capture-stream
parity for all nine languages, and the fix changed no Go outline output —
confirmed by unchanged golden fixtures.
Removed
- The Bash assignment-wrapper and if-condition-field repairs. Native
reduction already builds the C-shapedvariable_assignmentswrapper for
two or more consecutive assignments. It already sets thecondition
field on an if-statement's condition tokens too. The Bash compatibility
pass no longer splices that wrapper's children into the enclosing node or
rebuilds the field afterward.
tree-sitter-bash's own corpus (test/corpus/literals.txt) pins the same
wrapper for two top-level assignments.
Production, compact, forest, and incremental routes match the raw parse
exactly, and the isolated C-oracle comparison matches for every case.
One unrelated Bash subpass remains live. - The FIDL result-compatibility dispatcher arm is retired. Native recovery
already builds the C-equivalent error shape for a versioned-layout-modifier
declaration whose modifier keyword carries a stray(name=value)argument
list. Production, compact, forest, and incremental routes produce the same
tree, and an isolated C-oracle parity check confirms the shape. - The HLSL subscript-assignment declarator member of the result-compatibility
dispatcher arm is retired.structured_binding_declaratorcarries a
negative dynamic precedence in the grammar. Native parsing already elects
the C-equivalent subscript-assignment expression forName[index] = value;
without a post-parse pass. Production, compact, forest, and incremental
routes stay exact. The negative-number cast and unorm-buffer members of the
HLSL arm remain live.
Release notes
Open source →Added
-
TestOutlineOracleDifferential(cgo_harness/outline_differential_test.go) runs each language's resolved tags query through both the pure-Go query engine and the official C tree-sitter runtime, then diffs the two capture streams. It hard-asserts capture parity for the core nine outline languages (go,python,javascript,typescript,tsx,rust,java,c,cpp) and logs a census for every other language with a resolvable tags query. -
TestOutlineCoverageWitnesses(grammars/outline_coverage_witness_test.go) pins 30 languages against the realOutlinerpipeline. Each case names an exact symbol its resolved tags query must produce, so a pattern that compiles but never fires now fails the test instead of hiding behind a non-empty query string. -
File-outline tags-query coverage rose from a 30-language floor to 84 of 206 registered languages: 83 with a real-corpus fixture and 1 with a smoke-sample fixture (
grammars/testdata/outline_census/baseline.json).TestInferredTagsQueryCoverage(grammars/registry_test.go) now enforces 84 as the floor. Seedocs/outline.mdfor the full coverage tiers and the file outline API. -
OutlineSymbol.Ownernow resolves on everyOutlineTreecall. A rule attached throughWithOutlineOwnerRulesmatches a symbol byNodeType, reads itsOwnerField, and descends through the rule'sUnwrapnode types until it reaches exactly oneNameTypesterminal. Any other outcome — an absent field, or a walk that reaches zero or more than one terminal — leavesOwnerempty and counts oneOutlineReport.OwnerRuleMisses; aNodeTypeno attached rule names touches neither field. -
grammars.OutlineOwnerRules(entry)gates the shipped owner-rule table by symbol and field presence in each language's own compiled grammar, the same wayResolveTagsQuery's inference table is gated, and composes directly withgotreesitter.WithOutlineOwnerRules. The shipped Go rule resolves all four receiver shapes — value, pointer, generic value, and generic pointer — to the receiver's base type name. Seedocs/outline.mdfor the full resolution contract and a worked example.
Removed
- Native root-extra folding and reduction now own Elixir comment placement
and map entry grouping. Parsing drops the hidden
_newline_before_commentscanner token without a post-parse pass. Reduction groups map keyword pairs and wraps update and arrow entries in the map grammar'sbinary_operatornode. This removes the Elixir result-compatibility dispatcher arm.
Removed
- Native scheduling and reduction now own the Enforce
const intformal parameter shape. Parsing classifiesconstas aformal_parameter_modifierandintastype_intdirectly. It keeps the parameter's own name and default value instead of losing them to a misread type/name pair. This removes the Enforce result-compatibility dispatcher arm.
Fixed
-
TypeScript and TSX no longer split a signed right-shift operator into two generic closers.
splitCompactCloseAngleTokennarrows a>>token to a single>so nested closers such asArray<Array<string>>parse. Java gated that split behind an "unclosed<precedes this run" check, because>>is also a shift operator there; TypeScript and TSX carried no such gate. Any>>whose next byte was one of( ) [ ] { } , . ; : ?was torn apart, sox = a >> (b)failed to parse whilex = a >> bsucceeded. The angle-depth gate now covers TypeScript and TSX, and runs only when a>>symbol is actually active in the state: with no shift alternative to protect, narrowing to>remains the only way to make progress. Found while migrating the GoSX browser runtime to TypeScript, onindices[i] = (src[i >> 3] >> (i & 7)) & 1;.on,off,yes,no) at lex time. The grammar's word token pattern can absorb leading whitespace before a keyword, and the keyword re-lex previously required its match to start at byte zero, so it missed that case and left the value as a generic string token. DFA keyword promotion now skips the leading run first, the same way tree-sitter's own generated keyword lexer does. This retires the Hyprlang dispatcher arm and fixes a related bug: a trailing space after the keyword no longer produces an incorrect boolean node. -
Seven of the file outline's core nine languages carried tags-query rows that reference a child node type the grammar never produces at that position:
javascript,typescript,tsx,java,c,cpp, andrust. The C query compiler rejects such a row as an "Impossible pattern" and drops the entire multi-pattern query with it. The pure-Go query engine has no matching check, so it compiled the same row and silently matched nothing. The dead rows are now removed or corrected.TestOutlineOracleDifferential's core-nine tier reports capture-stream parity for all nine languages, and the fix changed no Go outline output — confirmed by unchanged golden fixtures.
Removed
- The Bash assignment-wrapper and if-condition-field repairs. Native
reduction already builds the C-shaped
variable_assignmentswrapper for two or more consecutive assignments. It already sets theconditionfield on an if-statement's condition tokens too. The Bash compatibility pass no longer splices that wrapper's children into the enclosing node or rebuilds the field afterward. tree-sitter-bash's own corpus (test/corpus/literals.txt) pins the same wrapper for two top-level assignments. Production, compact, forest, and incremental routes match the raw parse exactly, and the isolated C-oracle comparison matches for every case. One unrelated Bash subpass remains live. - The FIDL result-compatibility dispatcher arm is retired. Native recovery
already builds the C-equivalent error shape for a versioned-layout-modifier
declaration whose modifier keyword carries a stray
(name=value)argument list. Production, compact, forest, and incremental routes produce the same tree, and an isolated C-oracle parity check confirms the shape. - The HLSL subscript-assignment declarator member of the result-compatibility
dispatcher arm is retired.
structured_binding_declaratorcarries a negative dynamic precedence in the grammar. Native parsing already elects the C-equivalent subscript-assignment expression forName[index] = value;without a post-parse pass. Production, compact, forest, and incremental routes stay exact. The negative-number cast and unorm-buffer members of the HLSL arm remain live.
-
-
v0.49.1-0.20260814193439-9fd59953f9f314 Aug 2026 pre-releaseNothing published for this version
-
v0.49.1-0.20260814164056-e79ea7a15ea314 Aug 2026 pre-releaseNothing published for this version
-
v0.49.1-0.20260814124753-25a50aaafd8614 Aug 2026 pre-releaseNothing published for this version