



curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bellicose100xp/jiq/releases/latest/download/jiq-installer.sh | sh
brew install bellicose100xp/tap/jiq
cargo install jiq
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/
# From file
jiq data.json
# From stdin
cat data.json | jiq
echo '{"name": "Alice", "age": 30}' | jiq
curl https://api.example.com/data | jiq
# Smart picker: Clipboard or Interactive Paste
jiq
# Force a specific source, skip the picker
jiq --clipboard
jiq --paste
Workflow:
1. Start typing your jq query
2. Use autocomplete suggestions for functions and fields
3. See results update in real-time
4. Press Shift+Tab to navigate results
5. Press Enter to output results, or Ctrl+Q to output query
VIM users: Press ESC to enter NORMAL mode for advanced editing.
Global Keys (work anywhere)
| Key | Action |
|---|---|
F1 or ? |
Toggle keyboard shortcuts help popup |
Shift+Tab / Ctrl+T |
Switch focus between Input and Results |
Ctrl+Y |
Copy current query or results to clipboard (focus-aware) |
Ctrl+O |
Copy results to clipboard regardless of focus |
Ctrl+W |
Save result to file (live path preview, overwrite warning) |
yy |
Copy current query or results to clipboard (NORMAL mode) |
Ctrl+I |
Toggle function tooltip (when cursor is on a function) |
Ctrl+E |
Toggle error overlay (when syntax error exists) |
Ctrl+A |
Toggle AI assistant popup |
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 |
Ctrl+d / Ctrl+u |
Scroll results half page down/up |
ESC |
Switch to NORMAL mode / Close autocomplete |
Mouse click |
Position cursor at click location (when focused) |
Mouse wheel |
Horizontal scroll through query |
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 |
Character Search
| Key | Action |
|-----|--------|
| f{char} | Find forward to character |
| F{char} | Find backward to character |
| t{char} | Till forward (stop before character) |
| T{char} | Till backward (stop after character) |
| ; | Repeat last search in same direction |
| , | Repeat last search in opposite direction |
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$) |
| df{char} / dF{char} / dt{char} / dT{char} | Delete to/till character forward/backward |
| 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$) |
| cf{char} / cF{char} / ct{char} / cT{char} | Change to/till character forward/backward |
Text Objects (delete/change with scope)
| Key | Action |
|-----|--------|
| ciw / diw | Change/delete inner word |
| ci" / di" / ci' / di' / ci`` / `di `` | Change/delete inside quotes |
|ci(/di(/ci[/di[/ci{/di{| Change/delete inside brackets |
|ci|/di|| Change/delete inside pipe segment |
|ca"/da"/ca'/da'/ca` / da`` ` | Change/delete around quotes (including quotes) |
|ca(/da(/ca[/da[/ca{/da{| Change/delete around brackets (including brackets) |
|ca|/da|` | Change/delete around pipe segment (including one pipe) |
Undo/Redo
| Key | Action |
|-----|--------|
| u | Undo |
| Ctrl+r | Redo |
Results Navigation
| Key | Action |
|-----|--------|
| Ctrl+d / Ctrl+u | Scroll results half page down/up |
Results Pane (when focused)
Cursor Navigation
| Key | Action |
|-----|--------|
| j / k / ↑ / ↓ | Move cursor up/down 1 line |
| J / K | Move cursor up/down 10 lines |
| Ctrl+d / PageDown | Move cursor half page down (also works from input field) |
| Ctrl+u / PageUp | Move cursor half page up (also works from input field) |
| g / Home | Jump cursor to top |
| G / End | Jump cursor to bottom |
Query Navigation (navigate into and between values)
| Key | Action |
|-----|--------|
| > (or double-click row) | Zoom into value at cursor (appends its path to your query) |
| < | Step back to the prior query (undo the last >) |
| * | Iterate over the nearest array (replace [N] with [] to show all elements) |
| ^ | Step up one level (remove the last path segment from your query) |
| } | Wrap the cursor's value as an object: .path becomes .parent \| {key} |
| ] / [ | Jump cursor to next / previous sibling (wraps around) |
Horizontal Scrolling
| Key | Action |
|-----|--------|
| h / l / ← / → | Scroll 1 column |
| H / L | Scroll 10 columns |
| 0 | Jump to left edge |
| $ | Jump to right edge |
Visual Line Selection
| Key | Action |
|-----|--------|
| v / V | Enter visual line selection mode |
| j / k / ↑ / ↓ | Extend selection up/down |
| y | Copy selected lines to clipboard |
| ESC / v / V | Exit visual mode |
| Click + Drag | Select multiple lines with mouse |
Mouse
| Key | Action |
|-----|--------|
| Mouse wheel | Scroll up/down |
| Click + Drag | Multi-line visual selection |
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 |
| Ctrl+D | Delete selected entry |
| Click ✕ | Delete entry under mouse (revealed on hover) |
| ESC | Close without selecting |
AI Assistant (context-aware query suggestions)
The AI assistant analyzes your query and data to provide intelligent suggestions for fixing errors, improving queries, or interpreting natural language.
Requires configuration (see Configuration section below)
| Key | Action |
|---|---|
Ctrl+A |
Toggle AI assistant popup |
Alt+1-5 |
Apply suggestion 1-5 directly |
Alt+↑ / Alt+↓ |
Navigate suggestions |
Alt+j / Alt+k |
Navigate suggestions (vim style) |
Enter |
Apply selected suggestion |
Ctrl+A |
Close popup |
Snippet Library (save and reuse queries)
Save frequently used jq queries for quick access. Snippets are stored in ~/.config/jiq/snippets.toml.
Browse Mode
| Key | Action |
|-----|--------|
| Ctrl+S | Open snippet library |
| ↑ / ↓ | Navigate snippets |
| Type characters | Fuzzy search filter |
| Enter | Apply selected snippet |
| Ctrl+N | Create new snippet from current query |
| Ctrl+E | Edit selected snippet |
| Ctrl+R | Update snippet query with current input |
| Ctrl+D | Delete selected snippet |
| ESC | Close popup |
Create/Edit Mode
| Key | Action |
|-----|--------|
| Tab / Shift+Tab | Navigate between fields |
| Enter | Save snippet |
| ESC | Cancel |
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
.)Syntax Error above input while preserving last successful output; press Ctrl+E for a plain-language explanation and fix hint (jq's raw error, rewritten; works with jq 1.6+)..field shorthand only accepts ASCII identifiers. jiq's autocomplete emits bracket notation by default:.["名前"] ✓ works (bracket notation, used by autocomplete)
."名前" ✓ works (quoted-dot, valid alternative)
.名前 ✗ jq syntax error
Same rule applies to .["café"], .["👋"], .["中文"], .["日本語"], etc.
jiq looks for a configuration file at ~/.config/jiq/config.toml (or the platform default location).
```toml [clipboard]
backend = "auto"
[theme]
mode = "auto"
[autocomplete]
array_sample_size = 10
[ai]