# Client SDKs

This guide covers how to build clients for the quicprochat E2E encrypted messenger
using the official SDKs or by implementing a new one.

## Official SDKs

| Language | Location | Transport | Status |
|----------|----------|-----------|--------|
| **Rust** | `crates/quicprochat-client` | QUIC + Protobuf (v2) | Production |
| **Go** | `sdks/go/` | QUIC + Protobuf (v2) | Production |
| **TypeScript** | `sdks/typescript/` | WebSocket bridge + WASM crypto | Production |
| **Python** | `sdks/python/` | QUIC + Protobuf (v2) / Rust FFI | Production |
| **C** | `crates/quicprochat-ffi/` | Rust FFI (synchronous) | Production |
| **Swift** | `sdks/swift/` | C FFI wrapper | In progress |
| **Kotlin** | `sdks/kotlin/` | JNI + C FFI | In progress |
| **Java** | `sdks/java/` | JNI + C FFI | In progress |
| **Ruby** | `sdks/ruby/` | FFI gem | In progress |

## Architecture Overview

```
  Client SDK                     Server
  ----------                     ------
  +------------+   QUIC/TLS 1.3   +------------+
  | App code   | <--------------> | RPC        |
  |            |   v2 wire frames  | dispatch   |
  | SDK API    |                   |            |
  |            |   [method_id:u16] | handlers   |
  | Proto      |   [req_id:u32]    |            |
  | encode/    |   [len:u32]       | storage    |
  | decode     |   [protobuf]      |            |
  |            |                   |            |
  | QUIC       |                   | QUIC       |
  | transport  |                   | listener   |
  +------------+                   +------------+
```

Each RPC call opens a new QUIC bidirectional stream. The request and response
use the same 10-byte framing header followed by a protobuf payload.

## Quick Start

1. Choose an SDK for your language (see table above).
2. Connect to the server over QUIC (or WebSocket bridge for browsers).
3. Authenticate with OPAQUE (register or login).
4. Upload MLS key packages for E2E encryption.
5. Send and receive encrypted messages.

## Canonical Schemas

- **Protobuf** (v2): `proto/qpc/v1/*.proto` -- 14 service definitions

The protobuf schemas in `proto/qpc/v1/` are the canonical API contract for
the v2 protocol. New SDKs should implement against these definitions.

## Documentation

- [Wire Format Reference](wire-format.md) -- v2 QUIC + Protobuf framing and method IDs
- [Rust SDK](rust.md) -- native Rust client using `quicprochat-sdk`
- [Go SDK](../getting-started/go-sdk.md) -- Go client with QUIC transport
- [TypeScript SDK](../getting-started/typescript-sdk.md) -- browser and Node.js client
- [C FFI Bindings](../getting-started/ffi.md) -- C bindings for language integrations
- [WASM Integration](../getting-started/wasm.md) -- WASM crypto for browser clients
