# What changed in pyparsing

> 13 changes in pyparsing 3 from its official release notes, upgrade guides and advisories: 2 breaking, 1 deprecations, 5 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/pyparsing/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## pyparsing 3

### Breaking changes

- Diagrams may render differently because they no longer rely on recursion using `Forward` expressions. (3.3.3) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.3)
- Added to `pyparsing.common` as a generalized parse action that supports expressions extracting date/time fields into results names and validates that the fields represent a valid date and time. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)

### Deprecations

- Warning for using deprecated features; it inherits from `PyparsingWarning` and `DeprecationWarning`. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)

### New APIs and options

- A new max argument supports repetition with a large upper bound using multiplication or slicing notation. (3.3.3) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.3)
- Added to `pyparsing.common`; the expression returns a Python `datetime.datetime`. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)
- Added to `pyparsing.common`; the expression returns a Python `datetime.datetime`. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)
- Warning raised when pyparsing diagnostics are enabled and a diagnostic feature is used. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)
- Base warning for pyparsing-specific warnings, allowing them to be selectively enabled or disabled without affecting warnings from other libraries. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)

### Performance

- Its recursive implementation was replaced with a shunting-yard algorithm; the release reports significant performance improvements for some complex examples. (3.3.3) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.3)
- Its implementation now manages nesting levels with its own stack, as part of changes intended to improve performance and reduce memory usage. (3.3.3) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.3)
- Performance improvements in `ParseResults` and core functions yield 10–20% overall performance improvement. (3.3.2) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.2)

### Tooling

- License information is now included in package metadata, following PEP 639. (3.3.1) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.1)

### Fixes and other changes

- pyparsing now supports Python 3.15. (3.3.3) — [release notes](https://github.com/pyparsing/pyparsing/releases/tag/3.3.3)
