Introduction
A self-hostable, organization-scoped knowledge base built on an end-to-end type-safe TypeScript stack.
Wiki is a multi-tenant knowledge base for teams. Every piece of content lives inside an organization; content is grouped into spaces, and spaces hold a tree of pages. Access is governed server-side and mirrored in the UI, so what a user can see and do is always enforced where it matters.
It is designed to be run by you — a Docker Compose stack you deploy on your own host, with a guided installer, automatic HTTPS, and no managed cloud dependency.
Built for ownership
No seats, no per-user pricing, no lock-in. Wiki is MIT licensed and ships everything you need to operate it yourself.
What you get
Organizations & members
Multi-tenant by default. Every query is scoped to an organization.
Spaces & pages
Group pages into spaces with visibility controls; nest pages into a tree.
Real-time collaboration
Edit together with live cursors, powered by Hocuspocus and Yjs.
Fine-grained access control
Static and dynamic roles at the org level, plus per-space and per-page access.
Full-text search
PostgreSQL tsvector columns with GIN indexes for instant, ranked results.
Type-safe API
One oRPC definition drives both the RPC surface and a generated OpenAPI spec.
Where to start
Self-host it
Clone, run the installer, open the app. The fastest path to a running instance.
Understand the concepts
Organizations, spaces, pages, and how they fit together.
Set up local development
Run the monorepo from a checkout to build and contribute.
Explore the architecture
The boundary between transport, business logic, and clients.
The stack
| Layer | Technology |
|---|---|
| Web client | React 19, TanStack Start & Router, Tailwind CSS 4 |
| Terminal client | OpenTUI + React (preview) |
| HTTP server | Hono |
| API / RPC | oRPC with OpenAPI generation |
| Auth | Better Auth (organization + dynamic access control) |
| Database / ORM | PostgreSQL + Drizzle ORM |
| Real-time | Hocuspocus + Yjs, shared TipTap schema |
| Validation | Zod |
| Tooling | pnpm, Turborepo, Vitest, Oxlint / Oxfmt |
Everything is type-checked from the database schema through to the browser — a change to a data contract surfaces as a compile error, not a runtime surprise.