Architecture
A self-hosted instance is a small number of pieces that fit together.
The parts
- Web app: a Next.js application that serves the console, the API, and the editor at
/editor. This is the service you run. - Database: Postgres with the pgvector extension. It stores your data, and also backs AI vector search, so you do not need a separate vector database.
- Object storage: an S3-compatible store for media. The default self-host setup uses MinIO, and you can point it at your own S3 bucket instead.
- Authentication: a session-based auth layer with email and password, and optional Google and GitHub sign-in.
How a request flows
The browser loads the web app. The app reads and writes your data in Postgres, stores and serves media from S3 storage, and calls your AI provider from the server when you use AI. The editor runs in the browser and saves through the same app.
Single codebase
The same codebase powers both the managed service and self-hosting. Configuration decides the difference: on self-host, billing is off, storage is MinIO, and the instance is single-tenant by default. See Configuration.