Seam is a protocol that separates rendering from runtime. SeamJS is the framework that implements it — stitching together existing tools (Vite, TanStack Query, TanStack Router) where they already work, and building custom pipelines (skeleton extraction, injection engine, CLI) where they don't.
Traditional SSR calls renderToString on every request — your entire component tree is re-evaluated, a virtual DOM is built, and the result is serialized. Even in a pure TypeScript stack, this costs ~100-300ms per page.
SeamJS moves that work to build time:
- Build time —
renderToStringruns once. The output is diffed into an HTML skeleton with typed slot markers - Request time — the server resolves data loaders, then the engine fills slots via AST-based injection (~1ms)
- Client — hydrates the known skeleton and takes over
No component tree at request time. No virtual DOM. No renderToString. The rendering cost becomes negligible — only your data loaders matter.
This is compile-time rendering (CTR). It works with any backend language because the server never imports UI code — it only performs data injection on a pre-built template. Rust, TypeScript, and Go all share the same engine and the same protocol.
| Layer | Details |
|---|---|
| Frontend | React: client bindings, TanStack Router, filesystem router, i18n, TanStack Query, ESLint plugin |
| Backend | Rust (Axum) / TypeScript (Hono, Bun, Node) / Go (Gin, Chi, net/http) — symmetric APIs, same protocol |
| Procedures | query, command, subscription, stream, upload — codegen, namespaces, context, invalidation, JTD |
| Transport | HTTP RPC, batch RPC, SSE, WebSocket channels, stream SSE, multipart upload |
| Rendering | CTR (compile-time), SSR (HTML slot injection), SSG (hybrid modes) |
| CLI | build, generate, dev, pull, clean — virtual modules, loadBuild(), head metadata |
Pick a standalone server example and run it:
# TypeScript (Bun) cd examples/standalone/server-bun && bun run src/index.ts # Rust (Axum) cd examples/standalone/server-rust && cargo run # Go (net/http) cd examples/standalone/server-go && go run .For a fullstack example with React frontend, see the GitHub Dashboard — same UI running on three interchangeable backends.
- GitHub Dashboard — fullstack CTR with Rust, TypeScript, and Go backends
- Markdown Demo — SSR via HTML slot injection with server-side rendering
- i18n Demo — URL-prefix and hidden locale resolution
- shadcn/ui Demo — Tailwind CSS v4 + Radix/shadcn behavior under CTR and hydration
- FS Router Demo — filesystem router with all route types
- Feature Demos — channels, context, streams, queries, and handoff
- Standalone Servers — minimal SDK usage for each language
Architecture — UI Layer / Logic Layer / Transport Layer
Protocol — Slot / Sentinel / Manifest / Subscription / Channel / Skeleton Constraints
Development — Build commands, test matrix, prerequisites
Soild, Svelte and Vue frontends. Tauri and Electron desktop adapters. Serverless deployment mode. Island Mode; See the full roadmap.
The seam protocol is open — any language that serves HTTP can be a backend. PRs for new UI frameworks, backend languages, and transport adapters are welcome.
- Ecosystem — third-party frameworks, backends, and adapters
- Code of Conduct
MIT License © 2026 Canmi