Integrations

Standard Schema

ArkType is proud to support and co-author the new Standard Schema API with Valibot and Zod.

Standard Schema allows you and your dependencies to integrate library-agnostic validation logic. If you're building or maintaining a library with a peer dependency on ArkType and/or other validation libraries, we'd recommend consuming it through Standard Schema's API if possible so that your users can choose the solution that best suits their needs!

tRPC

ArkType can easily be used with tRPC:

// trpc >= 11 accepts a Type directly
t.procedure.input(
	({
		name: "string",
		"age?": "number"
	})
)

// tRPC < 11 accepts the `.assert` prop
t.procedure.input(
	({
		name: "string",
		"age?": "number"
	}).assert
)

drizzle

Drizzle maintains an official drizzle-arktype package that can be used to create Types for your Drizzle schemas.

import { pgTable, text, integer } from "drizzle-orm/pg-core"
import { createSelectSchema } from "drizzle-arktype"

const  = pgTable("users", {
	id: integer().generatedAlwaysAsIdentity().primaryKey(),
	name: text().notNull(),
	age: integer().notNull()
})

// Type<{ id: number; name: string; age: number }>
const  = createSelectSchema()

react-hook-form

react-hook-form has built-in support for ArkType via @hookform/resolvers:

import { useForm } from "react-hook-form"
import { arktypeResolver } from "@hookform/resolvers/arktype"
import { type } from "arktype"

const  = type({
	firstName: "string",
	age: "number.integer > 0"
})

// in your component
const {
	,
	,
	formState: {  }
} = useForm({
	resolver: arktypeResolver()
})

For a custom controlled input, you can pass the inferred type into the hook itself:

useForm<typeof User.infer>(/*...*/)

hono

Hono has built-in support for ArkType via @hono/arktype-validator:

const  = ({
	name: "string",
	age: "number"
})

app.post("/author", arktypeValidator("json", user), c => {
	const  = c.req.valid("json")
	return c.json({
		success: true,
		message: `${.name} is ${.age}`
	})
})

hono-openapi also offers experimental support for OpenAPI docgen.

oRPC

oRPC has built-in support for Standard Schema, so ArkType works seamlessly right out of the box:

os.input(
	({
		name: "string",
		"age?": "number"
	})
)

On this page