// the find
jqlang/jq
Command-line JSON processor
jq is the standard tool for slicing and querying JSON from the command line — a single static binary with its own small functional language. It's been around since 2012 and is effectively infrastructure at this point, showing up in CI pipelines, shell scripts, and anywhere you need to extract fields from API responses without reaching for Python.
Zero runtime dependencies and a fully static build option means it goes anywhere — embedded systems, minimal containers, air-gapped servers. The filter language is genuinely expressive: recursive descent, reduce, label-break, try-catch, and SQL-style operators cover most real transformation needs without awkward workarounds. The fuzz test suite (seven separate fuzz targets covering parse, compile, execute, and streaming paths) is unusually thorough for a C project of this age. Release cadence has picked up meaningfully — v1.8.x shipped in 2025 after years of stagnation, including the new `modulemeta` improvements and number formatting fixes.
The filter language has a steep learning curve that never really flattens — operators like `?//` (alternative operator) and the difference between `,` and `|` trip up everyone at least once, and the error messages don't help. Number handling is IEEE 754 doubles under the hood, so large integers silently lose precision; jq will give you wrong answers on 64-bit IDs without any warning. There's no streaming output for large arrays — if you're processing a 2GB JSON file, the whole thing lands in memory. libjq as an embeddable library is technically exposed but essentially undocumented, so using it from C means reading the source.