Zod 4 types that have no useful JSON Schema representation and so
cannot meaningfully be rendered by schema-components. The runtime
adapter (packages/core/src/core/adapter.ts, see the
zod-type-unrepresentable classifier rules) catches the thrown
error and surfaces it as a SchemaNormalisationError — but for
the runtime-throwing variants the failure only happens on first
render. Statically rejecting these types at the props boundary
gives the same diagnostic at compile time.
Two categories are listed:
Runtime-throwing.z.toJSONSchema() itself throws when it
encounters one of these — bigint, date, map, set, symbol,
function, custom, undefined, void, nan, codec. Source-of-truth
is the classifier in adapter.ts (search for
zod-type-unrepresentable).
Statically rejected by schema-components.z.toJSONSchema()
accepts these without throwing, but the resulting JSON Schema
is either degenerate (ZodNever becomes { not: {} },
contributing nothing renderable) or the async/Promise dimension
is dropped silently (ZodPromise is unwrapped to its inner
type with no signal to the consumer). Both surface here so the
rejection is explicit at the type level even though the runtime
is permissive.
Names mirror the Zod 4 classic interface exports in
node_modules/zod/v4/classic/schemas.d.cts.
Zod 4 types that have no useful JSON Schema representation and so cannot meaningfully be rendered by schema-components. The runtime adapter (
packages/core/src/core/adapter.ts, see thezod-type-unrepresentableclassifier rules) catches the thrown error and surfaces it as aSchemaNormalisationError— but for the runtime-throwing variants the failure only happens on first render. Statically rejecting these types at the props boundary gives the same diagnostic at compile time.Two categories are listed:
z.toJSONSchema()itself throws when it encounters one of these — bigint, date, map, set, symbol, function, custom, undefined, void, nan, codec. Source-of-truth is the classifier inadapter.ts(search forzod-type-unrepresentable).z.toJSONSchema()accepts these without throwing, but the resulting JSON Schema is either degenerate (ZodNeverbecomes{ not: {} }, contributing nothing renderable) or the async/Promise dimension is dropped silently (ZodPromiseis unwrapped to its inner type with no signal to the consumer). Both surface here so the rejection is explicit at the type level even though the runtime is permissive.Names mirror the Zod 4 classic interface exports in
node_modules/zod/v4/classic/schemas.d.cts.