Frequently asked.

Eight things that come up most often. If yours is not here, write in.

What does this tool do?
It converts a JSON sample into typed declarations — TypeScript interfaces, Zod schemas, Go structs, Rust serde definitions, Python dataclasses, and Pydantic v2 models. One pass, consistent naming and nullability across outputs.
Is it free to use?
Yes. No account, no limits, no upsell. The site runs on ad revenue; disable an ad blocker if you want to help keep it running.
Does my JSON get sent to a server?
No. Inference runs entirely in your browser. The page never posts your payload anywhere, including the tabs for Zod, Go, Rust, Python, and Pydantic output.
Why do you infer literal types sometimes?
When a field contains a single string value that looks discriminant — "customer", "succeeded", "v1" — inferring the literal produces a more useful type than widening to string. You can switch to always-widen in the options row.
What is the difference between nullable and optional?
Nullable means the key is always present but the value may be null (T | null). Optional means the key may be absent entirely (T?). We pick based on whether the field appeared in every sample.
Can I paste multiple JSON samples?
Yes. Paste a JSON array of records, and the inference pass will merge field sets — a field that is missing in some records becomes optional, a value that varies by record becomes a union.
Why are the output tokens highlighted in warm browns and greens?
The palette is borrowed from old Penguin Classics typesetting. It reads calmer than the default Monokai-style neon, and makes the comments (in muted grey) easier to scan.
How do I report a bug or request a feature?
Email hello@jsontotypes.com. Every message gets read, most get a reply within a day or two.