Desktop app reference.
The jsonbolt desktop app is a viewer for JSON documents. This page covers loading a document, searching the tree, and copying or exporting values from the selection. For the command-line tool, see the CLI docs.
01Install
Pick the channel that matches your workflow. The GUI installer also bundles the jb CLI binary, so installing one gets you both.
Windows · winget
PS> winget install jsonbolt # Adds the jsonbolt app, the `jb` CLI, and the .json file association.
Windows · installer
Download jsonbolt-1.4.2-x64.msi from the downloads page. The installer is signed and notarized.
macOS · private beta
$ brew tap jsonbolt/beta $ brew install --cask jsonbolt
Linux · private beta
$ curl -fsSL https://get.jsonbolt.dev | sh # Or grab the .deb / .rpm / .AppImage from GitHub Releases.
02Open a file
When jsonbolt starts with no document open, the window shows an empty state with the prompt Open, paste or drag and drop .json file here. There are five ways to load JSON:
| Method | Use it when |
|---|---|
| Drag & drop | The file is already visible in Explorer or Finder. Drop it onto the window. Dropping multiple files at once opens each in its own tab. |
| Paste from clipboard Ctrl + V |
The JSON is on your clipboard, copied from a browser, terminal, or API client. There is no save-to-disk step. |
| From URL Ctrl + U |
The JSON lives at a URL. The app fetches the response and parses it. Endpoints that need auth can use saved credentials — see Settings. |
| File picker Ctrl + O |
You know where the file is on disk. This opens the standard OS file picker. |
| Folder picker Ctrl + Shift + O |
You want every JSON file in a directory at once. Pick a folder and every .json, .ndjson, and .jsonl inside opens in its own tab. |
Recently opened files appear under File → Open Recent (last ten, most recent first). To open a second window so you can compare two files side by side, press Ctrl + Shift + N.
After a document loads, the JSON tree fills the main pane. Every node with children can be expanded or collapsed. To expand the selected node by one level, press Alt + →. To expand the entire subtree under the selection, press Shift + Alt + →. The corresponding ← shortcuts collapse. F5 reloads the source if the file on disk (or the URL) has changed since you opened it.
How a freshly loaded document opens — fully expanded, only the root, or somewhere in between — is configurable. See the Expand mode setting.
03Search
To search the loaded document, press Ctrl + F. This focuses the search bar above the tree. As you type, the tree jumps to the first match, expanding any collapsed nodes on the way down so the match is visible.
Three toggles to the left of the search field change how the term is interpreted:
| Toggle | What it does |
|---|---|
| Aa | Case-sensitive match. Off by default — email matches Email. Flip on when capitalization carries meaning (e.g. distinguishing id from ID). |
| .* | Treat the term as a regular expression. ^email$ for an exact match, \d{4}-\d{2}-\d{2} for ISO dates, (error|warn) for either word. |
| K:V | Switch from a single search field to separate Key and Value fields. Covered in Search modes below. |
The toggles can be combined. With all three off, the search is at its most permissive: case-insensitive substring matching against both keys and values. Turn on whichever toggles you need to narrow the match.
To step through results, click the ‹ and › buttons or press F3 and Shift + F3. The tree auto-scrolls to keep the current match in view, expanding nodes as needed.
04Extract
Once a node is selected in the tree, you can copy its value, path, or name to the clipboard, or write it out to a file. The selection is whatever node the cursor is on — a leaf value, an object, or an array.
| Action | What it copies | Shortcut |
|---|---|---|
| Copy Value | The JSON value at the selection (string, number, object, or array). Single-press copies it as-is. To pick a specific format, use Edit → Copy Selection Value As — covered in Copy & export formats. | Ctrl + C |
| Copy Path | The jq-style path to the selection, for example .users[0].email. The path can be pasted directly into the CLI as in jb get .users[0].email file.json. |
Ctrl + P |
| Copy Name | The leaf segment of the path on its own — for example email for a selection at .users[0].email. |
Ctrl + N |
To write the value to a file instead of the clipboard, use File → Export Selection Value As. The format options are the same as Copy — see the next section.
jb get, jb search --path, and jb extract accept. Click around in the GUI to find what you want, then paste the path into a script. CLI docs →
05Copy & export formats
The Copy Selection Value As and Export Selection Value As submenus both ship the same six output formats. Copy lands on the clipboard; Export writes a file. Pick whichever fits where the data is going next.
| Format | Reach for it when |
|---|---|
| Minified JSON | Pasting into curl, scripts, or other JSON-aware tools where whitespace would be noise. |
| Formatted JSON | Dropping into a doc, a ticket, or a PR description where the reader needs to scan it. |
| Minified XML | One-line XML for log lines or compact transport. JSON values map to elements named after their keys. |
| Formatted XML | Reading XML in a browser or editor without an XML-aware viewer. |
| CSV | An array of flat objects you want to open in a spreadsheet. The first object's keys become the column headers. |
| YAML | Config files, Kubernetes manifests, GitHub Actions — anywhere YAML is the lingua franca. |
06Settings
Open the Options dialog from File → Options…. Settings persist to disk and survive restarts. Three panels are wired up today: Appearance, Expand mode, and Credentials.
Appearance
Two knobs:
- Theme — Light, Dark, or System (the default, which follows the OS theme). Pin it to Light or Dark if you don't want the app shifting on you when the OS switches at sunset.
- Row colors — pick custom odd/even row colors for the JSON tree, separately for the light and dark themes. The Reset button restores the defaults for that theme.
Expand mode
Controls how a freshly loaded document is laid out before you touch it. Three modes:
| Mode | Behavior |
|---|---|
| Always Expand default | Every node opens. Fine for small and medium documents. |
| Auto | Expands everything when the document has fewer than ~100 leaf values, otherwise leaves only the root open. |
| Always Collapse | Only the root is open. The choice for huge documents where you want to drill in by hand. |
Changing the mode does not retroactively re-collapse the current document — it takes effect the next time a file loads.
Saved URL credentials
For Open from URL, you can save auth per origin so you don't paste a token every time. Three kinds are supported:
- Basic — username and password, sent as an HTTP Basic header.
- Bearer — a token sent as
Authorization: Bearer <token>. - API Key — an arbitrary header name and value (default header is
X-API-Key).
On Windows, saved secrets are encrypted at rest with DPAPI. On macOS and Linux they sit in the config file as plain text — so prefer pasting the auth fresh each time if the machine is shared.
The Credentials panel lists everything saved, lets you edit a row, and asks for confirmation before deleting one. Editing a saved credential opens the form pre-filled; switching the type (Basic ↔ Bearer ↔ API Key) clears the previous fields.
07Search modes
The default search is intentionally broad: it matches case-insensitively, anywhere in a value or key, with no regex interpretation. The three toggles narrow the match when you need to be more specific.
Regex (.*)
With .* turned on, the search term is treated as a JavaScript regular expression and matched against keys and values. Some patterns that come up often:
| Pattern | Finds |
|---|---|
^email$ | Exact key or value email — no substring match |
\d{4}-\d{2}-\d{2} | ISO-like date strings (2026-05-08) |
(error|warn|fatal) | Any of three log levels |
@acme\.(com|io)$ | Email addresses on a specific domain |
^[A-Z]{2,}_[A-Z]+$ | SCREAMING_SNAKE_CASE constants |
The Aa toggle controls case sensitivity in regex mode as well. Leave it off for case-insensitive matching; turn it on when case matters.
Key/Value mode (K:V)
With K:V turned on, the single search bar splits into two fields, Key and Value, side by side:
Three sub-modes are available depending on which fields you fill in:
| Fill | Behavior | Example |
|---|---|---|
| Key only | Match any property whose key matches. Value is ignored. | Key=email → every property named email |
| Value only | Match any property whose value matches. Key is ignored. | Value=@acme → every property containing the string @acme |
| Key + Value | Both fields filled. Both must match on the same property — not separately across the document. | Key=email, Value=@acme → only properties named email whose value contains @acme |
The Aa and .* toggles apply to both the Key and Value fields when K:V mode is on. For example, with regex turned on, setting Key to ^id$ and Value to E\d{5} finds properties whose key is exactly id and whose value matches a five-digit serial like E00001. The equivalent CLI invocation is jb search --key '^id$' --value 'E\d{5}' -r.
08Keyboard shortcuts
Every shortcut, in one table.
| Action | Shortcut |
|---|---|
| New window | Ctrl + Shift + N |
| Open file | Ctrl + O |
| Open folder | Ctrl + Shift + O |
| Open from clipboard | Ctrl + V |
| Open from URL | Ctrl + U |
| Find | Ctrl + F |
| Find next | F3 |
| Find previous | Shift + F3 |
| Copy selection value | Ctrl + C |
| Copy selection path | Ctrl + P |
| Copy selection name | Ctrl + N |
| Expand all | Shift + Alt + → |
| Expand next level | Alt + → |
| Collapse all | Shift + Alt + ← |
| Collapse current level | Alt + ← |
| Refresh | F5 |