--- title: "Self-Hosting Configuration" sidebarTitle: "Configuration" description: "Every environment variable the self-hosted server understands." icon: "settings" --- The self-hosted server aims for **zero configuration** — the only thing it needs is one model provider key, which the first-boot wizard collects interactively (or set it via env var for non-interactive deployments). Everything else below is opt-in, layered on top as you need it. The installer writes API keys to `~/.supermemory/env`, which is loaded on every launch. You can also set variables in your shell or a process manager. ## Core | Variable | Purpose | Default | |---|---|---| | `PORT` (or `SUPERMEMORY_PORT`) | HTTP listen port | `6767` | | `SUPERMEMORY_DATA_DIR` | Where the graph engine's data, auth secret, and model cache live | `./.supermemory` | ## LLM providers In production, Supermemory uses its own proprietary models tuned for long-horizon data understanding. Self-hosted, you bring your own: embeddings are computed locally, and a model of your choice powers the intelligent steps — summaries, contextual chunking, and memory extraction. Configure **at least one**: | Variable | Provider | |---|---| | `OPENAI_API_KEY` | OpenAI — or any OpenAI-compatible endpoint, see below | | `ANTHROPIC_API_KEY` | Anthropic | | `GEMINI_API_KEY` | Google AI Studio (Gemini) | | `GROQ_API_KEY` | Groq | | `WORKERS_AI_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` | Cloudflare Workers AI | | `GOOGLE_VERTEX_PROJECT_ID` + `GOOGLE_VERTEX_LOCATION` | GCP Vertex AI | No key set? The server walks you through it. On first boot, an interactive setup wizard asks which provider you want, securely prompts for the key, and saves it encrypted — including a custom base URL and model name if you pick an OpenAI-compatible endpoint. With multiple providers configured, the first one in the order above is used. Image, video, and high-fidelity PDF understanding require a Gemini or Vertex AI key. Text ingestion, memory extraction, and search work with any provider. ### Fully offline with local models `OPENAI_API_KEY` + `OPENAI_BASE_URL` covers any OpenAI-compatible endpoint: Ollama, LM Studio, vLLM, llama.cpp server, Together, Fireworks, and more. ```bash # Ollama example — gpt-oss-20b works great OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=ollama # any non-empty string for local runners OPENAI_MODEL=gpt-oss:20b ``` | Variable | Purpose | Default | |---|---|---| | `OPENAI_BASE_URL` | OpenAI-compatible endpoint URL | OpenAI | | `OPENAI_MODEL` | Model ID sent to that endpoint | `gpt-5.1` | | `OPENAI_FAST_MODEL` | Override for fast/light tasks | `OPENAI_MODEL` | | `OPENAI_TEXT_MODEL` | Override for heavier text tasks | `OPENAI_MODEL` | ## File storage Nothing to configure. Uploaded files (PDFs, images) are stored on local disk inside `$SUPERMEMORY_DATA_DIR` and served by the server at `/files/:key`. ## Embedding performance Local embeddings are prewarmed at startup with conservative defaults — one worker, minimal CPU footprint. Turn these up if you're ingesting heavily and prefer throughput over headroom: | Variable | Purpose | Default | |---|---|---| | `SUPERMEMORY_LOCAL_EMBEDDING_POOL_SIZE` | Number of embedding workers | `1` | | `SUPERMEMORY_LOCAL_EMBEDDING_WASM_THREADS` | Compute threads per worker | `1` | | `SUPERMEMORY_LOCAL_EMBEDDING_BATCH_SIZE` | Texts per worker dispatch | `8` | | `SUPERMEMORY_LOCAL_EMBEDDING_IDLE_TIMEOUT_MS` | Idle time before workers shut down | `120000` | | `SUPERMEMORY_SKIP_EMBEDDING_PREWARM` | Skip startup prewarm, load on first use | unset | ## Telemetry The self-hosted binary sends no analytics — there is nothing to opt out of. The only related switch: | Variable | Purpose | Default | |---|---|---| | `SUPERMEMORY_DISABLE_TELEMETRY` | Set to `1` to also disable internal AI SDK telemetry instrumentation | unset | ## Platform-only features These exist in the codebase but are exclusive to the [hosted platform](https://console.supermemory.ai) — the self-hosted binary doesn't include them: - **Connectors** — Google Drive, Notion, Gmail, OneDrive background sync - **Supermemory MCP** — managed MCP server endpoints - **Optimized memory extraction** — the platform's extraction pipeline is tuned for higher quality at lower cost than bring-your-own-key - **Managed scale** — globally distributed infrastructure, no capacity planning Any other environment variables you may find referenced in the codebase are platform-only: the self-hosted binary ignores them even when set. ## Example: production-ish `.env` ```dotenv # Persistent data location SUPERMEMORY_DATA_DIR=/var/lib/supermemory # One LLM provider OPENAI_API_KEY=sk-... ``` That's enough for full ingestion, memory extraction, and hybrid search.