Odysseus — Self-Hosted AI Workspace (ChatGPT Alternative for Your Own Hardware)
Odysseus — Self-Hosted AI Workspace
A new star appeared on the self-hosted scene last week and rocketed to 23,000+ GitHub stars in days. Odysseus is a full-featured AI workspace that runs entirely on your own hardware — no cloud dependency, no data leaving your network, no subscription fees. Think of it as the self-hosted version of the ChatGPT/Claude UI experience, with more features: chat with any local or API model, autonomous agents, deep research, documents, email/calendar integration, a model cookbook, persistent memory, and skills.
What makes Odysseus special is its all-in-one design. Instead of cobbling together Ollama + Open WebUI + LangFlow + a calendar app + an email client + a note-taking tool, you get everything under one roof with a single docker compose up. It's ambitious, it's early, and it's already stunningly functional.
Why Is Odysseus Trending?
- 23,000+ stars in 2 days — one of the fastest-growing self-hosted projects of 2026
- Complete ChatGPT replacement — chat, agents, deep research, documents, email, calendar, notes, all local-first
- Privacy-first — no data leaves your machine unless you explicitly connect external APIs
- Works on mobile — responsive PWA with touch gestures
- Easy to install — single
docker compose up -dwith sensible defaults - MIT license — free to use, modify, and share
Architecture Overview
Odysseus is built as a modular monolith running inside a Docker Compose stack. The core is a Python FastAPI server that serves a responsive SPA frontend. Around it, bundled sidecar services handle vector storage (ChromaDB), web search (SearXNG), and notifications (ntfy). The architecture is designed so every component can be swapped or pointed at external services.
Core Components
- FastAPI App (
app.py) — the central HTTP server, routing, and business logic - Frontend (
static/) — a single-page application served by the FastAPI app itself. Modular JS modules for Chat, Agent, Cookbook, Documents, Email, Calendar, Notes, Settings, and Compare - LLM Core (
src/llm_core) — abstraction layer over any OpenAI-compatible endpoint: vLLM, Ollama, llama.cpp, OpenRouter, or commercial APIs - Agent Loop (
src/agent_loop) — built on top of opencode, with MCP tools, shell access, file operations, memory retrieval, and web search - Cookbook (
services/hwfit) — VRAM-aware model recommender. Scans your hardware, suggests compatible models, downloads GGUF/FP8/AWQ files, and serves them via vLLM or llama.cpp - Memory (
services/memory) — persistent memory using ChromaDB + keyword retrieval (fastembed ONNX), supporting vector + keyword hybrid search, with import/export - Email (
services/email) — IMAP/SMTP inbox with AI triage: auto-summary, urgency detection, auto-reply drafts, spam filtering - Calendar (
services/calendar) — CalDAV sync (Radicale, Nextcloud, Apple, Fastmail), .ics import/export, agent-aware - Search (
services/search) — configurable SearXNG instance or any other search backend - Auth (
core/auth) — built-in authentication with admin/non-admin roles, 2FA, session management, API tokens
Sidecar Services (Docker Compose)
| Service | Port | Role |
|---|---|---|
| ChromaDB | 8100 | Vector database for memory/skills |
| SearXNG | 8080 | Privacy-respecting meta search |
| ntfy | 8091 | Push notifications (desktop + mobile) |
Data Flow
When a user sends a message in the Chat UI:
- The frontend sends the message to the FastAPI
/chatendpoint - The chat processor (
src/chat_processor) builds the prompt context: conversation history + relevant memory chunks from ChromaDB - The LLM Core forwards the request to the configured model endpoint (local or API)
- The generated response streams back to the frontend via Server-Sent Events
- The conversation is stored in SQLite (
data/app.db) - Memory vectors are optionally updated in ChromaDB
For Agent tasks, the flow extends:
- The agent loop receives a user goal
- It retrieves relevant skills and memory
- The agent plans steps using the LLM and executes them using available tools (web search via SearXNG, file read/write, shell commands, MCP tools)
- Results accumulate into the agent's context until the task completes
Prerequisites
- A machine with at least 4GB RAM (8GB+ recommended, 16GB+ if running local models)
- Docker and Docker Compose (v2.17+)
- For GPU acceleration: NVIDIA GPU with
nvidia-container-toolkitinstalled - For local models: 16GB+ RAM or VRAM (the Cookbook downloads models automatically)
- Python 3.11+ (if running natively instead of Docker)
- Git
Installation
Docker (Recommended)
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
cp .env.example .env # optional — defaults work out of the box
docker compose up -d --build
Wait for the containers to become healthy, then open http://localhost:7000.
On first boot, Odysseus creates the admin account and prints a temporary password in the container logs. Grab it:
docker compose logs odysseus | grep -i "password"
Use that password to log in, then change it in Settings.
Native Installation (Linux/macOS)
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python setup.py
python -m uvicorn app:app --host 127.0.0.1 --port 7000
For macOS with Apple Silicon (GPU support):
./start-macos.sh
This launches on http://127.0.0.1:7860 (port 7000 is often taken by AirPlay).
Windows
git clone https://github.com/pewdiepie-archdaemon/odysseus.git
cd odysseus
powershell -ExecutionPolicy Bypass -File .\launch-windows.ps1
Configuration
Most configuration happens inside the app under Settings. The .env file is only for deployment-level overrides:
| Variable | Default | Description |
|---|---|---|
APP_PORT |
7000 |
Web UI host port |
APP_BIND |
127.0.0.1 |
Bind address (use 0.0.0.0 for LAN/proxy) |
AUTH_ENABLED |
true |
Enable authentication |
DATABASE_URL |
sqlite:///./data/app.db |
Database connection string |
SEARXNG_INSTANCE |
http://localhost:8080 |
Web search backend URL |
CHROMADB_HOST |
localhost |
Vector database host |
OPENAI_API_KEY |
— | Optional API key for OpenAI providers |
Adding Models
Go to Settings → Providers and add an OpenAI-compatible endpoint:
- Local (Ollama):
http://host.docker.internal:11434/v1 - Local (vLLM):
http://host.docker.internal:8000/v1 - Cloud (OpenRouter): Add your API key and select models
Or use the Cookbook tab to auto-detect your hardware, get model recommendations, download, and serve models with one click.
Key Features in Detail
💬 Chat & Compare
Chat with any model — local or API — in a familiar ChatGPT-style interface. The Compare feature lets you pit two models side by side in a blind test, showing results without revealing which model produced which output. Great for model evaluation.
🤖 Agent System
The agent uses opencode under the hood with MCP tools, shell access, file operations, web search, and memory. You can define reusable skills that the agent learns over time. It's more capable than a simple chat — it can browse the web, read and write files, execute shell commands, and run multi-step research workflows.
🔬 Deep Research
Multi-step research runs that gather, read, and synthesize sources into a clean visual report. Adapted from Alibaba's DeepResearch, it searches the web, extracts content from pages, summarizes findings, and builds a structured report — all autonomously.
📚 Cookbook — Model Manager
The Cookbook is one of Odysseus's standout features:
- Hardware scan — detects your GPU, VRAM, and system RAM
- Model recommendations — suggests compatible models (GGUF, FP8, AWQ) with a "fit score"
- One-click download — downloads models directly from Hugging Face
- Auto-serve — launches vLLM or llama.cpp to serve the downloaded model
- Remote servers — can install and serve models on remote machines via SSH
📧 Email & Calendar
- Email: Connect any IMAP/SMTP account. AI triage auto-tags, summarizes, drafts replies, detects urgency, and filters spam. CalDAV-aware for meeting scheduling.
- Calendar: Local-first calendar with CalDAV sync (Radicale, Nextcloud, Apple, Fastmail). Import/export
.icsfiles. Agent-aware — the agent can check your calendar when planning tasks.
🧠 Memory & Skills
- Persistent memory: Everything you discuss contributes to a vector + keyword memory store (ChromaDB + fastembed ONNX)
- Skills: Define reusable skill packages — instructions + tools that the agent can invoke
- Import/export: Share skills and memory across instances
Verification Checklist
After installation, verify everything works:
- Login works —
http://localhost:7000shows the login page - Admin setup complete — temporary password retrieved from logs, changed in Settings
- Chat works — send a message to the default model provider
- Settings accessible — can navigate to Settings → Providers
- Cookbook loads — hardware detection screen appears in the Cookbook tab
- Memory active — check Settings → System for ChromaDB status (should not show "DEGRADED")
- Web search configured — SearXNG is reachable (default :8080) or you've added an alternative
- Docker containers healthy —
docker compose psshows all services asUp
Production Deployment
For a production setup:
- Put Odysseus behind a reverse proxy (Caddy, nginx, Traefik) with HTTPS
- Keep
AUTH_ENABLED=trueandSECURE_COOKIES=true - Never bind to
0.0.0.0without HTTPS and a proxy - Consider using Cloudflare Access or Tailscale for private access
- Review
data/auth.jsonafter first boot — disable open signup
Resources
- GitHub: github.com/pewdiepie-archdaemon/odysseus
- License: MIT
- Dependencies: opencode, llmfit, Tongyi DeepResearch, ChromaDB, SearXNG
- Related: Open WebUI (alternative self-hosted chat interface)