Kiryl Ramanouski
JaySnake app icon — white curly braces around three rows of dots and bars on a coral-to-magenta gradient.

macOS · Developer tool

JaySnake

Paste messy JSON, get a structure you can actually read — and the code to match.

A two-pane Mac window: your raw text on the left, a live structure on the right. The parser forgives the things real config files are full of — comments, trailing commas, single quotes — while keeping every export strictly valid. In the app it goes by JSON Parser.

Coming to the Mac App Store macOS 13+ · Apple silicon & Intel
  • Developer Tools
  • Every feature free
  • 6 code targets
  • No telemetry
  • Sandboxed

JaySnake is a native macOS app for reading JSON. Not a web page in a window: a real Mac document app with tabs, sessions, a Services entry and an undo stack per tab — and nothing in it ever talks to the network.

A parser that forgives real-world JSON.

Config files, logs and hand-edited fixtures are full of things the spec forbids. The parser takes them anyway — and stays strict where it matters, so whatever you export is valid JSON.

  • // line comments
  • /* block comments */
  • trailing commas,
  • 'single quotes'
  • leading BOM
  • Errors with an address

    When it genuinely cannot parse, it names the line, the column and what it expected — instead of "unexpected token".

  • Key order preserved

    Objects keep the order they were written in and numbers keep their exact text, so a round trip does not quietly reformat your document.

  • Duplicate keys warned, not merged

    A repeated key raises a non-fatal warning rather than silently dropping one of the values.

Three ways to read the same document.

  • Tree

    Line-numbered, zebra-striped, syntax-coloured, with per-container counts. ⌘F finds as you type with a live counter, and a filter toggle collapses everything but the hits. Right-click any row to copy its value, its key or its full JSONPath.

  • Node graph

    Every container drawn as a linked box joined by bezier curves. Expand a box to see its scalar fields; pinch to zoom from 25% to 300%. Layout runs off the main thread and caps at 500 boxes so a big document stays responsive.

  • JSONPath

    Wildcards, recursive descent, negative indices, slices, unions and comparison filters, with a live match count. Type a key and it suggests the ones that actually exist at that position.

Then generate the types.

One inferred model, six outputs. Array elements are merged into a single shape: keys missing from some samples become optional, observed nulls become nullable, and mixed scalars are widened rather than guessed at.

  • SwiftCodable structs
  • TypeScriptinterfaces
  • Kotlindata classes
  • Javaclasses
  • Gostructs with tags
  • JSON Schemadraft-07

And get it back out.

Convert & export
Pretty-printed JSON, minified JSON, YAML, CSV for an array of flat objects, or an escaped one-line string ready to embed. Duplicate keys that JSON allows but YAML and CSV do not are renamed rather than silently dropped.
Compare ⌘⇧D
A split diff between the current tab and any other open tab. Both sides are re-parsed and pretty-printed first, so you are comparing structure rather than whitespace noise.
Tabs & sessions
Rename tabs by double-clicking, save a whole set as a named session, and get them all back at the next launch. Each tab keeps its own undo history, so ⌘Z never reaches into the tab next door.
Wired into macOS
Registers as an editor for public.json, so a double-click, "Open With…" or a drag onto the Dock icon opens a new tab. A Services entry takes selected text from any app straight into the editor.

Your JSON never leaves your Mac.

There is no analytics, telemetry or networking code anywhere in the app. The one network entitlement exists solely so StoreKit can reach the App Store for the tip jar.

  • Nothing uploaded, ever
  • No analytics and no telemetry
  • Runs inside the App Sandbox
  • Session file written 0600 in a 0700 directory
  • Every feature free — no paid unlock
  • Tips are voluntary and change nothing

How it is built.

A hand-written recursive-descent parser reading the input in place — no JSONSerialization — with every heavy walk debounced onto a dedicated large-stack thread so a 25 MB paste degrades into a spinner rather than a freeze.

  • Swift 5.9
  • SwiftUI + AppKit bridge
  • NSTextView editor
  • Custom JSONPath engine
  • Type inference
  • LCS line diff
  • StoreKit 2
  • App Sandbox & hardened runtime
  • Universal arm64 + x86_64
  • 407 tests
  • GitHub Actions CI

Questions developers actually ask.

Will it open JSON that isn't strictly valid?

Usually. It tolerates // and /* */ comments, trailing commas, single-quoted strings and a leading BOM.

It stays strict about numbers, string escapes and raw control characters so anything you export is valid JSON, and caps nesting at 512 levels. When it truly cannot parse, it gives you the line, the column and what it expected.

Does my JSON ever leave my Mac?

No. Nothing is uploaded, and there is no analytics or telemetry in the app. Open tabs autosave inside the sandboxed Application Support folder, in a directory locked to 0700 with the file at 0600.

What can it generate code for?

Swift Codable, TypeScript, Kotlin, Java, Go and JSON Schema draft-07 — six targets from one inferred model, computed off the main thread and cached.

How large a file can it handle?

25 MB, enforced the same way for Open, Finder, Services and paste. Past that it stays responsive by capping the diagram at 500 boxes and display-truncating very long strings at 2,000 characters — the full value is still searched and copied.

Can I diff two documents?

Yes — open both as tabs and press ⌘⇧D. Both sides are re-parsed and pretty-printed first, so the comparison is structural rather than formatting noise.

Are there ads or a paid unlock?

Neither. Every feature is free. The only purchases are voluntary tips, and buying one changes nothing except a thank-you. See the privacy policy.

Does it reopen what I was working on?

Yes. Tabs autosave into the active session as you type and come back at the next launch. If the session file is ever unreadable, the app preserves the original alongside rather than overwriting it.

Stop reading JSON in a browser tab.

Coming to the Mac App Store.