TOML to JSON
Paste a Cargo.toml, pyproject.toml or any config and get JSON: [tables] become nested objects, [[arrays of tables]] become arrays of objects, and dotted keys expand into the structure they imply.
TOML has things JSON does not. Datetimes are a first-class TOML type, so 1979-05-27T07:32:00Z must become a plain string in JSON — this converter does that and reports each one, because "string that looks like a date" and "date" are different contracts for whoever consumes the output.
Integers beyond JavaScript’s safe range (2^53) and any comments in the file are likewise reported instead of silently corrupted or dropped. Everything runs in your browser.
The Norway problem: in YAML 1.1 the bare word no is the boolean false — so a list of country codes quietly turns Norway into false. YAML 1.2 reads no, yes, on and off as plain strings, but plenty of parsers still speak 1.1, which is why this tool checks every plain scalar against both readings and shows you the difference before it bites.
Why comments can't survive JSON: converters exchange data, and JSON's data model has no comment syntax at all — a comment in YAML or TOML simply has nowhere to go. Instead of dropping them silently, this tool counts every dropped comment and reports it, along with expanded YAML anchors, TOML dates turned into strings, null values TOML can't hold, and integers too big for JavaScript.
FAQ
Does my config leave the browser?
No — parsing is client-side. Tokens and connection strings inside a config never leave the page.
What happens to TOML datetimes?
JSON has no date type, so each datetime becomes an ISO string — and the loss report lists every one, since downstream code now receives a string where the TOML consumer received a real date.
How are [[array of tables]] sections converted?
Each [[name]] block becomes one object in a JSON array under that key — the natural mapping, applied consistently with nested tables inside.
What about very large integers?
TOML allows 64-bit integers; JSON numbers lose precision past 2^53. Values in that range are flagged in the report rather than silently rounded.