33 stable releases
Uses new Rust 2024
| new 2.20.3 | Dec 2, 2025 |
|---|---|
| 2.20.2 | Dec 1, 2025 |
| 2.19.3 | Nov 30, 2025 |
#38 in Development tools
25 downloads per month
770KB
15K
SLoC
jiq — Interactive JSON query tool with real-time output
Features
- Real-time query execution - See results as you type
- [EXPERIMENTAL] Context-aware autocomplete - Intelligent suggestions with JSON type information for fields and functions
- Function tooltip - Quick reference help for jq functions with examples
- Search in results - Find and navigate text in JSON output with highlighting
- Query history - Searchable history of successful queries
- Clipboard support - Copy query or results to clipboard (also supports OSC 52 for remote terminals)
- Floating error overlay - Syntax errors appear in a non-disruptive overlay
- VIM keybindings - VIM-style editing for power users
- [EXPERIMENTAL] Syntax highlighting - Colorized JSON output and jq query syntax (experimental)
- Stats bar - Shows result type and count (e.g., "Array [5 objects]", "Stream [3 values]")
- Flexible output - Export results or query string
Demo

Installation
Requirements
- jq - JSON processor (installation guide)
Install via Script (macOS/Linux)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bellicose100xp/jiq/releases/latest/download/jiq-installer.sh | sh
Install via Homebrew (macOS)
brew install bellicose100xp/tap/jiq
Install via Cargo
cargo install jiq
Download Binary
Download pre-built binaries from GitHub Releases
From Source
git clone https://github.com/bellicose100xp/jiq
cd jiq
cargo build --release
sudo cp target/release/jiq /usr/local/bin/
Quick Start
# From file
jiq data.json
# From stdin
cat data.json | jiq
echo '{"name": "Alice", "age": 30}' | jiq
curl https://api.example.com/data | jiq
Usage
Workflow:
- Start typing your jq query (begins in INSERT mode)
- Use autocomplete suggestions for functions and fields (
Tabto accept) - See results update in real-time
- Press
Shift+Tabto navigate results - Press
Enterto output results, orCtrl+Qto output query
VIM users: Press ESC to enter NORMAL mode for advanced editing.
Keybindings
Global Keys (work anywhere)
| Key | Action |
|---|---|
F1 or ? |
Toggle keyboard shortcuts help popup |
Shift+Tab |
Switch focus between Input and Results |
Ctrl+Y |
Copy current query or results to clipboard |
yy |
Copy current query or results to clipboard (NORMAL mode) |
Ctrl+T |
Toggle function tooltip (when cursor is on a function) |
Ctrl+E |
Toggle error overlay (when syntax error exists) |
Enter |
Exit and output filtered JSON |
Ctrl+Q |
Exit and output query string only (Shift+Enter may also work in some modern terminal emulators) |
q / Ctrl+C |
Quit without output |
Input Field - INSERT Mode (cyan border)
| Key | Action |
|---|---|
| Type characters | Edit jq query (real-time execution) |
Tab |
Accept autocomplete suggestion |
↑ / ↓ |
Navigate autocomplete suggestions |
← / → |
Move cursor |
Home / End |
Jump to line start/end |
Backspace / Delete |
Delete characters |
ESC |
Switch to NORMAL mode / Close autocomplete |
Input Field - NORMAL Mode (yellow border)
Navigation
| Key | Action |
|---|---|
h / ← |
Move left |
l / → |
Move right |
0 / ^ / Home |
Line start |
$ / End |
Line end |
w |
Next word start |
b |
Previous word start |
e |
Word end |
Editing
| Key | Action |
|---|---|
i |
Enter INSERT at cursor |
a |
Enter INSERT after cursor |
I |
Enter INSERT at line start |
A |
Enter INSERT at line end |
x |
Delete char at cursor |
X |
Delete char before cursor |
Operators (delete/change + motion)
| Key | Action |
|---|---|
dw / db / de |
Delete word forward/back/end |
d$ / d0 / d^ |
Delete to end/start |
dd |
Delete entire line |
D |
Delete to end of line (same as d$) |
cw / cb / ce |
Change word forward/back/end |
c$ / c0 / c^ / cc |
Change to end/start/entire line |
C |
Change to end of line (same as c$) |
Undo/Redo
| Key | Action |
|---|---|
u |
Undo |
Ctrl+r |
Redo |
Results Pane (when focused)
| Key | Action |
|---|---|
j / k / ↑ / ↓ |
Scroll 1 line |
J / K |
Scroll 10 lines |
h / l / ← / → |
Scroll 1 column |
H / L |
Scroll 10 columns |
0 / ^ |
Jump to left edge |
$ |
Jump to right edge |
Ctrl+d / PageDown |
Scroll half page down |
Ctrl+u / PageUp |
Scroll half page up |
g / Home |
Jump to top |
G / End |
Jump to bottom |
Search in Results
| Key | Action |
|---|---|
Ctrl+F |
Open search (from any pane) |
/ |
Open search (from results pane) |
Enter |
Confirm search and jump to next match |
n / Enter |
Next match |
N / Shift+Enter |
Previous match |
Ctrl+F / / |
Re-enter edit mode |
ESC |
Close search |
Note: Search is case-insensitive.
Query History (last 1000 entries)
Successful queries are saved to your platform's application data directory:
- Linux:
~/.local/share/jiq/history - macOS:
~/Library/Application Support/jiq/history - Windows:
%APPDATA%\jiq\history
Quick Cycling (without opening popup):
| Key | Action |
|---|---|
Ctrl+P |
Previous (older) query |
Ctrl+N |
Next (newer) query |
History Search Popup:
| Key | Action |
|---|---|
Ctrl+R or ↑ |
Open history search |
↑ / ↓ |
Navigate entries |
| Type characters | Fuzzy search filter |
Enter / Tab |
Select entry and close |
ESC |
Close without selecting |
Examples
Filter active users:
cat users.json | jiq
# Type: .users[] | select(.active == true)
# Press Enter to output results
Extract query for scripts:
cat data.json | jiq
# Experiment with: .items[] | select(.price > 100) | .name
# Press Ctrl+Q to get just the query string
Pipeline integration:
# Build query interactively, then reuse
QUERY=$(echo '{}' | jiq) # Press Ctrl+Q after building query
echo $QUERY | xargs -I {} jq {} mydata.json
Tips
- Empty query shows original JSON (identity filter
.) - Invalid queries display
Syntax Errormessage above input while preserving last successful output. - Results auto-scroll to top when query changes
Configuration
jiq looks for a configuration file at ~/.config/jiq/config.toml (or the platform default location).
[clipboard]
# Clipboard backend: "auto" (default), "system", or "osc52"
# - auto: tries system clipboard first, falls back to OSC 52
# - system: use only OS clipboard (may not work in SSH/tmux)
# - osc52: use terminal escape sequences (works in most modern terminals over SSH)
backend = "auto"
Known Limitations
- Autocomplete - Suggestions are based on output visible in results area. Editing in the middle of a query may produce suboptimal or no suggestions.
- Syntax highlighting - Basic keyword-based only, does not analyze structure like tree-sitter.
Contributing
See CONTRIBUTING.md for guidelines on code architecture, testing, and pull requests.
License
Dual-licensed under MIT OR Apache-2.0
Dependencies
~15–32MB
~475K SLoC