Skip to content

purejq 0.1.0 — first public release

Choose a tag to compare

@adam2go adam2go released this 10 Jun 11:59

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 install is 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 purejq

Known 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.