jsongrep: A DFA-Based JSON Query Tool That Outperforms jq in Benchmarks

What jsongrep Does
jsongrep (jg binary) takes a query and a JSON input and prints every value whose path through the document matches the query. It treats JSON documents as trees where objects and arrays branch, scalars are leaves, and keys and indices label the edges. The query language is a regular language over the alphabet of keys and indices.
Query Language Features
Dot paths select nested fields by name: jg 'roommates[0].name' returns roommates.[0].name: "Alice".
Wildcards match any single key (*) or any array index ([*]): jg 'favorite_drinks[*]' returns all array elements.
Alternation (|) matches either branch: jg 'name | roommates' returns both fields.
Recursive descent uses * and [*] inside a Kleene star to walk arbitrarily deep: jg '(* | [*])*.name' finds every name field at any depth. The -F flag provides shorthand: jg -F name does the same.
Optional (?) matches zero or one occurrence: jg 'roommates[0].favorite_food?' returns both the parent object and the field value.
Technical Approach
jsongrep compiles queries into deterministic finite automata (DFA) using a pipeline that includes: parsing the query, treating JSON as a tree, constructing an NFA using Glushkov's algorithm, determinizing via subset construction, and searching using DFS with DFA transitions. This allows processing in a single pass with O(1) work per input symbol, avoiding backtracking, recursion stacks, and exponential blowup on pathological queries.
The author notes this differs fundamentally from tools like jq, jmespath, or jsonpath-rust, which interpret path expressions, evaluate queries at each node, check predicates, and recursively descend—potentially revisiting subtrees or maintaining worklists with recursive descent queries.
Installation and Availability
Install from crates.io: cargo install jsongrep. Like ripgrep (which inspired the project), jsongrep is cross-platform with binaries available and written in Rust.
The tool detects if output is piped to commands like less or sort and omits JSON paths by default (override with --with-path option).
📖 Read the full source: HN LLM Tools
👀 See Also

LLM Agent Builds Complete Godot 4 Dungeon Crawler Using Visual Feedback
A developer connected an LLM agent to Godot 4 using an MCP tool and gave it a single prompt to build a dungeon crawler FPS. The agent created a complete prototype with 3 rooms, lighting, combat, enemies, and progression by running the game, taking screenshots, and fixing visual issues.

Agents & A.I.mpires: Strategy Game Where AI Agents Play and Humans Spectate
Agents & A.I.mpires is a persistent real-time strategy game on a hex-grid globe where AI agents autonomously claim territory, attack, form alliances, and write daily war blogs via HTTP API calls. Humans only spectate the emergent behavior.

Context Gateway: An Open-Source Proxy for Compressing AI Agent Context
Context Gateway is an open-source proxy that sits between coding agents and LLMs, compressing tool outputs before they enter the context window. It uses small language models to detect signal in context, performs background compaction at 85% window capacity, and includes spending caps, a dashboard, and Slack notifications.

Interactive Website Simulates Claude Code Project Structure
A developer built exploreclaudecode.com, a browser-based simulation of a Claude Code project with a functional file tree, configurable files, and terminal panel. The site explains how .claude/ directories, settings files, skills, agents, hooks, and MCP configs work together.