Compare TOML Files Online

Paste two TOML configuration files. See what was added, removed, or changed — section by section, key by key.

🔒 100% private — runs entirely in your browser

or try sample data

What is Compare TOML Files?

Compare TOML Files shows you exactly what changed between two TOML configuration files with a clear, side-by-side visual diff. Every added section, removed key, and modified value is color-coded and highlighted at the word level, making it easy to review changes in Cargo.toml, pyproject.toml, Hugo configurations, and any other TOML-based config files.

TOML (Tom's Obvious Minimal Language) has become the configuration format of choice for modern toolchains. Rust projects use Cargo.toml for dependencies and build settings, Python projects use pyproject.toml for project metadata and tool configuration, Hugo uses config.toml for site settings, and many CLI tools and static site generators adopt TOML for its readability. When these files change — new dependencies, version bumps, feature flag toggles, or build profile adjustments — you need a clear view of what exactly was modified.

Paste your TOML from any source — project files, CI artifacts, or clipboard. The tool preserves TOML's section headers, inline tables, arrays, and comments in the diff output. Use "Ignore whitespace" to skip formatting differences or "Ignore case" when key casing does not matter. Everything runs in your browser, so your configuration data stays private.

TOML File Comparison — Common Scenarios

Comparing Cargo.toml dependency updates

# Cargo.toml (before)
[dependencies]
tokio = { version = "1.32", features = ["full"] }
axum = "0.6"
serde = { version = "1.0", features = ["derive"] }
sqlx = { version = "0.7", features = ["postgres"] } # Cargo.toml (after) — version bumps and new deps
[dependencies]
tokio = { version = "1.35", features = ["full"] }
axum = "0.7"
serde = { version = "1.0", features = ["derive"] }
sqlx = { version = "0.7", features = ["postgres", "migrate"] }
jsonwebtoken = "9.2"
tower-http = { version = "0.5", features = ["cors"] }

Cargo.toml diffs show dependency version bumps, new crate additions, and feature flag changes. Review these before merging PRs to catch unintended dependency changes.

Reviewing pyproject.toml changes

# pyproject.toml (before)
[project]
name = "my-package"
version = "1.2.0"
requires-python = ">=3.9"
dependencies = [ "fastapi>=0.100", "uvicorn[standard]", "sqlalchemy>=2.0",
] [tool.ruff]
line-length = 88 # pyproject.toml (after) — Python version bump, new deps
[project]
name = "my-package"
version = "2.0.0"
requires-python = ">=3.11"
dependencies = [ "fastapi>=0.109", "uvicorn[standard]", "sqlalchemy>=2.0", "pydantic-settings>=2.0",
] [tool.ruff]
line-length = 120
target-version = "py311"

pyproject.toml diffs reveal Python version requirement changes, dependency updates, and tool configuration tweaks across project versions.

Comparing Hugo site configuration

# config.toml (development)
baseURL = "http://localhost:1313/"
title = "My Blog"
theme = "minimal"
paginate = 5 [params] description = "A development blog" showReadingTime = false enableSearch = false [markup.goldmark.renderer] unsafe = true # config.toml (production)
baseURL = "https://myblog.com/"
title = "My Blog"
theme = "minimal"
paginate = 10
enableRobotsTXT = true [params] description = "Thoughts on software engineering" showReadingTime = true enableSearch = true googleAnalytics = "G-XXXXXXXX" [markup.goldmark.renderer] unsafe = false

Hugo config diffs highlight environment-specific settings like base URLs, pagination, analytics codes, and security options between development and production.

TOML File Comparison Gotchas

Section reordering shows as large diffs

TOML sections (table headers like [dependencies]) can appear in any order without changing the file's meaning. However, this tool compares text line by line, so rearranging sections will show entire blocks as removed and re-added. Keep sections in the same order across both files for the cleanest diff.

Inline tables vs multi-line tables

TOML allows the same data as an inline table (dep = { version = "1.0", features = ["full"] }) or a multi-line table ([dep] with keys on separate lines). These are semantically equivalent but produce textual differences. Standardize the formatting before comparing to avoid false positives.

Quoted vs bare keys

TOML allows bare keys (name = "value") and quoted keys ("name" = "value") interchangeably for valid bare key characters. Since this is a text comparison, different quoting styles will appear as changes even though the parsed result is identical. Use consistent key quoting across files.

Frequently Asked Questions

How do I compare two TOML files?

Paste your TOML content into the two input panels and click Compare. The tool shows a side-by-side diff with line-by-line comparison and word-level highlighting for modified sections, keys, and values.

Can I compare Cargo.toml files?

Yes. Cargo.toml files are standard TOML and work perfectly with this tool. The diff highlights dependency version changes, feature flag additions, build profile modifications, and metadata updates across Rust project versions.

Does this handle TOML tables and arrays of tables?

Yes. Table headers ([section]), nested tables ([section.subsection]), and arrays of tables ([[section]]) are all displayed in the diff. Changes within any section type are highlighted with word-level precision.

Is my TOML data safe?

Yes. This tool runs entirely in your browser using client-side JavaScript. Your TOML files — including any credentials, API keys, or private configuration — are never sent to any server.

Can I compare pyproject.toml files?

Yes. Any TOML file works, including pyproject.toml for Python projects, Cargo.toml for Rust, config.toml for Hugo, netlify.toml for Netlify deployments, and any other application that uses the TOML format.

How is TOML different from YAML for configuration?

TOML uses explicit section headers and key-value pairs without relying on indentation, making it less prone to whitespace errors than YAML. If you need to compare YAML files instead, use the YAML Diff tool which handles indentation-sensitive content.