YAML / TOML Studio — Validate, Format & Convert

Paste YAML, TOML or JSON to validate, format or convert it. Errors show the exact line and column, and type traps such as “no becomes false” and anything lost in conversion are flagged up front. Your data never leaves your device.

On-device・No upload

Your files and input are processed only inside your browser on this device and are never uploaded to our servers.

Input
0 chars0 lines
ResultEnter YAML / TOML / JSON and the result appears here
Enter YAML / TOML / JSON and the result appears here

How to use

  1. Paste YAML, TOML or JSON into the input pane, or click “Open file” (drag & drop works too). The format is detected automatically; override it with “Input format”.

  2. Choose a mode: Format, Convert or Tree view. In Convert, pick the target (YAML, TOML or JSON). The result updates as you type.

  3. If there is an error, use the reported line and column and “Go to error” to find it.

  4. Read “Things to check” — type traps, duplicate keys and what the conversion loses — and fix the input (for example by adding quotes) if needed.

  5. Copy the result or download it as .yaml, .toml or .json.

What it does

Type-trap warnings

Flags the YAML 1.1 behaviours behind the “Norway problem” (no / off as booleans), 0755 read as octal, 22:22 as base-60, 2026-10-11 as a date, 1e3 and 3.10 becoming 3.1 — each with its position. Switch “YAML reading” to 1.1 to see what older parsers see.

Comment-preserving format

YAML is re-serialized with the yaml package’s Document API, so comments, anchors, tags and quote styles stay while indentation is normalized. Operations that cannot keep them (key sorting, converting to other formats) say so.

Says what conversion loses

Every conversion lists what the target cannot carry: comments, null in TOML, top-level arrays, expanded anchors and merge keys, date types (strings in JSON), integers beyond 64 bits.

No lost digits

Integers beyond 64 bits and long decimals are kept as written, and TOML’s integer / float distinction (1 vs 1.0) is preserved.

Alias-bomb protection

YAML that explodes exponentially through aliases (billion laughs) is rejected once the aliases add more than one million nodes or 20 million characters. Tags such as !!python/object are never executed — they trigger a warning and are read as plain values.

Tree view with path copy

Explore the structure in a collapsible tree and copy the JSONPath of any value (e.g. $.spec.containers[0].image) in one click.

Use cases

  • Find the line behind a syntax error in docker-compose, Kubernetes or GitHub Actions YAML
  • Catch values like the country code no or the mode 0755 that other parsers read as a different type
  • Convert pyproject.toml or Cargo.toml to JSON or YAML to inspect the structure
  • Normalize YAML indentation while keeping comments
  • Browse a config file as a tree and copy the path of a value

Supported formats

Input

YAML 1.2 / 1.1 (multi-document ---)TOML 1.0JSON.yaml.yml.toml.jsonUTF-8 / UTF-16 (with BOM)

Output

Formatted YAMLFormatted TOMLFormatted JSON (2 / 4 spaces, tab)Tree view

Capability matrix

FeatureSupportNotes
Syntax validation with line/columnSupportedYAML, TOML and JSON
Warnings for type traps, duplicate keys and unknown tagsSupportedYAML 1.2 input is also checked from the YAML 1.1 point of view
YAML formatting that keeps comments, anchors and tagsSupportedIndent 2 / 4, list indentation toggle
Sort keysPartialComments move with their key. Comments are not kept when formatting TOML or converting
YAML ⇄ JSON ⇄ TOML conversionSupportedLost information is listed as warnings
Multiple documents (---)PartialFormatting works; JSON output wraps them in an array; TOML cannot hold them
Tree view & path copySupported—
File open, copy and downloadSupported—
JSON Schema / Kubernetes schema validationNot supportedSyntax and type cautions only; field names and required fields are not checked
Keeping TOML comments and layoutNot supportedTOML is re-read as data and written back, so comments and the original order are not kept
TOML date-time fractions finer than millisecondsNot supportedMilliseconds only
Offline useSupportedWorks without a connection once loaded

Limits & notes

  • Up to 10 million characters (10 MB per file). Above one million characters, auto-run pauses and you press “Run”.
  • Nesting is limited to 200 levels. YAML aliases are rejected once their expansion adds more than one million nodes or 20 million characters (ordinary large arrays are fine within the input limit).
  • YAML is read as YAML 1.2 by default. YAML 1.1 reading is there to show how older parsers see the file.
  • TOML numbers: integers are 64-bit, decimals double precision (integers beyond 64 bits are written as strings in TOML output).
  • YAML complex keys (a list or map used as a key) cannot exist in other formats and are replaced by the string key “[complex key]”.
  • The list of cautions shows up to 100 entries. The tree view shows 200 entries per level at a time.

Privacy & safety

Your YAML, TOML, JSON and files are processed only inside your browser. Nothing is sent to or stored on any server, so config files that may contain credentials are safe to inspect. YAML tags are never executed. Closing the page discards everything.

FAQ

Why does country: no become false in YAML?
YAML 1.1 defines no, off and n as booleans (the “Norway problem”, since the country code NO turns into false). YAML 1.2 reads it as a string, but PyYAML, Ruby and other YAML 1.1 parsers are still common, so results differ by environment. Quote it as "no" to be safe; this tool warns about each occurrence.
How do I fix “mapping values are not allowed here” in YAML?
The usual causes are a missing space after a colon, inconsistent indentation, tabs, or an unclosed quote or bracket. Paste the file here to get the line, column and a plain explanation, then check around that position.
What happens to comments when converting YAML to JSON or TOML?
JSON and TOML output contain only the data, so comments are lost; a warning appears whenever the input had comments. Formatting YAML as YAML keeps them.
Is there YAML or JSON that cannot be converted to TOML?
Data whose top level is an array or a bare value, and multi-document YAML, cannot be TOML. null is dropped because TOML has no null. The tool tells you when either happens.
What happens to YAML aliases and merge keys (<<) on conversion?
JSON and TOML have no references, so aliases and merge keys are written out as expanded content. Formatting YAML as YAML keeps anchors and aliases as they are.
Is my data sent to a server?
No. Everything runs in your browser; your input is never sent to LIBRA Works or any third party.

JSON Studio — Formatter & Validator

Paste JSON to format, minify or validate it instantly. Errors are shown with the exact line, column and cause, and comments or trailing commas can be auto-repaired. Your data never leaves your device.

XML Studio — Formatter & Validator

Paste XML to format, minify or validate it. Errors show the exact line, column and cause, and whitespace that carries meaning (mixed content, xml:space) is never touched. XPath search and JSON conversion are on the same screen. Your data never leaves your device.

Diff Tool — Text & Code Compare

Paste or drop two versions and see added and removed lines, plus the exact words that changed inside each line. Copy or save the result as a unified patch. Nothing leaves your browser.

UUID / ULID / NanoID / Token Generator

A UUID is ready the moment the page opens. Switch to UUID v7, ULID, NanoID or a random token, generate up to 10,000 at once and save them as .txt, .csv or .json. Paste an existing UUID or ULID to read its embedded time and version.

Regex Tester

Type a pattern and matches light up in the test string instantly. Capture groups, replacement output and what each part of the pattern means are all on one screen — and patterns that would freeze your browser are stopped after one second.

Code Formatter — Format & Minify

Paste code to format it with the language auto-detected. Choose indent, line width, semicolons, quotes and trailing commas; JavaScript, CSS and HTML can also be minified with before/after size and reduction. Your code never leaves the browser.

Last updated: