Self-hosted AI workspace with agents, skills, and tools (Gmail, Calendar) that runs entirely on your own provider API keys (BYOK). Bring your own keys — Groq, OpenRouter, NVIDIA, Hugging Face, Google AI.
20
stars
0
commits
TypeScript
primary language
Sep 8, 2026
updated
When you send a message, the request goes from your browser through ENZO to the provider you picked, and you pay that provider their normal price. Nothing sits in between taking a cut.
A self-hostable, bring-your-own-key AI workspace — chat with 300+ models, research, code-gen with live preview, and a local agent with durable memory. All keys stay in your browser, encrypted; this server stores none of them.
docker compose up -d
# → http://localhost:5001
That's the whole install. No accounts, no mandatory env, no database server.
Try it hosted first: https://enzo-hub.duckdns.org — the same app, running on our infrastructure. This repo is exactly that code, minus Google sign-in (self-hosted login is just your provider keys) with a trimmed default theme set for a small download.
# requires docker (or docker compose v2)
git clone https://github.com/theguysudo/ENZO.git
cd enzo
docker compose up -d
Open http://localhost:5001, press Login, and pick any provider:
| Provider | What you need | Free tier |
|---|---|---|
| OpenRouter | API key | many free models |
| Google AI Studio | API key | generous free tier |
| NVIDIA NIM | API key | free credits |
| Groq, HuggingFace, Cloudflare, Gemini | API key / OAuth | varies |
Keys are saved encrypted in your browser (passphrase-protected vault, with a recovery file you can download). The server never sees them — requests are relayed with your key attached, and you can wipe them anytime from the Vault.
latest / lite | full | |
|---|---|---|
| Homepage background | Nebula drift — animated WebGL | + 8 anime video themes |
| Workspace/terminal background | Default Particles — animated three.js | + 9 cinematic video themes |
| Image download | ~150 MB | ~470 MB |
Both animate by default — the lite themes are GPU shaders, not static images. To get every theme:
ENZO_IMAGE=ghcr.io/theguysudo/enzo:full docker compose up -d
Everything you make lives in Docker named volumes, safe across upgrades:
enzo-projects — generated coding projectsenzo-skills — skills the agent learned from GitHub reposenzo-memory — the agent's durable notes about your workYour provider keys are not in the volumes — they're browser-side (encrypted at rest with your passphrase).
Everything works with zero environment variables. A few features want server-side values — put them in a .env next to docker-compose.yml:
# Extra origins allowed to call the API (comma-separated)
ENZO_CORS_ORIGINS=https://enzo.example.com
# "Connect with Cloudflare" OAuth button (optional — pasting a token works too)
CLOUDFLARE_OAUTH_CLIENT_ID=...
CLOUDFLARE_OAUTH_CLIENT_SECRET=...
# HuggingFace OAuth app for the HF onboarding step (optional — token paste works)
VITE_HF_CLIENT_ID=...
HF_CLIENT_SECRET=...
VITE_HF_CLIENT_IDonly takes effect when building the image from source (it's baked into the frontend at build time).
docker build -t enzo:mine --build-arg THEME_VARIANT=full .
This image is generated from the same codebase that runs https://enzo-hub.duckdns.org, with exactly two feature differences:
full image has the complete set.Apache-2.0 — see LICENSE.
Hacker News (2)
TypeScript
94.4%
CSS
2.5%
Shell
1.6%
Self-hosted AI workspace with agents, skills, and tools (Gmail, Calendar) that runs entirely on your own provider API keys (BYOK). Bring your own keys — Groq, OpenRouter, NVIDIA, Hugging Face, Google AI.
20
stars
0
commits
TypeScript
primary language
Sep 8, 2026
updated
When you send a message, the request goes from your browser through ENZO to the provider you picked, and you pay that provider their normal price. Nothing sits in between taking a cut.
A self-hostable, bring-your-own-key AI workspace — chat with 300+ models, research, code-gen with live preview, and a local agent with durable memory. All keys stay in your browser, encrypted; this server stores none of them.
docker compose up -d
# → http://localhost:5001
That's the whole install. No accounts, no mandatory env, no database server.
Try it hosted first: https://enzo-hub.duckdns.org — the same app, running on our infrastructure. This repo is exactly that code, minus Google sign-in (self-hosted login is just your provider keys) with a trimmed default theme set for a small download.
# requires docker (or docker compose v2)
git clone https://github.com/theguysudo/ENZO.git
cd enzo
docker compose up -d
Open http://localhost:5001, press Login, and pick any provider:
| Provider | What you need | Free tier |
|---|---|---|
| OpenRouter | API key | many free models |
| Google AI Studio | API key | generous free tier |
| NVIDIA NIM | API key | free credits |
| Groq, HuggingFace, Cloudflare, Gemini | API key / OAuth | varies |
Keys are saved encrypted in your browser (passphrase-protected vault, with a recovery file you can download). The server never sees them — requests are relayed with your key attached, and you can wipe them anytime from the Vault.
latest / lite | full | |
|---|---|---|
| Homepage background | Nebula drift — animated WebGL | + 8 anime video themes |
| Workspace/terminal background | Default Particles — animated three.js | + 9 cinematic video themes |
| Image download | ~150 MB | ~470 MB |
Both animate by default — the lite themes are GPU shaders, not static images. To get every theme:
ENZO_IMAGE=ghcr.io/theguysudo/enzo:full docker compose up -d
Everything you make lives in Docker named volumes, safe across upgrades:
enzo-projects — generated coding projectsenzo-skills — skills the agent learned from GitHub reposenzo-memory — the agent's durable notes about your workYour provider keys are not in the volumes — they're browser-side (encrypted at rest with your passphrase).
Everything works with zero environment variables. A few features want server-side values — put them in a .env next to docker-compose.yml:
# Extra origins allowed to call the API (comma-separated)
ENZO_CORS_ORIGINS=https://enzo.example.com
# "Connect with Cloudflare" OAuth button (optional — pasting a token works too)
CLOUDFLARE_OAUTH_CLIENT_ID=...
CLOUDFLARE_OAUTH_CLIENT_SECRET=...
# HuggingFace OAuth app for the HF onboarding step (optional — token paste works)
VITE_HF_CLIENT_ID=...
HF_CLIENT_SECRET=...
VITE_HF_CLIENT_IDonly takes effect when building the image from source (it's baked into the frontend at build time).
docker build -t enzo:mine --build-arg THEME_VARIANT=full .
This image is generated from the same codebase that runs https://enzo-hub.duckdns.org, with exactly two feature differences:
full image has the complete set.Apache-2.0 — see LICENSE.
Hacker News (2)
TypeScript
94.4%
CSS
2.5%
Shell
1.6%