Every line of the code that runs chathermes.com is in a public repository. 6,683 lines of TypeScript. 17 narration MP3s. 14 real tools. One SQLite file. No black box. Bring your own keys, your own server, your own brand.
I'm shipping ChatHermes from Jakarta with my co-builder @supercryptolord — yes, that @kwkuh is me — competing with companies that have 100x more engineers. The only way we win is if you can read the code.
Closed source costs us trust we can't afford. Open source costs us nothing — the moat isn't the code, it's the operational cost of running it well at scale: pre-pooled LLM keys, verified email domain, Hetzner pool, monitoring, backups. That's what running it well costs to operate.
If you'd rather run it yourself: clone the repo, point it at your own keys, ship. We genuinely want you to. And if you build something cool with it, we'll link to you.
The license has teeth — see below — because we want adoption AND sustainability. The same playbook as Plausible, Discourse, Mautic. It works.
Every feature on chathermes.com works under self-host. The only thing different is whose keys, whose servers, whose backups.
Real APIs, no mockups. web_search (5-tier fallback), browse, github_repo, weather, news_search, wikipedia, save/recall_memory, telegram_send, run_js, fetch_url, generate_image (Replicate Flux), analyze_image (Gemini/GPT-4o), dispatch_subagent.
Free users share a Bun OpenAI-compatible proxy on :19002. Paid users auto-provision dedicated Hetzner Cloud servers via cloud-init. Gated by default — admin clicks Provision per upgrade.
Type "build me a landing page for X". Code streams left, preview renders right. Multi-file fullstack. Publish to /p/<slug>. Per-plan project quotas.
17-chapter video-style walkthrough. edge-tts narration MP3s (en-GB-RyanNeural, free). Procedural Web Audio backsound (Cm7 pad + 75 BPM sub-pulse + FM bell pings). Self-record to WebM.
Hero ("You're sharing. Your agent shouldn't be."), 3-card pricing with Pro emphasized, comparison table, FAQ, trust bar, invoice PDF download, Stripe Checkout + Customer Portal.
Bottom tab bar (Chat / Build / Memory / Plan / More) + bottom-sheet drawer for secondary nav. Thumb-zone composer. Safe-area inset support.
Runtime guard refuses to start the orchestrator if _attribution.ts is tampered. X-Powered-By header on every response. Floating badge on /p/<slug> public previews.
Installable mobile-first web app. Public /status page with real-time service health. Global search across messages, memory, projects.
The path we recommend. One command, works on macOS / Linux / Windows / WSL. Single SQLite file persists in ./data/.
git clone https://github.com/ai-co-id/chathermes.git cd chathermes ./bin/setup.sh # interactive .env wizard (60s) docker compose up -d # → open http://localhost:7000
If you already have a Hetzner Cloud token. Cloud-init bootstraps Bun + Docker + clones repo + writes .env + runs docker compose up. Server size and region are your choice.
curl -X POST https://your-self-host.com/api/deploy/hetzner \
-H "Content-Type: application/json" \
-d '{
"token": "hcloud_...",
"server_type": "cx22",
"location": "nbg1",
"llm_keys": { "nous": "..." }
}'
# Returns: { ok: true, ip, url, ssh_command }
# Total: ~90 seconds to a fresh Hetzner Cloud server with HTTPS.No Docker. Requires Bun ≥ 1.3 + Node ≥ 22 (for Next.js). Use this for fastest iteration in development.
# Orchestrator cd orchestrator bun install bun run src/index.ts & # Web (in another terminal) cd web bun install bun run build PORT=7000 ORCH_URL=http://127.0.0.1:7010 bun run start
PUBLIC_BASE_URL=http://localhost:7000 SESSION_SECRET=$(openssl rand -hex 32) NOUS_API_KEY=hf_... # OR KIMI_API_KEY, OR ANTHROPIC_API_KEY, etc. Pick one.
orchestrator/.env.example for all 30+ vars documented.The code is identical. What changes is the operations.
The runtime guard in orchestrator/src/_attribution.ts checks that all required attribution constants are present at startup. If tampered, the orchestrator refuses to start.
The X-Powered-By header is set in middleware on everyHTTP response. The /p/<slug> public preview includes a floating "Made with ChatHermes" badge that's compiled into the served HTML. These aren't suggestions. They're the license.
Read full LICENSE.mdWe ship a verify script. Run it after cloning to confirm the bundle is clean: zero credentials, zero PII, attribution intact.
== verify-bundle == -- attribution layer -- + _attribution.ts present + runtime guard present -- credential scan (strict, real-key shape) -- + zero real credentials matched -- email/PII scan -- + no team emails leaked -- IP scan -- + no production IPs leaked -- env hygiene -- + no real .env shipped + .env.example present + no production database shipped ALL CHECKS PASSED

6,683 lines of TypeScript waiting for you on GitHub. v1.0.0 tagged. Verify-bundle passes. Nothing held back.