Docs

formaty Documentation

Local-first data toolkit. Everything runs in your browser — no servers, no sign-up.

JSONXMLYAMLTOMLCSVcURL

#Input & Output Formats

FormatDescription
JSONThe primary format. Beautify, minify, flatten, sort, validate, schema, diff, and more.
XMLParse and convert to/from all other formats.
YAMLParse and convert; ideal for configs and infrastructure files.
TOMLParse and convert; Rust / systems-friendly config format.
CSVParse and convert (array of objects). Supports comma, tab , semicolon ;, and pipe |.
cURLPaste any curl command. formaty executes it and renders the live API response as formatted JSON.

Input format is auto-detected. Override via the format selector in the input toolbar.

#Workspace

The playground is split into an input pane (left) and an output pane (right), separated by a draggable splitter.

FeatureDetails
Drag splitterClick and drag the center divider to resize input/output panes to any ratio.
Live transformWhen enabled, output updates instantly as you type. Toggle via command palette.
Auto-format on pasteAutomatically beautifies data when you paste into the input editor. Toggle via settings.
Import fileUpload any supported file directly into the input pane via command palette "Import file".
Maximize outputExpand the output pane to full width via command palette "Maximize output pane".
Window fullscreenEnter true browser fullscreen via command palette "Enter fullscreen".
Find in outputOpen find/replace in the output editor via command palette "Find in output".
Focus panesKeyboard-navigate between panes: command palette "Focus input pane" / "Focus output pane".
Editor font sizeIncrease / decrease via command palette "Font size +" / "Font size -".
Line wrapToggle long-line wrapping in the Monaco editor via command palette.
SamplesLoad built-in examples: GitHub API, Stripe webhook, Kubernetes manifest, OpenAPI schema. Search "load" or "sample" in the command palette.

#Multi-Tab Mode

Work on multiple independent documents simultaneously. Each tab has its own input, output, format settings, and history.

ActionHow
Enable / disableCommand palette "Enable multi-tab mode". State persists across page refreshes.
New tabCommand palette "New tab" (only available when multi-tab is on).
Close tabHover the vertical tab label in the left rail then click the x button.
Switch tabClick any tab in the vertical tab bar on the left edge of the input pane.
PersistenceTab names and the enabled/disabled state are saved in localStorage and restored on refresh.

Tabs are displayed as a compact vertical column on the left edge of the input pane, keeping the editor at full width.

#Transform Actions

ActionDescription
BeautifyPretty-print with configurable indentation (0-10 spaces).
MinifyRemove all whitespace for the smallest possible output.
FlattenConvert nested objects to dot-notation keys: a.b.c
UnflattenExpand dot-notation keys back to nested objects.
Sort array itemsSort all array contents recursively (alphabetically / numerically).
Remove duplicatesDeep-deduplicate array values recursively.
Generate JSON SchemaInfer a JSON Schema draft from your sample data.
Validate against SchemaPaste a JSON Schema in the modal — formaty validates input and reports all errors.

#Format Conversion

Convert between any supported format pair using the output format picker or command palette.

JSONYAMLJSONXMLJSONTOMLJSONCSVYAMLJSONXMLJSONTOMLJSONCSVJSONcURLJSON

#Output Views

Raw

Monaco editor with syntax highlighting, folding, line numbers, and find/replace.

Tree

Expandable/collapsible explorer of the full data structure.

Graph

Interactive node graph — zoom, pan, drag to explore relationships.

Query

JSONPath / JMESPath live filter with highlighted matching nodes.

Table

Tabular grid for arrays of objects — ideal for CSV or flat data.

Pin any view to the output toolbar with ☆ for one-click switching.

#Type Generation

Generate strongly-typed interfaces and structs from your JSON data. Search generate in the command palette, or use the output format picker.

TypeScriptJavaC#PythonGoProtobufKotlinSwiftRustSQL

#Query Playground

Switch to Query view to run live path expressions against your output data.

LanguageExampleNotes
JSONPath$.users[*].nameRecursive descent, filter expressions, array slices
JMESPathusers[].nameAWS-standard query language; projections & functions

Matching nodes are highlighted. Results appear below the expression input.

#Format Options & Settings

OptionDetails
Indent0-10 spaces. Use the - / + buttons in the toolbar or reset to 2 (default).
Quote styleDouble or single quotes for JSON string values.
Sort keysAlphabetize all object keys in output.
Remove emptyStrip null, empty string, and empty array/object values from output.
CSV delimiterComma ,, Tab , Semicolon ;, or Pipe |
Live transformRe-runs the active operation on every keystroke. Disable for large files.
Auto-format on pasteAutomatically beautifies when pasting content into the input editor.
Line wrapWrap long lines inside the Monaco editor.
Editor font sizeIncrease / decrease via command palette "Font size +" / "Font size -".

#Diff & Compare

Compare two documents side-by-side with full change highlighting.

  • Enter diff mode — Actions → "Diff / Compare JSON" or command palette → "Diff".
  • Side-by-side view — Two editable panes showing additions (green) and removals (red), default mode.
  • Inline view — Toggle with the "Inline" button in the diff toolbar.
  • Navigate diffs — Use the arrow buttons in the toolbar or search "diff next" / "diff prev" in the command palette.
  • Exit diff — Command palette → "Exit Diff mode".

#Command Palette

Press Cmd K (or Ctrl K) anywhere — even inside the editor — to open the command palette. The last 3 used commands always appear first.

CategoryExamples
RecentLast 3 executed commands at the top for fast re-run.
ActionsBeautify, Minify, Flatten, Unflatten, Sort arrays, Remove duplicates, Diff, Generate Schema, Validate...
Convert toJSON, YAML, XML, TOML, CSV
View asRaw, Tree, Graph, Query, Table
Generate TypesTypeScript, Go, Python, Java, C#, Rust, Kotlin, Swift, Protobuf, SQL...
SamplesLoad JSON / YAML / CSV / cURL samples; GitHub API, Stripe, K8s, OpenAPI examples
SettingsSort keys, Remove empty, Quote style, Indent, CSV delimiter, Live transform, Auto-format on paste, Line wrap, Font size...
WorkspacePaste, Import file, Copy output, Download, Share, Browse history, Multi-tab, Find in output, Fullscreen, Maximize output, Focus pane...
ThemeLight, Dark, System

#Copy As

Search copy as in the command palette to copy output in alternate encodings:

Base64

btoa(output) — compact binary-safe encoding.

Escaped string

Output wrapped as a JSON string literal (escaped) for embedding in code.

URL-encoded

Percent-encoded for use in query parameters or form POST bodies.

Data URI

data:application/json;base64,... for inline embedding in HTML / CSS.

#Input History

Every paste, import, or edit batch is saved to an undo stack (up to 100 entries per tab).

  • Undo / RedoCmd Z / Cmd Shift Z, toolbar arrow buttons, or command palette.
  • Browse history panel — Command palette → "Browse history". Opens a side panel listing all entries. Click any entry to restore.
  • Export history — Downloads all undo entries as a JSON file.

#Share & Export

  • Share — Save the current workspace to cloud and generate a short link. Recipients see the same input, output, format and view settings. Command palette → "Share workspace link".
  • Embed — After sharing, command palette → "Copy embed / iframe URL" for a read-only embeddable frame.
  • Disable sharing — Click the x icon next to the shared link indicator in the status bar.
  • Download — Saves output as a file (extension matches output format). Command palette → "Download output".
  • Copy — Copy output text via the floating button, the status bar icon, or Cmd C.

#Keyboard Shortcuts

ShortcutAction
Cmd KOpen command palette (works inside the editor)
Cmd ZUndo input
Cmd Shift ZRedo input
Cmd VPaste from clipboard into input
Cmd CCopy output to clipboard
Cmd EnterParse and transform (when live transform is off)
ESCClose command palette / modal

#Toolbar Pinning

Every item — format, view, action, type language, setting — has a icon. Click it to pin the item to the quick-access toolbar. Pinned items persist across sessions via localStorage. You can also pin/unpin via command palette → search pin.

#Privacy & Local-First

Your data never leaves your browser

formaty processes everything locally using a Web Worker. No input, output, or transform result is ever sent to any server — except when you explicitly click Share. Session state (pinned items, theme, tabs, settings) is stored in localStorage. Shared links can be disabled at any time from the status bar.

Ready to try it?

Open Playground →