IndieJSON does one job. You paste or open one JSON document, you edit it as source text or as a tree, and you leave with valid JSON. Nothing you paste leaves your browser.

What it does

The code view and the tree view show the same document. Select a value in the tree and its lines light up in the code; move the caret in the code and the tree opens to that value. Every edit in the tree, whether you rename a name, change a type, move an item, or delete a member, becomes one small change to the text, so the rest of your formatting stays exactly as it was.

The status bar says whether the text is valid JSON. When it is not, it names the first error with its line and column in plain words, and it offers a repair. The repair is a list: every change, its position, its reason, the text before and after. Nothing is applied until you say so, and Undo takes it back.

Search covers names and values. From any hit you can copy its JSON Pointer, its value, or the whole subtree as written. Format and minify move whitespace and nothing else. Files open and download on your device.

Where the answers come from

Validation follows RFC 8259, the JSON standard, and nothing else. The warnings rest on named sections of it, and each warning links its section:

  • Section 4 says object names should be unique, because parsers that accept duplicates disagree on which value wins. IndieJSON keeps both and tells you.
  • Section 6 names the integer range every common parser reads exactly, from -(2^53)+1 to (2^53)-1. A number outside it, or a decimal with more digits than a double holds, gets a warning that says what a double-based parser would read instead. The number itself is never changed.
  • Section 8.1 covers the byte order mark, and section 8.2 covers unpaired surrogate escapes.

Copied pointers follow RFC 6901.

The verdict is about syntax and interoperability. It does not prove that the document fits what your application expects; a schema check is a different tool.

What it will never do

It will never upload your document. The editor runs in your browser, parses large files in a Web Worker, and sends nothing anywhere. There is no account, no card, no premium plan, no share link, no cloud save, no analytics, and no third-party script.

It will never change your data on its own. A number keeps its digits. A duplicate name stays. An escape stays. A repair is a proposal you read first.

The family’s /api/check endpoint, which the indie command uses, validates text a caller sends on purpose and keeps nothing. The page never calls it with what you paste.