toml · @iarna/toml · live · client-side

Format TOML config files

Parses TOML with the canonical @iarna/toml library and re-emits it with consistent whitespace, table headers, and value alignment. Runs locally.

TOML Formatter
Input
147 B
9 lines
Output
0 B
1 lines
Status
loading
parser…
Ratio
0.00×
out/in
input · toml
output · formatted toml
Loading parser…
Quick Start

How to format TOML

The formatter parses with @iarna/toml — the same library Cargo and Poetry consumers use — and re-emits with canonical whitespace.

  1. 01

    Paste a TOML file

    Cargo.toml, pyproject.toml, an Inertia config — anything @iarna/toml can read.

    Parsing runs through Prettier’s standalone bundle (or the language-specific equivalent) loaded lazily — no parser ships until the tool is opened.

    tomlPrettierASTstandalonelazy
    input · sourceraw · AST
    name="x"
    port=80
    loaded · parsedAST · ready
  2. 02

    Round-trip parse

    Parsing catches malformed tables or bad value types; errors show inline.

    Indent width, tab style, and print-width re-format through a memoised pass — switching 2 → 4 spaces never re-parses, only re-prints.

    parseindentprint-widthmemoisedlive
    parse · optionsok/err · live
    { name: "x" }
    options applied · livelive
  3. 03

    Re-emit canonical

    Tables get a blank line above; keys and values are space-aligned consistently.

    The formatter is deterministic and idempotent: running it twice produces byte-identical output, which keeps diffs and git noise to a minimum.

    liveidempotentdeterministicdiff-cleanstable
    out · formattedpretty · ready
    [server]
    host = "x"
    formatted · liveidempotent
  4. 04

    Copy or save

    Copy the canonical TOML or download .toml — your config never leaves the tab.

    Download writes a Blob with the language-appropriate extension; copy uses navigator.clipboard.writeText so the output preserves all whitespace exactly.

    exportclipboardbloblanguage MIMEclient-side
    ok · copiedready · done
    ✓ Copied
    shipped · ready to shipsuccess
Pro tips

Formatting tips that keep diffs sane

Pick one config and pin it

Inconsistent formatting causes diff churn. Commit .prettierrc / .editorconfig and enforce in CI.

Format on save

Editor integration is faster feedback than a pre-commit hook. Use both for belt-and-braces.

Idempotency matters

Running the formatter twice should produce identical output. Test this on a representative file.

Match the language community

Default to community conventions: 2 spaces for JS/CSS, 4 for Python, tabs for Go. Fights over indent are a productivity tax.

Print-width drives wrapping

80, 100, and 120 are the common targets. Wider lines parse fast but review slower side-by-side.

Don’t mix formatters and linters

Prettier handles whitespace; ESLint handles correctness. Disable overlapping rules to avoid fight-club configs.

Use Cases

When to format TOML

Cargo, Poetry, Hugo, app configs.

Cargo.toml

Tidy a Rust crate manifest after hand-edits. Idempotent: running the formatter twice produces byte-identical output, which is the foundation of a clean CI gate. Pair with a pre-commit hook so PRs arrive already formatted, focusing review on logic.

idempotent

pyproject.toml

Standardise a Python project file across a team. Pairs with EditorConfig + .prettierrc for end-to-end consistency. Whitespace-only changes vanish so reviewers see real diffs, and git blame stays honest about who wrote what.

CI-ready

Hugo configs

Format static-site configs for readability. Output respects your indent width, tab style, and print-width — settings carry over for repeat runs. Switching 2-space to 4-space costs nothing in CPU but standardises an entire codebase.

diff-clean

App settings

Round-trip user-edited config to catch typos early. Format-on-save is the fastest feedback loop; CI is the safety net. Together they make inconsistent indentation a thing of the past and free up review cycles for genuine concerns.

PR-friendly

Code review

Canonical form removes whitespace-only diff noise. Whitespace-only changes don't trigger downstream content-hash invalidations, so CDN cache keys and CI cache layers stay warm. Real changes get all the rebuild budget.

review-ready

Migration

Normalise TOML before converting to JSON or YAML. Pairs with linters (ESLint, Stylelint, pylint) that catch what formatting alone can't — bugs, unused imports, dead code. Each tool stays in its lane, and the codebase stays clean.

deterministic
FAQ

Frequently asked questions

No — @iarna/toml parses into a JS object, which doesn't carry comments. Comments will be lost on the round trip.
Within a table, yes (object property order). Across tables, original order is kept by @iarna/toml's stringify.
Parsed and re-emitted as inline tables — { x = 1, y = 2 }. Style is canonical, not original.
TOML datetimes round-trip via @iarna/toml's special Date types, preserving timezone information.
No — @iarna/toml runs locally in your browser tab.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!