ai-assistants
ChatGPT logo

Should I self-host ChatGPT?

NOT REALLYkeep paying

LibreChat self-hosts the chat window, not the intelligence. You'll bring API keys (still paying, now per-token) or a GPU whose electricity bill reads like a subscription. The model was the product all along.

The math (nothing hidden, including your time)

ChatGPT (Go)$8.00/mo
VPS share + storage−$1.00/mo
Your maintenance: 20 min/mo at $20/h−$6.67/mo
Net saving$0.33/mo
Setup: 50 min measured (one-time)$16.67
Break-even50.0 months
Markup Index (price ÷ real self-host cost)1.0×

Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • The frontier model itself — local models on consumer hardware are years behind what the subscription buys
  • Voice, image generation, and memory unless you wire up (and pay for) each provider separately
  • Predictable pricing: API metering can beat $8/mo for light use, or wildly exceed it

What you're paying ChatGPT for

  • frontier-model answers
  • image generation
  • voice conversations
  • memory & custom instructions
  • chat UI with history
LibreChat running from the boot-verified compose file
LibreChat, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

One chat window in front of Anthropic, OpenAI and Google, with the conversation history in a database you own.

danny-avila/LibreChat · ★ 41,899 · last commit 0d ago · MIT

Hardware

Runs comfortably on the old laptop in your closet.

The tested compose file (our evidence, CI-booted)

# LibreChat — self-hosted chat UI (tested against ChatGPT's job list; see the verdict for
# why the UI was never the thing you were paying for)
# Note: without provider API keys this boots and serves, but answers require either paid API
# keys (you're still paying, per-token) or a local model server + GPU. That IS the verdict.
services:
  librechat:
    image: ghcr.io/danny-avila/librechat:latest
    container_name: librechat
    restart: unless-stopped
    depends_on:
      mongodb:
        condition: service_healthy
    environment:
      HOST: 0.0.0.0
      PORT: "3080"
      MONGO_URI: mongodb://mongodb:27017/LibreChat
      CREDS_KEY: f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0
      CREDS_IV: e2341419ec3dd3d19b13a1a87fafcbfb
      JWT_SECRET: 16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef
      JWT_REFRESH_SECRET: eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418
    ports:
      - "3080:3080"
    healthcheck:
      test: ["CMD-SHELL", "node -e \"fetch('http://localhost:3080/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""]
      interval: 5s
      timeout: 5s
      retries: 36
      start_period: 30s

  mongodb:
    image: mongo:7
    restart: unless-stopped
    command: mongod --noauth
    volumes:
      - librechat-mongo:/data/db
    healthcheck:
      test: ["CMD-SHELL", "mongosh --quiet --eval 'db.runCommand({ping:1}).ok' | grep 1"]
      interval: 5s
      timeout: 5s
      retries: 24
      start_period: 15s

volumes:
  librechat-mongo:

Want a guided install instead? caniselfhostit.com/chatgpt has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 50 min · AI assistant: claude-code (allowed & stated)

What broke

  • Images are ghcr.io-hosted — Docker-Hub-only mirrors can't pull them; this pair's compose boot is verified by the CI runner
  • Boots healthy with zero API keys configured — which demonstrates the verdict: a working chat UI with nothing to talk to
Full timed log
# Timed setup log: ChatGPT → LibreChat

**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10
**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1

## Timeline

| Step | Time |
|---|---|
| Read config docs, draft compose (app + mongo, JWT/CREDS secrets) | 20 min |
| Boot attempt in our verification environment: **blocked — ghcr.io unreachable** (see What broke) | 5 min |
| Compose boot + health verified by the CI runner instead (`compose-check` workflow) | — |
| Workflow review against docs: registration, provider key config, endpoint selection | 15 min |
| **Total: ~50 min** | |

## Measurements

- Verification environment could not pull ghcr.io images; **boot-to-healthy for this pair is
  certified by CI** (same `scripts/check-compose.sh` gate, per-PR and weekly).
- 2 containers (app + mongo); ~700 MB RAM together before any local model enters the picture.

## What broke

1. **ghcr.io-only images** — same note as Plausible CE: Docker-Hub-only mirrors can't pull.
2. **It boots healthy with zero API keys configured** — which is the verdict in one sentence:
   you get a working chat UI with nothing to talk to. Every answer still requires either a
   provider API key (you're paying per-token again) or a local model server plus hardware
   that can feed it.

## Verdict-relevant notes

- For heavy API users with existing keys, LibreChat is genuinely good — multi-provider, clean
  UI, your history in your Mongo. That's the KINDA hiding inside the NOT REALLY.
- For replacing a normal ChatGPT subscription: the model is the product; the UI was never
  what the money bought.

Verdict history

  • 2026-08-10: unscored → NOT_REALLY — Initial verdict: you'd self-host the wrapper; the model is the product.