NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #2396 by repository stars
Last release today
25 Sep 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
890 releases · first in 2026
One column per month.
Nothing published for this version
Java corpus parity and parser-performance release.
Java corpus parity and parser-performance release.
Parser.ParseNoTreeBenchmarkOnly for diagnostic parser-loop benchmarks that
suppress full public tree materialization while keeping lexing and parse
actions active.grammargen parity coverage checks and focused fixtures for Java,
Bash, Python, Swift, comment, CPON, git config, gomod, ini, and related
imported-grammar edge cases.grammargen normalization and conflict-resolution gaps for lexical choices,
aliased inline precedence, long Unicode escapes, augmented start symbols,
terminal collisions, Python/Swift parity regressions, Julia assignment
conflicts, D binary repeat, PowerShell binary repeat, and gomod grouped
retract intervals.~1.98 ms, incremental single-byte edit ~666 ns, no-edit
incremental reparse ~2.84 ns, with full parse at 5 allocs/op.~537 ms, Go
no-tree diagnostic ~402 ms, cgo full ~394 ms; full/cgo is about 1.36x.~306 ms, Go no-tree
diagnostic ~235 ms, cgo full ~213 ms; full/cgo is about 1.44x.Nothing published for this version
Nothing published for this version
Grammar extensibility, UTF-16 input, and parser-resilience release.
Grammar extensibility, UTF-16 input, and parser-resilience release.
grammargen DSL sources and extension smoke coverage for Kotlin and Swift.grammargen constructors for JavaScript, TypeScript, TSX, and Fortran, plus
imported grammar coverage and TypeScript inline-rule filtering documentation.DEDENT behavior for
issue #53. Includes Fraser Isbester's fork commit and a follow-up regression
hardening pass.grammargen parity gaps were closed.ExtendGrammar smoke tests.grammargen constructors.Nothing published for this version
Nothing published for this version
Parser stability and harness release.
Parser stability and harness release.
#embed directive lines and
__has_embed(...) conditional feature-test forms (including parameter
variants) without parse errors.cgo_harness/docker/. The wrapper mounts
the host Canopy binary into the Docker harness, applies memory/CPU/PID caps,
uses a host-side timeout watchdog, and scopes analysis to one package with
generated blobs/worktrees excluded by default.ts2go batch execution is parallelized, reducing generated-grammar
conversion wall time on multi-core machines.AdaptExternalScannerByExternalOrder can match shared symbols by
name, leave unpaired target symbols disabled, and size the source-valid bitmap
to the source scanner rather than assuming equal external lists.testdata directories and
updated the harness docs and scripts to use the new paths.parser_result_test, and larger parser-result Python source
fixtures now live under testdata/parser_result.Nothing published for this version
Nothing published for this version
Nothing published for this version
Reconciliation release. The release/v0.15.x line and main had drifted apart; v0.15.2 unifies them so subsequent work has a single forward branch to bu
Reconciliation release. The release/v0.15.x line and main had drifted apart; v0.15.2 unifies them so subsequent work has a single forward branch to build on.
grammargen/swift_abi_grammar.go, SwiftABIManglingGrammar()). Parses the $s / $S / $e / _T0 Swift symbol-mangling prefixes. Intended for tooling that needs to walk demangled Swift symbols without invoking the Swift toolchain.cmd/grammar_updater -verify-pins flag. Validates that every locked commit in grammars/languages.manifest is still fetchable from its declared remote before any sync runs. verifyRemotePins / verifyRemoteCommit deduplicate by repo+commit to keep the check cheap on large manifests.cmd/grammar_updater -sync-manifest-only flag. Limits a sync pass to manifest entries that are new since the last run. syncMissingEntriesFromManifest now returns a map so callers can apply an allow-list filter..claude/, docs/blog-outlines/, docs/plans/, docs/superpowers/) along with the benchgate binary. Plan docs are working references and should not ship with the repo.docs/plans/ and docs/superpowers/ prior to the gitignore update.Nothing published for this version
Nothing published for this version
Query matching now backtracks when structurally valid child candidates fail predicates, fixing Starlark nested-dictionary predicate cases.
ParsePolicy.ShouldSkipDir lets gateway consumers prune a directory before descending into it. This is intended for large generated/vendor trees where
ParsePolicy.ShouldSkipDir lets gateway consumers prune a directory before descending into it. This is intended for large generated/vendor trees where even file discovery and language detection can create avoidable memory pressure.parser_result_*.go files instead of centralizing every per-language call chain in parser_result.go.ImportGrammarJSON now drops reserved-word sets when the imported grammar does not expose a RESERVED wrapper, avoiding stale reserved metadata on grammars that should not carry it.string_close external-token handling for the refreshed lock pin.Tree.Edit stops scanning already-sorted right-side siblings when an edit has no tail shift to apply.Nothing published for this version
Nothing published for this version
Go grammar now ships as a grammargen-compiled blob (PR #35). Our pure-Go LALR(1) + LR(1) state-splitting compiler produces a different state layout th
} had no action after certain nested switch/case/if patterns. gotreesitter's own parser_reduce.go, parser.go, and parser_test.go now parse cleanly (HasError=false); the old blob wrapped them in ERROR. Adds cmd/emit_grammargen_go_blob for one-shot regeneration as grammargen evolves.GoTokenSource no longer registered by default (PR #35). The grammargen blob ships DFA tables that parse Go on their own; GoTokenSource remains available via the public API for callers carrying their own ts2go Go blob.maxxnino/tree-sitter-zig (inactive since 2024-10) to tree-sitter-grammars/tree-sitter-zig (active upstream, PR #32, addresses #31). Wholesale PascalCase → snake_case node-name rename; 28 % smaller blob (62 948 → 45 316 bytes). Three upstream #lua-match? highlight predicates rewritten as #match? for portability. Review-follow-up commit addresses four gemini-flagged issues: anchored type regex, ... moved to @operator, broken . anchors on field_expression patterns removed, duplicated &/-% operators deduped.sourceLen × 4 → sourceLen / 4 (PR #33). The old formula over-allocated 10-16× for Go (~1 node per 5-10 input bytes); the adaptive hint handles subsequent parses.dfaTokenSource while the outer parse still held one, causing a use-after-return when the outer parse finished first. Adds newDFATokenSourceDirect with noPool: true so recovery nests safely inside an active parse, and extracts an initDFATokenSource helper.DrainArenaPools() + releaseNodeRefs on reuseCursor/reuseScratch (PR #25 by @vdergachev). Arenas held in the pool are strong Go references and are not collected by the GC until explicitly drained; call after a large batch scan to allow reclamation.BenchmarkSelfParse and BenchmarkSelfParseWarmReuse — regression-guard benchmarks that parse gotreesitter's own pathological root files. Intended to catch memory-footprint regressions on dense real-world Go source.recomputeByteOffset, stackEntriesEqual*, gssStackEntriesEqual*, stackEntryNodesEquivalent*Frontier.Stacked effect across PR #25 + #33 + #34 + #35 + #36 on BenchmarkSelfParseWarmReuse (six gotreesitter root files, 5-iter warm bench, Docker 4 g / 4 cpus):
| mode | pre-0.14.0 | 0.14.0 | delta |
|---|---|---|---|
| cold (fresh Parser per iter) | 574 MB/op | 225 MB/op | -60.8 % |
| warm (one Parser reused) | 498 MB/op | 229 MB/op | -54.0 % |
| warm + GC drain between rounds | 522 MB/op | 252 MB/op | -51.7 % |
Warm-reuse throughput ~10 % higher. 206-grammar parity green under GTS_PARITY_MODE=exhaustive.
Nothing published for this version
Nothing published for this version
Injection parser arena leak (PR #24 by @vdergachev): InjectionParser.Parse and ParseIncremental never released previous parse trees, causing the arena
InjectionParser.Parse and ParseIncremental never released previous parse trees, causing the arena pool to allocate new arenas instead of reusing freed ones (~3 MB per parse of a 180-byte HTML+JS document). Fixed by tracking the previous result and releasing it before the next parse. Also fixes a use-after-free in ParseIncremental when the caller passes back the previous Parse result as oldResult.BenchmarkInjectionParser_Parse, BenchmarkInjectionParser_ParseIncremental, BenchmarkInjectionParser_ParseReuse, and arena-reuse regression tests.BlobByName API for serving grammar blobs over HTTP.
BlobByName API for serving grammar blobs over HTTP.BenchmarkParserPoolSerial, BenchmarkParserPoolConcurrentThroughput, BenchmarkDetectLanguage, BenchmarkLoadLanguage, and more.maxGLRStacks=2 for Go to prevent exponential stack blowup.sync.RWMutex for thread-safe DetectLanguage, sync.Pool-backed Walk stack, highlight buffer reuse, gzip ISIZE pre-sizing for LoadLanguage, and TypeScript scanner scratch reuse.HighlightIncremental returned fewer ranges than Highlight after sequential single-character deletions. The incremental reuse cursor offered leaf nodes from under dirty ancestors with stale parser-state metadata (byte positions were shifted by the edit but parser states were not updated). Fixed by requiring byte-content equality between old and new source for all candidate nodes under dirty ancestors.Nothing published for this version
Nothing published for this version
Nothing published for this version
SkipTreeParse hook on ParsePolicy — allows consumers to read file source bytes without paying for a full tree-sitter AST parse. When the hook returns
SkipTreeParse hook on ParsePolicy — allows consumers to read file source bytes without paying for a full tree-sitter AST parse. When the hook returns true, the gateway populates Source but leaves Tree nil. Enables fast regex-based symbol extraction for large generated files (protobuf stubs, codegen output) that would otherwise stall the parser for minutes.Bounded Docker presets for Fortran real-corpus grammargen runs, plus focused SQL imported-parity and direct-C regression coverage.
yaml-parity-drive integration branch.grammar.json round-trips no longer conflate anonymous string literals with inline regex terminals that share the same display text, restoring the affected SELECT/INSERT parity cases.lrContext directly.Node.Text() edge cases, scanner adaptation, and several C#/YAML/Rust recovery and parity regressions were corrected on the merged branch.Refreshed the README roadmap/version snapshot so it reflects the shipped grammargen release line and the current parser/performance priorities.
grammargen release line and the current parser/performance priorities.grammars/scanner_lookup_test.go no longer copies a full Language value when checking scanner adaptation, avoiding the go vet lock-copy failure caused by embedded sync.Once fields.grammargen now imports and emits tree-sitter ABI 15 reserved-word sets, preserving reserved-word metadata through grammar extension and normalization.
grammargen now imports and emits tree-sitter ABI 15 reserved-word sets, preserving reserved-word metadata through grammar extension and normalization.var restoration.ExternalLexStates instead of overwriting them during scanner wiring.Nothing published for this version
Focused TypeScript and TSX snippet parity cases for const type parameters, template literal types, enums, and class method bodies drawn from corpus-st
perform ... varying cases that previously escaped smaller parity checks.cgo_harness focus-target board so it runs through the same isolated real-corpus and cgo parity entrypoints as the other tracked grammars.grammargen skips conflict diagnostics and provenance on the plain GenerateLanguage fast path unless a report or LR splitting actually needs them.
grammargen skips conflict diagnostics and provenance on the plain GenerateLanguage fast path unless a report or LR splitting actually needs them.grammargen parity across C/C++, JavaScript/TypeScript/TSX, COBOL, and C# normalization paths.v0.11.1 release.Nothing published for this version
Grammar subset support with build tags and blob overrides for smaller focused builds.
grammargen became environment-controlled instead of always-on.perform span normalization.Nothing published for this version
Re-registering a grammar now replaces the existing entry instead of appending a duplicate registration.
grammargen.GenerateLanguageAndBlob and GenerateLanguageAndBlobWithContext for one-pass compiled language plus blob output.
grammargen.GenerateLanguageAndBlob and GenerateLanguageAndBlobWithContext for one-pass compiled language plus blob output.cgo_harness so required CI stays fast while deeper validation remains available.ChoiceLiftThreshold, and broader large-grammar controls in grammargen.StateID values and additional LALR/LR performance work to stay tractable on bigger grammars.grammargen and the runtime parser.ExtensionEntry.InheritHighlights for dynamic grammar highlight inheritance.
ExtensionEntry.InheritHighlights for dynamic grammar highlight inheritance.grammars.LoadLanguageFromBlob for loading compiled language blobs directly at runtime.
grammars.LoadLanguageFromBlob for loading compiled language blobs directly at runtime.Initial grammargen release with grammar composition support and runtime integration work.
grammargen release with grammar composition support and runtime integration work.grammargen, plus browser-side runtime support for client-side highlighting.RegisterExtension-era dynamic grammar work, including the LSP proxy and related runtime improvements.Highlight-query inheritance for TypeScript and TSX, fixing the major capture drop in those bundled highlight queries.
Structural grep engine with metavariables, where/replace blocks, rewrite support, and integration coverage.
grep engine with metavariables, where/replace blocks, rewrite support, and integration coverage.AllLanguages enumeration.Reordered the JSON highlight query so object keys win the intended highlight priority.
Swift external scanner with full lexical support: all 33 external tokens, operator disambiguation, raw strings with interpolation, block comments, sem
tree-sitter/tree-sitter-swift to actively maintained alex-pinkus/tree-sitter-swift.Nothing published for this version
Nothing published for this version
Nothing published for this version
Incremental parsing engine: fast path for token-invariant leaf edits, top-level node reuse after edits, dirty-flag clearing along modified path only,
WithTimeout, WithCancellation).cmd/gen_linguist, grammars/linguist_*.go).Tree.Copy, Parser.Language, Node.Edit, and RootNodeWithOffset API additions.cgo_harness).buildFieldIDs resolved.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →