? Questions
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, and GraphQL SDL. 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, and Rust 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.