Postel's Law

Be conservative in what you send, be liberal in what you accept.

Jon Postel's 1980 robustness principle came out of the TCP specification — a rule for letting networks tolerate sloppy peers without becoming sloppy themselves. The same rule maps cleanly onto interfaces: be strict about what you produce, forgiving of what users hand you.

"Be conservative in what you do,
be liberal in what you accept from others."
The Law · Postel, 1980

A system should send clean, strict output but accept generous, messy input. On the network this kept incompatible TCP implementations talking; on the interface, it keeps humans from being punished for typing things in their own format.

Coined by
Jon Postel (1980)
Origin
RFC 760 · TCP spec
Also called
Robustness Principle
Inputs

Forgiving Form Fields

Accept the user's format, then normalize it yourself. Phone numbers with dots, slashes, or spaces; dates as "tomorrow" or "12/3"; emails with stray whitespace — all reasonable input. Strip, parse, and store the clean version without making the user redo their typing.

Same field, many shapes (555) 867-5309 555.867.5309 5558675309 +15558675309
Accept
Any reasonable format
Store
Clean canonical
Don't
Reject and re-ask
Outputs

Strict, Predictable Outputs

The other half of the law: what you produce should be tight, standards-compliant, and unambiguous. Dates in ISO 8601, IDs in a known shape, JSON with a consistent schema. Liberal inputs only work because outputs hold a contract that the rest of the system can rely on.

Clean contract going out { "id": "u_8f3a92", "date": "2026-05-31", "amount": 4200, "currency": "USD" }
Send
Strict canonical
Use
ISO dates · stable schemas
Result
Predictable downstream
Errors

Recover, Don't Reject

When input is ambiguous, infer the likely intent and confirm — don't dump the user back to a blank field. "Looks like you meant Dec 3?" beats a red border and a "format invalid" error. Recovery is faster, kinder, and produces more completed flows.

Confirm the guess, don't reject 12/3 Did you mean December 3, 2026? Yes No, edit
Infer
The likely intent
Confirm
"Did you mean…?"
Don't
Dump back to blank
Compatibility

Stay Backwards-Compatible

Be liberal with what older clients, older URLs, and older data send you. Don't break links when paths change — redirect. Don't reject saved files in last year's format — upgrade them silently. The user shouldn't pay for your refactor.

Old shapes still work /old/path v1 schema ACCEPTED redirected · upgraded user unaware
Apply
Old URLs · old data
Tactic
Redirect · auto-upgrade
Rule
Don't break links
Smart parsing

Parse the Way Humans Type

Names with hyphens, addresses with apartment numbers, prices with currency symbols — let the parser do the work. The user has a mental shape for what they're entering; meet them at it rather than imposing a stricter shape that only your database cares about.

Meet the mental model $1,234.50 1234.5 1.234,50 € ALL PARSE TO 1234.50
Accept
Human shapes
Normalize
Behind the scenes
Outcome
Form completion goes up
Defaults

Defaults Are Liberal Input

A field with a smart default is accepting "I don't care" as valid input. Country pre-filled by IP, currency by locale, role by team — every safe assumption is one fewer thing the user has to send. Strict outputs still hold; the system just guessed well.

"No answer" as valid input Country United States ✓ from IP USD ✓ from locale
Pre-fill
Anything safe to guess
Sources
IP · locale · history
Goal
Less to type
Critique

The Limits of Robustness

Postel's law has a counter-case: too-tolerant parsers let bad data calcify into the spec, and the system inherits years of "well, we accept that" cruft. The strict half matters — be liberal at the edge, strict in the core, and don't paper over genuine ambiguity with a guess.

Where the law breaks down LIBERAL AT THE EDGE Parsing · UX layer · forms STRICT IN THE CORE Schemas · contracts · API
Risk
Cruft calcifies into spec
Apply
Liberal edge · strict core
Don't
Paper over ambiguity
Pairs with

Closes the Tesler Loop

Postel and Tesler reach the same conclusion from opposite directions. Tesler says complexity has to live somewhere; Postel says when it lives at the boundary, put it on the system side. The forgiving interface is the system absorbing the messiness of the real world.

System absorbs the mess USER messy input SYSTEM parses · normalizes absorbs the work
Pairs with
Tesler's Law
Both say
System absorbs mess
Effect
Effortless feel

Postel's Law in the Age of AI

Models are the most liberal input parsers ever built — and the strictest committee about which interpretation they commit to.

✦ AI Era

AI as the Ultimate Liberal Parser

"Book me a flight on Friday" used to need a precise form. Now it doesn't. Models accept hand-waving, typos, mixed-language input, voice and text together — the most Postel-compliant front door we've ever shipped. The form fields haven't gone away; they've moved inside the model.

Anything in → structure out "book me a flight friday morning to nyc" { "origin": "DEN", "dest": "JFK", "date": "2026-06-05", "time": "AM" }
Shift
Form → language
Accepts
Almost anything
Output
Still strict
✦ AI Era

The Risk: Quiet Commitment

A liberal parser that silently commits to one interpretation is dangerous. The user said "Friday" — the model picked one. Postel's contract still applies: show what you understood, let the user fix it, never collapse genuine ambiguity into a confident answer.

Confirm the interpretation Understood as: DEN → JFK · Fri Jun 5 · morning Looks right Edit it SHOW THE GUESS · LET THEM FIX IT
Risk
Silent interpretation
Fix
Surface the parse
Always
Allow correction
Further Reading