Run OpenMind on your own server
OpenMind runs on your own hardware, from a laptop to a GPU server for a team. Pair it with a local model of your choice through Ollama or LM Studio, and your conversations, documents and graph never leave your network. The same code that runs the hosted demo ships as a docker-compose stack: five steps from clone to a working instance. The repository is private for now: request an invite, say you want to self-host, and access is granted by hand.
- Step 1.
Clone the repo
Once you have access, clone the repository and `cd` into it. Everything downstream lives at the repo root — no need to dig into subdirectories unless you're modifying code.
- Step 2.
Set environment variables
Copy `.env.example` to `.env`, then append the generated secrets with `./scripts/generate-supabase-keys.sh >> .env` — compose refuses to boot without them. The defaults are local: chat, extraction and embeddings go to Ollama on the same machine (step 5). For a cloud model instead, set `LLM_DEFAULT_PROVIDER=anthropic` with `ANTHROPIC_API_KEY` (or `openai` with `OPENAI_API_KEY`), and switch the embeddings with `EMBEDDING_PROVIDER=none`, or `openai` with that key.
- Step 3.
Boot the stack
`docker compose up -d --build`. First boot pulls the Supabase images, builds the OpenMind images from source and applies migrations against the bundled Postgres — 5–10 minutes. The web app shows up at http://localhost:3000.
- Step 4.
Sign in
Self-service sign-up is off by default, so create your first account inside the running stack: `docker compose exec api python -m mindmap_api.bootstrap_user --email you@example.com --password-prompt`. It asks for a password twice (at least 12 characters). Then open http://localhost:3000/login, which opens on the password form, and sign in with that email and password (`/login?password=1` offers it even when `PASSWORD_LOGIN_ENABLED` is off). This needs no mail server; the `GOTRUE_SMTP_*` values in `.env` are only for sign-in by a code or link sent by mail.
- Step 5.
Pull the local models
Install Ollama on the same host and pull the two models the stack uses by default: `ollama pull qwen3.5:9b` for chat and extraction, `ollama pull nomic-embed-text` for embeddings. No model call leaves the machine. Another Ollama model: pull it and set `OLLAMA_DEFAULT_MODEL` to its name. On a Linux host, Ollama must also listen on the docker0 address, where the containers reach the host: docs/self-hosting.md, "Ollama on a Linux host", shows how. LM Studio: set `LLM_DEFAULT_PROVIDER=lm_studio`; it answers with the model it has loaded. Run `docker compose up -d` after changing `.env`. If Ollama does not answer, a chat message says your LLM provider did not answer; if it has not pulled the model, the message says to pull it.
Full operator depth — every env var, every compose profile, every gotcha — lives in the contributor guide at docs/self-hosting.md (in the repo). This page is the elevator pitch; the docs are the manual.