Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
|
|
|
|
|---|---|---|
|
|
|
TOML (Tom's Obvious Minimal Language) is a configuration file format created by Tom Preston-Werner in 2013. It is designed to be unambiguous, human-readable, and easy to parse. TOML files use the .toml extension.
[database]
host = "localhost"
port = 5432
name = "myapp"
enabled = true
[server]
host = "0.0.0.0"
port = 8080
workers = 4
| Element | Syntax | Example |
|---|---|---|
| Key-value pair | key = value | host = "localhost" |
| String | "double quotes" | name = "Alice" |
| Integer | Bare number | port = 8080 |
| Float | Decimal number | pi = 3.14 |
| Boolean | true / false | debug = false |
| Array | [val1, val2] | tags = ["web", "api"] |
| Table (section) | [section] | [database] |
| Nested table | [section.subsection] | [server.ssl] |
| Comment | # comment | # production config |
| Multiline string | """...""" | description = """...""" |
| Tool / Platform | TOML File | Purpose |
|---|---|---|
| Rust | Cargo.toml | Package manifest (dependencies, metadata) |
| Python | pyproject.toml | Build system, project config (PEP 518/621) |
| Python (uv) | uv.toml | uv package manager configuration |
| Hugo | config.toml | Static site generator configuration |
| Terraform | .terraformrc | CLI configuration |
| Netlify | netlify.toml | Deploy configuration |
| InfluxDB | influxdb.toml | Database configuration |
| Cirrus CI | .cirrus.yml (also TOML) | CI pipeline configuration |
| Taplo | .taplo.toml | TOML toolkit configuration |
| Biome | biome.toml | JavaScript/TypeScript linter config |
| Ruff | ruff.toml | Python linter configuration |
| Cargo (Rust) | .cargo/config.toml | Cargo build configuration |
| Feature | TOML | YAML | JSON | INI |
|---|---|---|---|---|
| Sections | [section] | Map keys | Nested objects | [section] |
| Types | String, int, float, bool, array, datetime | String, int, float, bool, array, null | String, int, float, bool, array, null | String only |
| Comments | # comment | # comment | Not supported | ; or # |
| Nesting | [parent.child] | Indentation | {} nesting | Not supported |
| Arrays | [1, 2, 3] | - item | [1, 2, 3] | Not supported |
| Multiline strings | """...""" | | block | \n escape | Not supported |
| Ambiguity | Minimal | Significant whitespace issues | None | Minimal |
| Spec | v1.0 (official) | 1.2 | RFC 8259 | No formal spec |
| Best for | Application config, project manifests | Complex config, CI/CD | APIs, data interchange | Simple config |
| Use Case | Description |
|---|---|
| Rust packages | Convert dependency data to Cargo.toml format |
| Python projects | Generate pyproject.toml entries from CSV package lists |
| Hugo sites | Convert content front matter data to TOML |
| Configuration migration | Move CSV-based config data to TOML format |
| Ruff / Biome config | Generate linter configuration from CSV settings |
| Documentation | Present tabular data in TOML format for technical docs |
| Data entry | Use the table editor to clean CSV before converting to TOML |
| CSV Value | TOML Type | Example |
|---|---|---|
"hello" or hello | String | name = "hello" |
42 | Integer | port = 42 |
3.14 | Float | pi = 3.14 |
true / false | Boolean | debug = false |
null or empty | String (empty) | value = "" |
2024-01-15 | String (or datetime) | date = "2024-01-15" |
After loading CSV data, an interactive spreadsheet grid lets you edit before converting:
| Operation | Description |
|---|---|
| Transpose | Swap rows and columns |
| Clear | Remove all data |
| Delete Empty | Remove empty rows/columns |
| Deduplicate | Remove duplicate rows |
| Replace | Find and replace (with regex support) |
| Case transform | UPPERCASE, lowercase, Title Case |
| Insert/delete | Right-click for row/column operations |
| First Row as Header | Toggle header treatment |
All processing runs entirely in your browser. No data is uploaded to any server.
Choose one of two input methods:
Upload a file: Click "Choose File" and select a .csv file.
Paste data: Click "Enter Data" to switch to the code editor. Paste your CSV.
Use the toolbar to clean your data:
Remove duplicates (Deduplicate)
Remove empty rows/columns (Delete Empty)
Find and replace values (Replace)
Transform text case
Transpose rows and columns
Click Convert. The TOML output appears in the "Output Data" panel.
Click Copy to Clipboard to paste into your .toml file.
Premium users can click Download File to save.
Input CSV:
key,value
host,localhost
port,5432
name,myapp_production
enabled,true
pool_size,10
timeout,30
Output:
host = "localhost"
port = 5432
name = "myapp_production"
enabled = true
pool_size = 10
timeout = 30
Input CSV:
name,version
serde,1.0
tokio,1.35
reqwest,0.11
tracing,0.1
clap,4.4
Output:
name = "serde"
version = "1.0"
Note: For Cargo.toml dependencies, you would reorganize the output into TOML table format:
[dependencies]
serde = "1.0"
tokio = "1.35"
reqwest = "0.11"
tracing = "0.1"
clap = "4.4"
Input CSV:
section,key,value
database,host,localhost
database,port,5432
database,name,myapp
server,host,0.0.0.0
server,port,8080
server,workers,4
logging,level,info
logging,file,/var/log/app.log
After transposing and editing, output:
[database]
host = "localhost"
port = 5432
name = "myapp"
[server]
host = "0.0.0.0"
port = 8080
workers = 4
[logging]
level = "info"
file = "/var/log/app.log"
Input CSV:
variable,value
DATABASE_URL,postgres://localhost/myapp
REDIS_URL,redis://localhost:6379
SECRET_KEY,abc123xyz
DEBUG,false
MAX_CONNECTIONS,100
Output:
DATABASE_URL = "postgres://localhost/myapp"
REDIS_URL = "redis://localhost:6379"
SECRET_KEY = "abc123xyz"
DEBUG = false
MAX_CONNECTIONS = 100
| Practice | Details |
|---|---|
| Use sections for grouping | [database], [server], [logging] |
| Quote all strings | "value" — required by TOML spec |
| Use integers for ports | port = 8080 not port = "8080" |
| Use booleans for flags | debug = true not debug = "true" |
| Add comments liberally | # production database settings |
| Keep sections flat | Avoid deeply nested [a.b.c.d.e] |
| Use arrays for lists | tags = ["web", "api", "mobile"] |
| Validate with taplo | Use Taplo TOML linter/validator |
No. All conversion happens locally in your browser using JavaScript. Your data never leaves your device.
TOML (Tom's Obvious Minimal Language) is a configuration file format designed to be human-readable and unambiguous. It is used by Rust (Cargo.toml), Python (pyproject.toml), Hugo, and many other tools.
TOML uses explicit section headers ([section]) and requires quoted strings. YAML uses indentation for structure and supports more complex features. TOML is less ambiguous; YAML is more expressive. Both are used for configuration.
TOML supports typed values (integers, floats, booleans, arrays, datetime), nested tables, and has a formal specification. INI only supports string values with no formal spec. TOML is a strict superset of INI's capabilities.
The tool generates flat TOML key-value pairs. For Cargo.toml, you may need to reorganize the output into the expected [package] and [dependencies] table structure.
Yes. The built-in table editor lets you modify cells, transpose, deduplicate, find/replace, change case, and insert/delete rows and columns before generating TOML.
Standard CSV with comma delimiters. The first row can be used as column headers (enable "First Row as Header").
The tool processes data entirely in your browser. Files up to 10 MB typically convert without issues on modern hardware.
Yes. The tool is responsive, though the table editor is best experienced on desktop.