Self-hosting
Your instance, your data, your rules
Todo is built to run on your own infrastructure. A single PostgreSQL database (with pgvector), a stateless API, and a container-native deployment.
Get started in three commands
Copy the environment template
Generate a local TLS certificate
Bring up the full stack
Three containers come up: the database, the API (REST + MCP) and the web (nginx). The app is available at https://todo.mindlog.localhost.
A clean monorepo architecture
Three TypeScript packages, a sharp separation of concerns.
@mindlog/core
The shared domain: Zod schemas, services, repositories, embeddings, RAG and authentication.
@mindlog/server
Express 5 REST API + MCP server + OpenAPI. Migrations run on startup.
@mindlog/web
React 19 + Vite SPA, a pure REST client, served by nginx. No business logic.
Built for data ownership
Solid auth
Argon2-hashed passwords, short-lived JWTs + rotating refresh tokens, optional Google OAuth.
REST API + OpenAPI
A documented canonical interface, Swagger UI served at /docs.
JSON export
Download all of your data whenever you want. No lock-in.
On your server
Docker deployment, in-container TLS, GitHub Actions CI/CD to your host.
Host Todo in minutes
Docker Compose, PostgreSQL + pgvector, automatic migrations. Everything you need is in the repo.