NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #354 most downloaded on PyPI
a modern parsing library
Last release 11 months ago
27 Oct 2025
Release timing varies
gaps range from 3 weeks to 1.1 years
Nearly every release is documented
notes for 18 of 20 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
20 releases · first in 2020
One column per quarter.
Bugfix: Restore support for custom input, alongside text and TextSlice by @erezsh in https://github.com/lark-parser/lark/pull/1562
Full Changelog: https://github.com/lark-parser/lark/compare/1.3.0...1.3.1
Full Changelog: 1.3.0...1.3.1
Lark can now parse in sections of strings, using TextSlice, as a faster alternative to creating a "copy-slice" with s[i:j]. Learn more
TextSlice, as a faster alternative to creating a "copy-slice" with s[i:j]. Learn morematch on Tree instancesTree.find_token()Symbol.__eq__ to return false when comparing with None by @weaversam8 in https://github.com/lark-parser/lark/pull/1481Terminal.__init__ by @Liam-DeVoe in https://github.com/lark-parser/lark/pull/1503Full Changelog: https://github.com/lark-parser/lark/compare/1.2.2...1.3.0
TextSlice, as a faster alternative to creating a "copy-slice" with s[i:j]. Learn morematch on Tree instancesTree.find_token()Symbol.__eq__ to return false when comparing with None by @weaversam8 in #1481Terminal.__init__ by @Liam-DeVoe in #1503Full Changelog: 1.2.2...1.3.0
Bugfix: Earley now respects ambiguity='resolve' again. Bug was introd… by @erezsh in https://github.com/lark-parser/lark/pull/1444
Full Changelog: https://github.com/lark-parser/lark/compare/1.2.1...1.2.2
Dropped support for Python versions lower than 3.8
InteractiveParser.accepts()Full Changelog: https://github.com/lark-parser/lark/compare/1.1.9...1.2.1
InteractiveParser.accepts()Full Changelog: 1.1.9...1.2.1
Use MAXWIDTH instead of MAXREPEAT when available by @MegaIng in https://github.com/lark-parser/lark/pull/1377
Full Changelog: https://github.com/lark-parser/lark/compare/1.1.8...1.1.9
Full Changelog: 1.1.8...1.1.9
Populate the Token.end_* fields for ignored tokens by @jtbraun in https://github.com/lark-parser/lark/pull/1309
Token.end_* fields for ignored tokens by @jtbraun in https://github.com/lark-parser/lark/pull/1309Full Changelog: https://github.com/lark-parser/lark/compare/1.1.7...1.1.8
Token.end_* fields for ignored tokens by @jtbraun in #1309Full Changelog: 1.1.7...1.1.8
Bugfix in propagate_positions (issue #1304)
Bugfix in propagate_positions (issue #1304)
See: https://github.com/lark-parser/lark/releases/tag/1.1.6
Update lexer_state to lexer_thread to avoid deprecation warnings by @geographika in https://github.com/lark-parser/lark/pull/1285
strict=True, implemented using interegular by @MegaIng
[*x] by @evtn in https://github.com/lark-parser/lark/pull/1232codespell hook by @kianmeng in https://github.com/lark-parser/lark/pull/1244if TYPE_CHECKING: branches by @MegaIng in https://github.com/lark-parser/lark/pull/1278PEP 621-compliant pyproject.toml. by @KOLANICH in https://github.com/lark-parser/lark/pull/1157Full Changelog: https://github.com/lark-parser/lark/compare/1.1.5...1.1.6
strict=True, implemented using interegular by @MegaIng
[*x] by @evtn in #1232codespell hook by @kianmeng in #1244if TYPE_CHECKING: branches by @MegaIng in #1278PEP 621-compliant pyproject.toml. by @KOLANICH in #1157Full Changelog: 1.1.5...1.1.6
setup.cfg: Replace deprecated license_file with license_files by @mgorny in https://github.com/lark-parser/lark/pull/1209
Full Changelog: https://github.com/lark-parser/lark/compare/1.1.4...1.1.5
Full Changelog: 1.1.4...1.1.5
ci: Python 3.11 final by @henryiii in https://github.com/lark-parser/lark/pull/1204
__all__ to __init__ by @aspizu in https://github.com/lark-parser/lark/pull/1200__lark_meta__() by @erezsh in https://github.com/lark-parser/lark/pull/1203Full Changelog: https://github.com/lark-parser/lark/compare/1.1.3...1.1.4
__all__ to __init__ by @aspizu in #1200__lark_meta__() by @erezsh in #1203Full Changelog: 1.1.3...1.1.4
Add user to cache filename; better handle cache load/save failures by @klauer in https://github.com/lark-parser/lark/pull/1179
Add user to cache filename; better handle cache load/save failures by @klauer in https://github.com/lark-parser/lark/pull/1179
refactor: add 'usedforsecurity=False' arg to hashlib.md5 usage by @cquick01 in https://github.com/lark-parser/lark/pull/1190
Create lark/grammars/init.py by @chanicpanic in https://github.com/lark-parser/lark/pull/1171
Adjust imports for Python 3.11 by @The-Compiler in https://github.com/lark-parser/lark/pull/1140
Fix for issue #1173 by @erezsh in https://github.com/lark-parser/lark/pull/1198
Add match stmt support to python.lark by @joseph-e-k in https://github.com/lark-parser/lark/pull/1123
Added match stmt support to python.lark by @MegaIng in https://github.com/lark-parser/lark/pull/1016
Linting to fix minor issues by @Erotemic in https://github.com/lark-parser/lark/pull/1128
Simplify lexer: Use Match.lastgroup instead of lastindex by @erezsh in https://github.com/lark-parser/lark/pull/1129
Fix confusing import in examples by @JonasLoos in https://github.com/lark-parser/lark/pull/1138
Move iter_subtrees_topdown into standalone by @camgunz in https://github.com/lark-parser/lark/pull/1137
Fix 1146: use the class's get instead of the instance's get by @MegaIng in https://github.com/lark-parser/lark/pull/1147
fix: remove Python 2 legacy packaging code by @henryiii in https://github.com/lark-parser/lark/pull/1148
Fix for PR #1149 by @erezsh in https://github.com/lark-parser/lark/pull/1150
Old link for sppf is no longer valid. Point to web archive instead. by @patrickhuber in https://github.com/lark-parser/lark/pull/1159
Fix ForestToPyDotVisitor by @chanicpanic in https://github.com/lark-parser/lark/pull/1167
Close file-like objects to address ResourceWarning. by @shawnbrown in https://github.com/lark-parser/lark/pull/1183
Minor adjustments to PR #1179 by @erezsh in https://github.com/lark-parser/lark/pull/1189
Adjustments for PR #1152 by @erezsh in https://github.com/lark-parser/lark/pull/1191
Remove trailing whitespace by @bcr in https://github.com/lark-parser/lark/pull/1196
Full Changelog: https://github.com/lark-parser/lark/compare/1.1.2...1.1.3
Tree instances now have a pretty print with the "rich" library, when doing rich.print(tree)
Tree instances now have a pretty print with the "rich" library, when doing rich.print(tree)Full Changelog: https://github.com/lark-parser/lark/compare/1.1.1...1.1.2
Add test cases for tree templates by @plannigan in https://github.com/lark-parser/lark/pull/1096
n to child when iterating over children by @hf-kklein in https://github.com/lark-parser/lark/pull/1110type: ignore[error] in lark/tree.py and lark/utils.py by @hf-kklein in https://github.com/lark-parser/lark/pull/1099py.typed to package_data of lark package by @hf-kklein in https://github.com/lark-parser/lark/pull/1109iter_parse() method, for easier instrumentation by @erezsh in https://github.com/lark-parser/lark/pull/1111Full Changelog: https://github.com/lark-parser/lark/compare/1.1.0...1.1.1
Better support for typing and mypy. Includes generic tree typing (Thanks @plannigan!)
Better support for typing and mypy. Includes generic tree typing (Thanks @plannigan!)
Improvements to python.lark (walrus operator, slashes in function params, and more). Now parses the entire Python 3.10 lib successfully
Bugfixes:
Transformer.__default__ not called in tree-less LALR mode (Issue #1029)v_args failed to apply to class under standalone parser (Issue #1059)maybe_placeholders incorrectly accumulated params when it encountered the | operator (Issue #1078)We've made quite a few breaking changes, in order to achieve congruous API with as little "gotchas" as possible. Upgrading to version 1.0 might requir…
Over the last few years, Lark has grown to become a comprehensive toolkit for parsing structured text.
Today, I'm happy to announce the long anticipated version 1.0 of Lark, marking the API as stable.
We've made quite a few breaking changes, in order to achieve congruous API with as little "gotchas" as possible. Upgrading to version 1.0 might require a few changes to your project.
Dropped Python 2 support! Lark now only supports Python 3.6 and up.
Install lark using pip install lark (instead of lark-parser ).
maybe_placeholders is now True by default.
Renamed TraditionalLexer to BasicLexer, and 'standard' lexer option to 'basic'.
Default priority is now 0, for both terminals and rules (used to be 1 for terminals).
Discard mechanism is now done by returning Discard, instead of raising it as an exception.
use_accepts in UnexpectedInput.match_examples() is now True by default.
v_args(meta=True) now gives meta as the first argument. i.e. (meta, children).
%import python (...)Many thanks to all our contributors and donors, who made this release possible. Special thanks goes to -
This is likely to be the last major release that supports Python 2 !
We are now working on a Python3.6+ only v1.0 branch, which will soon become the default. See the work in progress: https://github.com/lark-parser/lark/pull/925
We also have a new online IDE! Check it out here: https://lark-parser.github.io/ide
Lark can now generate standalone Javascript parsers! Check it out here: https://github.com/lark-parser/Lark.js (still in beta)
Using rule repeat (~ syntax) is now much much faster for large numbers, thanks to @MegaIng
Bugfix for the propagate_positions option. Added option value propagate_positions='ignore_ws'.
Fixed reconstructor for when keep_all_tokens=True
Added merge_transformers (Thanks Robin!)
Many minor bugfixes, and improvements to code and docs
Lark now tracks changes in imported grammars (%import), and updates the cache if necessary
%import), and updates the cache if necessaryLark.parse_interactive() for starting the parser in interactive modeAdded ast_utils, to assist in tranforming lark.Tree into a customized AST.
Better docs
Bugfixes
In the near future, Lark will drop support for Python 2. We will continue to develop for Python 3.6+ only, which will simplify the code and ease development.
Old releases (including this one) will still work, of course, and should be stable enough to accompany the remaining Python 2 users into the sunset.
If you have any objections, feel free to voice them here: https://github.com/lark-parser/lark/discussions/874
Thanks for everyone who helped make Lark better!
Nothing published for this version
The LALR parser now supports priority in rules, as a way to resolve collision errors
LALR parser
The LALR parser now supports priority in rules, as a way to resolve collision errors
Improvements to the standalone tool, including more command-line options, like optional compression for the json data.
Improvements to the puppet error handling interface
Better error reporting on LALR collisions
Bugfixes in Earley
Misc
Added support for syntax highlighting in Atom
Fixes and improvements for the cache option. cache=True now uses a temporary directory instead of working directory.
Lark can now be imported directly from a zip (See: ed5c8ec51c4c6e8bd0ac80caff6afcb90a97d218)
Added more terminals to the grammar library (available for %import).
Nearley tools now supports case insensitive strings
Deprecated some interfaces
Improvements to docs, stubs, and various bugfixes
Thanks to @MegaIng for helping with Lark's maintenance, and to @ldbo, @chanicpanic, @michael-k, @ThatXliner and everyone else for their help and contributions.
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →