Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>unstringifyNew to Visual Studio Code? Get it now.
unstringify

unstringify

Unstringify

|
11 installs
| (0) | Free Trial
Fix broken JSON with named, line-by-line quick fixes; read CSV, NDJSON and logs as records; convert between JSON, YAML, XML, CSV, NDJSON, Markdown and TypeScript; compare by structure; open stringified JSON in place. The engine runs on your machine — nothing is uploaded.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

unstringify for VS Code

Paste the mess. Read the structure. — now inside the editor.

The engine behind unstringify.com, where VS Code keeps such things: broken JSON fixed with named fixes on the lightbulb and in the Problems panel; CSV, NDJSON and logs read as records through the reading question; conversion into a new editor; comparison by structure in the diff editor; stringified JSON opened in place. Everything runs on your machine. Nothing you open is uploaded — the only request this extension ever makes is to the licence service, when you enter a licence key.

What it looks like

Quick fixes in VS Code — ⌘. on a broken line lists its fix, Auto Fix (⇧⌥.) applies the next line's with no menu, the status bar counts down, Fix All finishes

Fix JSON with a preview — the Refactor Preview names every hunk and applies the ones you keep

Read a CSV as records — the status bar counts the rows, Read as records asks separator and first row, then opens the records beside the text

Unpack from the hover — a string that holds JSON shows what it holds on hover, with the Unpack doors

What it does

Each thing lives where VS Code keeps such things — a command, a quick fix on the lightbulb, a hover, the diff editor, the status bar — not in a panel of its own.

Where What happens
Fix JSON command · context menu · the status bar Every fix at once, and the editor's undo restores every byte. To see them first: on the lightbulb or in the Refactor menu (⌃⇧R) pick "Fix all N" and press ⌘⏎ (⌃⏎ on Windows and Linux) — the Refactor Preview lists every hunk, "line 12 · Single → double quotes", "line 31 · Python None → JSON null", each ticked; untick what you keep as it is, Apply. On a JSON Lines file each broken record is fixed alone.
Quick fixes the lightbulb · the hover's Quick Fix… · the Problems panel The fix for the line under the cursor, named after what it does, plus "Fix all N" — tied to the diagnostic it resolves, the way a linter with a fixer offers its fixes. Hovering VS Code's own JSON error meets the same fix.
Diagnostics the gutter · the Problems panel The lines the parser gives up on, marked with the sentence the fix would print, on JSON, JSONC and JSON Lines.
The fact the status bar "Not valid JSON yet · 6 fixable" on a document; "CSV · 1,284 rows", "NDJSON · 312 records · 3 broken", "Log · 1,277 records · 7 raw lines kept" on a rows file. Click it.
Read as records… command · context menu · the status bar The reading question, as QuickPick steps with the measured default first: separator · first row · the split decimal for CSV and TSV (asked only when the file holds one); which known shape — measured over the file — or a regex with named groups for a log. Then a target, and the records open beside the text. NDJSON and a Markdown table have nothing to decide and are not asked.
Convert to… command · context menu YAML · XML · CSV · NDJSON · Markdown table · TypeScript · JSON · minified — and JSON Schema (draft 2020-12), Zod, Pydantic v2, Go structs, each in its own language's editor — from a JSON, YAML or XML document or a selection, and from CSV, TSV, NDJSON, a Markdown table or a log, through the reading question — into a new editor beside it.
Python dict → JSON command The same fixes, for the print(event) you copied out of a log: single quotes, True / False / None, trailing commas.
Generate TypeScript interfaces command One interface per object, arrays typed from every element, a key missing in some elements optional.
Copy JSON path command · context menu $.items[0].sku for the value under the cursor, the way the tree writes it.
Sort keys · Minify command · context menu Every object's keys sorted, at the editor's indent; or the document on one line (JSON and XML). Undo restores the layout.
Open on unstringify.com command · context menu The document opens on the site, carried in the link's fragment — compressed, and never sent to a server, because a browser does not send a fragment. Refused past 16 kb compressed, with the size.
Unpack this value command · the hover · context menu A string value that holds JSON, XML or YAML shows what it holds on hover, pretty; its first door opens that one value in place — undo packs it back. An SNS envelope reads as one tree. Works on JSON, YAML and XML documents, and on NDJSON — the line unpacks on its own, so the file stays one record per line.
Unpack all (Pro) command · the hover Every packed value in the file, in place or into a new editor — the hover's door carries the count. Across the workspace: every JSON, YAML, XML and NDJSON file read, listed with its count, all ticked, opened in one edit; the ones that were not open are saved.
Compare by structure with… (Pro) command · context menu Another open document, the clipboard or a file, in VS Code's own diff editor over the structural reading: keys sorted and whitespace normalised for a document, one record per line for a rows file — so a reordered key is no difference and a changed value is.
Open as records (Pro) command · context menu · Open With… The site's records view over a CSV, TSV, NDJSON or log file, as a custom editor beside the text: the rows, the level chips, the Filter bar (level=error, -retry, /regex/), the record panel with packed JSON opened in place. A click on a row reveals its line in the text editor; the view follows every edit; Reading… reopens the separator, header and pattern questions. Your VS Code theme, not ours. Up to 25 mb — unstringify.com reads bigger files in a worker.

Coming to Pro: Fix across a workspace.

With Copilot — one command (Pro)

Filter records with Copilot, open on unstringify.com — on a CSV, TSV, NDJSON, Markdown table or log: describe the rows you want ("errors from checkout that were retried"); your own model, through VS Code's language-model API, answers in the site's Filter grammar (level=error service=checkout-api retry); the engine counts what it leaves and the box shows 182 of 1,284 match before anything happens. ⏎ opens those rows on unstringify.com — where the records view, the level chips and the Filter bar are — carried in the link's fragment, which a browser never sends to a server. Rows that compress past 16 kb are too big for a link; the command says so, with the size, and opens them beside the text instead.

It needs a model in VS Code — Copilot, or another chat provider; without one the command says so and stops. The model is never trusted: its terms are measured by the engine, shown, and ⏎ stays yours.

With Copilot — the MCP server

Installing the extension registers unstringify's MCP server for Copilot's agent mode: the six tools — fix_json, validate, convert, read_records, unpack, compare — appear in the chat's tool list with nothing written to any mcp.json. The server is the npm package @unstringify/mcp, started by npx on your machine when a chat first asks for it (Node 18 or later on PATH). It makes no network request. Free, in every tier. VS Code 1.101 or later; vscode.dev cannot spawn a process, so no server is registered there.

Fixing, the three ways VS Code has

Nothing is applied without a gesture — the editor's rule, and ESLint's. The three gestures, and what each does here:

What happens
⌘. or the lightbulb A list: the fix for the line under the cursor, named after what it does, and "Fix all N". The other entries on that list belong to other extensions.
⇧⌥. (Auto Fix) The line's fix, applied — no menu. It is the one preferred quick fix at the cursor.
Fix All (the command) Every fix in the file, applied — no menu. It is source.fixAll.unstringify, which is also what fix on save runs:
"[json]": { "editor.codeActionsOnSave": { "source.fixAll.unstringify": "explicit" } }

Off unless you write that; "[jsonl]" for JSON Lines. Fix JSON is the fourth door — every fix at once — and ⌘⏎ on any of these actions is the preview: the Refactor Preview with every hunk ticked, Apply when you have unticked what stays.

Install

From the Extensions view — search unstringify — or from the Marketplace listing. Cursor, Windsurf, VSCodium and code-server find it through Open VSX.

Trial, Free, Pro

Every install starts a 14-day trial of everything. When it ends:

  • Free, forever: Fix JSON and the quick fixes, Python dict → JSON, Read as records, Convert, Generate TypeScript, Copy path, Sort keys, Minify, diagnostics, Open on unstringify.com, Unpack this value, the MCP server for Copilot.
  • Pro: Unpack all (a file, the workspace), Compare by structure, the Copilot filter, the records view, and what follows them — a one-time personal licence, $19, three activations, from unstringify.com/vscode.

unstringify: Pro: enter a licence key activates this machine; unstringify: Pro: deactivate this machine frees the seat. The key is kept in VS Code's secret storage and re-checked at most once a week, with a 30-day offline grace.

Privacy

No telemetry. No document ever leaves the editor on its own. The one network call the extension makes is api.lemonsqueezy.com — activate, validate, deactivate — carrying the licence key and this machine's name, and only when you use those commands or a weekly re-check is due. The Copilot filter is the exception you choose: when you run it, your sentence with the records' field names and a few rows go to the model you have in VS Code, through VS Code's own language-model API — to that provider, never to us — and the rows it selects travel to unstringify.com in the link's fragment, which a browser never sends to a server. Open the network panel of the extension host and watch it stay empty otherwise.

Settings

  • unstringify.fix.preview — Fix JSON opens the Refactor menu on the fix (⏎ applies, ⌘⏎ previews) instead of applying at once. Off by default.
  • unstringify.diagnostics.enabled — lint JSON and JSON Lines as you type.
  • unstringify.diagnostics.maxBytes — skip live linting, and the status-bar count, above this size (default 1 MB).

Languages

.csv and .tsv / .tab files get the csv and tsv language ids (another extension naming them the same merges, it does not clash); .ndjson joins VS Code's own JSON Lines. YAML and XML keep the diagnostics of the extensions that own them — our quick fixes attach to those squiggles.

Not open source

The extension and the engine are proprietary; see LICENSE. Questions to hello@unstringify.com.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft