---
name: standard-schema
description: Standard Schema v1 for socka contracts and wire validation—Zod, Valibot, or any compatible library; no Zod-only public surface.
---

# Socka: Standard Schema wire validation

## When to use

You define **call** `input` and optional **`output`** (and optional **push** payloads) for **`@firtoz/socka/core`**, **`@firtoz/socka/client`**, **`@firtoz/socka/react`**, and **`@firtoz/socka/do`**. Omit **`output`** only for intentional fire-and-forget success semantics; **`output`** slots that are present use **`StandardSchemaV1`** from **`@standard-schema/spec`** so callers can use **Zod**, **Valibot**, **ArkType**, etc., without socka-specific adapters.

## Rules

- Pass **`StandardSchemaV1`** instances into **`defineSocka`** call/push definitions. **`SockaWebSocketClient`**, **`SockaSession`**, **`useSocka`**, **`useSockaSession`**, **`SockaSessionProvider`**, and **`SockaDoSession`** all consume the resulting **`SockaContract`**—not raw library types on socka’s public API.
- **Zod v4** and **Valibot** expose Standard Schema natively; you typically pass schemas **directly** into **`defineSocka`** (no `fromZod` / `fromValibot` helpers required—see package README).
- For correlated RPC, use **`defineSocka`** + **`useSockaSession`** / **`SockaSession`** / **`SockaDoSession`**.
- For **your own** discriminated unions in domain types, use **`exhaustiveGuard`** from **`@firtoz/maybe-error`** in **`switch`** defaults so new variants fail at compile time.

## Tiers

- **Typical**: **`defineSocka`** → **`SockaSession`** or **`useSockaSession`** (or **`SockaSessionProvider`** + **`useSockaSessionContext`**) on the client; **`SockaDoSession`** with the same contract on the DO.
- **Lower level**: **`SockaWebSocketClient`** with callbacks, or **`@firtoz/socka/core`** encode/decode helpers if you implement custom glue.

## Do not

- Re-export symbols from **`@firtoz/websocket-do`** through socka; import transport primitives from **websocket-do** directly when needed.
