---
title: Introduction
description: "gorp: A small state-sync primitive for client/server replicas with optimistic updates."
---
Quickstart
Sync state between a client and server in under fifty lines.
Get started →
```ts
const client = new GorpClient<{ count: number }, "inc">({
initialState: { count: 0 },
mutator: (state) => {
state.count += 1;
},
send: (cmd) => transport.send(cmd),
});
client.send("inc");
client.state.count; // 1 (optimistic)
```
## What gorp is
Gorp keeps a client-side replica of server state in sync over a caller-provided
duplex transport. Commands flow up, deep-patch ops flow down, and the client
renders an *optimistic* view that layers pending commands on top of the last
server-confirmed state.
The primitives are small and orthogonal:
- **`GorpClient`** — leaf replica + optimistic mutator + pending queue.
- **`GorpServer`** — authoritative state + command handler + op fan-out.
- **`GorpRelay`** — state mirror that pipes commands upstream and applies
ops downstream. Useful when an edge node sits between client and origin.
- **`GorpSessions`** — wraps a server or relay with a sessioned wire
protocol: per-session dedup, ack flushing, and resume-after-reconnect.
## When to reach for it