What this tool does
Nested objects become tables; arrays of objects become arrays of tables.
{
"db": { "host": "localhost", "pool": { "size": 10 } },
"servers": [{ "name": "a" }, { "name": "b" }]
}
[db]
host = "localhost"
[db.pool]
size = 10
[[servers]]
name = "a"
[[servers]]
name = "b"
The root has to be an object: a TOML file is a table, so a JSON array at the top has nowhere to hang its keys.
Null is the one that stops it
TOML has no null value, and the two ways of pretending otherwise are both wrong:
- dropping the key changes what the file says — a setting that is absent is not a setting set to nothing;
- writing
""invents a value that was not there.
So the conversion stops and tells you which key. It is the only place in this conversion where a valid JSON document is refused, and it is refused because finishing would mean lying.
Integers beyond 64 bits are written as they are
{ "id": 12345678901234567890 }
comes out with all twenty digits. TOML integers are 64-bit signed, so that value is outside the range and a strict reader will reject the file.
That is deliberate. The alternative — rounding it to 12345678901234567000, which is what a converter parsing through a double does — hands you a file that parses cleanly and contains a different number. A loud failure beats a quiet lie.
Dates stay strings
JSON has no date type, so "2026-01-01" arrives as text and leaves as "2026-01-01", quoted.
TOML does have native dates, and using one would mean deciding that the author meant a date. Sometimes they did; sometimes that string is a product reference, a folder name, a version. JSON already told us it was text, and there is no reason to argue with it.
Private by design
Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.