NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1599 most downloaded on PyPI
(Soon to be) the fastest pure-Python PEG parser I could muster
Last release 10 months ago
12 Nov 2025
Release timing varies
gaps range from 2 weeks to 3.8 years
Some releases are documented
notes for 8 of 14 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
14 releases · first in 2012
Nothing published for this version
This project publishes no release notes. Between 0.9.0 and 0.10.0 there were 21 commits, 19 of them substantive:
This project publishes no release notes. Between 0.9.0 and 0.10.0 there were 21 commits, 19 of them substantive:
Expressions.__eq__ (#212)One column per quarter.
bump version to 0.9.0, and bring version history up to date.
bump version to 0.9.0, and bring version history up to date.
This project publishes no release notes. Between 0.8.1 and 0.9.0 there were 50 commits, 48 of them substantive:
…and 28 more.
Bump version to 0.8.1, and update readme.
Bump version to 0.8.1, and update readme.
This project publishes no release notes. Between 0.8.0 and 0.8.1 there were 2 commits, 1 of them substantive:
Bump version to 0.8.0, and bring version history up to date.
Bump version to 0.8.0, and bring version history up to date.
This project publishes no release notes. Between 0.7.0 and 0.8.0 there were 40 commits, 39 of them substantive:
…and 19 more.
Token-based parsing, though experimental, counts as a new feature and warrants the tenths-place bump.
Token-based parsing, though experimental, counts as a new feature and warrants the tenths-place bump.
This project publishes no release notes. Between 0.6.2 and 0.7.0 there were 35 commits, 29 of them substantive:
…and 9 more.
Avoid redundant work in the reference resolver. Lift the set of exprs that have already been resolved up beyond the scope of just _resolve_refs(). Thi
Avoid redundant work in the reference resolver. Lift the set of exprs that have already been resolved up beyond the scope of just _resolve_refs(). This avoids forgetting all that experience on each loop around the list comp of rules in visit_rules(). For grammars with hundreds of rules, this can be the difference between 13s and 95ms compilation times.
Keeping an explicit set of done exprs means we no longer need the members=() trick anymore. Perhaps the trick would continue to save us a few calls, but it's worth those to keep the code simple.
This project publishes no release notes. Between 0.6.1 and 0.6.2 there were 1 commits, 1 of them substantive:
Fix bug which made the default rule of a grammar invalid when it cont…
Fix bug which made the default rule of a grammar invalid when it cont…
This project publishes no release notes. Between 0.6 and 0.6.1 there were 1 commits, 1 of them substantive:
Bump version to 0.6, and bring readme up to date.
Bump version to 0.6, and bring readme up to date.
This project publishes no release notes. Between 0.5 and 0.6 there were 24 commits, 23 of them substantive:
parse() and match() convenience methods to NodeVisitor, and add the concept of a default grammar for a visitor.custom kwarg.…and 3 more.
This project publishes no release notes. Between 0.4 and 0.5 there were 12 commits, 11 of them substantive:
This project publishes no release notes. Between 0.4 and 0.5 there were 12 commits, 11 of them substantive:
Add parentheses to the syntax reference table in the readme. Fix #25 .
Add parentheses to the syntax reference table in the readme. Fix #25.
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 →