purejq 0.1.0 — first public release
The first public release of purejq: a pure Python implementation of jq, in the spirit of gojq (Go) and jaq (Rust).
Highlights
- No C extension, no binary — if Python runs, purejq runs: Pyodide/WASM, sandboxes, anywhere
pip installis all you get - 96.2% of jq's official test suite (751/781 cases) — conformance is measured against jq's own test files, vendored in-repo; every known difference is documented
- Full expression language: paths, all assignment operators,
reduce/foreach,try/catch,label/break,?//destructuring, string interpolation, all@formats, regex builtins,tostream/fromstream, date builtins, jq 1.8 additions - jq-compatible CLI (
purejq) with-n -r -j -c -s -e -f --arg --argjson - Python API: compile once, run on many inputs; outputs are lazy iterators, infinite streams welcome
- Arbitrary-precision integers (like gojq): big ints stay exact instead of rounding to doubles
- Tested on CPython 3.9–3.14 and PyPy in CI; zero runtime dependencies (
purejq[speed]optionally adds orjson for faster CLI input parsing)
Install
pip install purejqKnown limitations
- jq's module system (
import/include/modulemeta) is not implemented yet - Integer arithmetic is exact rather than double-rounded (deliberate)
- A few error messages are worded differently
See expected_failures.txt for the complete, honest list.