The Standard Schema project is a set of interfaces that standardize the provision and consumption of shared functionality in the TypeScript ecosystem.
Its goal is to allow tools to accept a single input that includes all the types and capabilities they need— no library-specific adapters, no extra dependencies. The result is an ecosystem that's fair for implementers, friendly for consumers, and open for end users.
## The specifications
The specifications can be found below in their entirety. Libraries wishing to implement a spec can copy/paste the code block below into their codebase. They're also available at `@standard-schema/spec` on [npm](https://www.npmjs.com/package/@standard-schema/spec) and [JSR](https://jsr.io/@standard-schema/spec).
```ts
// #########################
// ### Standard Typed ###
// #########################
/** The Standard Typed interface. This is a base type extended by other specs. */
export interface StandardTypedV1 {
/** The Standard properties. */
readonly "~standard": StandardTypedV1.Props;
}
export declare namespace StandardTypedV1 {
/** The Standard Typed properties interface. */
export interface Props {
/** The version number of the standard. */
readonly version: 1;
/** The vendor name of the schema library. */
readonly vendor: string;
/** Inferred types associated with the schema. */
readonly types?: Types | undefined;
}
/** The Standard Typed types interface. */
export interface Types {
/** The input type of the schema. */
readonly input: Input;
/** The output type of the schema. */
readonly output: Output;
}
/** Infers the input type of a Standard Typed. */
export type InferInput = NonNullable<
Schema["~standard"]["types"]
>["input"];
/** Infers the output type of a Standard Typed. */
export type InferOutput = NonNullable<
Schema["~standard"]["types"]
>["output"];
}
// ##########################
// ### Standard Schema ###
// ##########################
/** The Standard Schema interface. */
export interface StandardSchemaV1 {
/** The Standard Schema properties. */
readonly "~standard": StandardSchemaV1.Props;
}
export declare namespace StandardSchemaV1 {
/** The Standard Schema properties interface. */
export interface Props
extends StandardTypedV1.Props {
/** Validates unknown input values. */
readonly validate: (
value: unknown,
options?: StandardSchemaV1.Options | undefined
) => Result