# What changed in jsonpath-ng

> 17 changes in jsonpath-ng 1 from its official release notes, upgrade guides and advisories: 8 breaking, 1 deprecations. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/pypi/jsonpath-ng/

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

## jsonpath-ng 1

### Breaking changes

- Filtering by array index ignores out-of-range indices and non-array values, and queries selecting several indices remove exactly the selected elements. (1.12.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.12.0)
- Inside a filter, $ now resolves to the root node instead of acting as an alias for @, which refers to the element being tested. (1.12.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.12.0)
- An index applied to a string or scalar now matches nothing, rather than finding characters or raising TypeError. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- Slices now find nothing unless applied to an array. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- The wildcard no longer coerces scalars or objects into arrays; it finds object member values and array elements, and nothing from a scalar. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- When used as a field, the wildcard now finds array elements as well as object member values; update() and filter() also act on those array elements. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- Booleans are no longer treated as numbers: a boolean is never equal to a number. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- Filters can compare against JSON null; unquoted null no longer matches the string "null", and comparisons with null no longer raise TypeError for relational operators. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)

### Deprecations

- Instantiating Filter with no expressions is deprecated and will raise an exception in version 2.0.0. (1.10.1) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.10.1)

### Performance

- Runtimes now scale linearly with the depth of the data. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)

### Behavior and default changes

- Filter comparisons can now use a query on the right-hand side, starting with @ or $ and containing only name and index segments. (1.12.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.12.0)
- The extended parser now allows true and false as field names while continuing to treat them as boolean literals on the right-hand side of filter comparisons. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)

### Tooling

- Type annotations were added to many JSONPath interfaces. (1.12.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.12.0)

### Fixes and other changes

- Index updates are skipped for non-list inputs and out-of-range array indices. (1.12.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.12.0)
- A filter following ``..`` now parses and selects every matching array element or object member value at any depth. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- Paths using ``..`` no longer raise RecursionError when applied to deeply nested data, though very long JSONPath expressions can still raise it. (1.11.0) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.11.0)
- Fixes a TypeError crash that can occur when filtering scalar values with a Filter instantiated without expressions. (1.10.1) — [release notes](https://github.com/jsonpath-ng/jsonpath-ng/releases/tag/v1.10.1)
