The Story - How the Internet Object went from a frustration to a format
Most data formats are born in a committee. This one was born from a bandwidth bill.
The 2KB that became 8KB
In 2017 I shipped a "simple" REST API — an employee list. Within weeks, a 2KB response had ballooned to 8KB, for one dumb reason: JSON repeats every key in every record. A thousand employees meant a thousand copies of name, age, address. I was paying for the same words over and over, on every request.
And the validation for those records was written six times over — server, web client, mobile in, mobile out — each team slightly differently. The contract lived in everyone's head and nowhere on the wire. One question stuck:
What if we sent only the values and let a shared schema carry the meaning, validation, and types?
Reading everything that came before
Spotting the problem was easy; not trading one compromise for another was hard. So I read everything — JSON, XML, YAML, CSV, GraphQL, even MIME and SOAP. Each got something right and missed the rest. JSON proved data must be readable, then stayed schemaless and wasteful. Binary formats proved the wire should be small, then made data unreadable. Both half-right.
I wanted both halves: readable and compact, expressive and exact, human and machine. That meant schema-first with validation built in, a clean split between metadata and data, streaming as a first-class idea, and honest types — real decimals, big integers, dates — with no silent coercion. No existing format checked every box, so I built one. The name kept surfacing on its own: Internet Object.
The quiet years
The tidy version leaves this out. It became nights and weekends — prototypes, feedback, rewrites. Then from 2020 into 2021 it went quiet. No commits, just an idea I couldn't abandon. I picked it back up in late 2022, and this time it held. Seven years from that 2017 API to something actually ready. Ideas whose time has come rarely arrive on schedule.
The accident that aged well
I built Internet Object to fix a web data problem — repeated keys, missing schemas, tangled metadata. Not for the AI era; in 2017 there wasn't one. But in GenAI workflows, token count is the main cost driver, and a payload ~50% smaller can roughly halve inference bills. Give a model a schema contract instead of ad-hoc JSON and its output gets more predictable too. Lower cost, higher reliability — free by-products of solving the original problem.
Where it stands
Internet Object is live. Parsers are shipping, the playground is running, teams are testing it in production. It's not a better library in one language — it's an openly specified contract on the wire, one anyone can implement, and no one can lock you into.
Not a better library. A better default.
Next up, we get concrete: how IO's type system actually works — the piece that turns schema-first from a slogan into something the format enforces for you.
Top comments (1)
Which language would you most want to see an IO parser in?