ChatForge
ChatForge is a full-stack AI chat application with a Next.js 15 frontend and a Node.js backend. It works as an OpenAI-compatible API proxy and adds server-side tool orchestration, conversation forking, model comparison with a judge, Playwright-powered browsing, and a desktop app.
OpenWebUI and LibreChat are good options. ChatForge covers a few things they don’t.
Compared with OpenWebUI and LibreChat
| Feature | ChatForge | OpenWebUI | LibreChat |
|---|---|---|---|
| Architecture | Node.js + SQLite (single binary) | Python + larger stack | Node.js + MongoDB |
| Browser Automation | ✅ Playwright with SPA support | ❌ Basic fetch | ❌ Basic fetch |
| Model Comparison | ✅ Side-by-side with judge | ❌ | ❌ |
| Conversation Forking | ✅ Fork at any message | ❌ | ❌ |
| Cross-Conv Memory | ✅ Built-in Journal tool | ❌ | ❌ |
| Prompt Caching | ✅ Automatic cache breakpoints | ❌ | ❌ |
| Desktop App | ✅ Electron with auto-login | ❌ | ❌ |
| Checkpoint Persistence | ✅ Resume aborted streams | ❌ | ❌ |
Features
- Judge models: Compare models side-by-side, each with its own isolated conversation history, and have a configurable judge model score the answers and explain why.
- Playwright web fetch: Pages load in a real browser, with dedicated extractors for Reddit, Stack Overflow, and SPAs that block plain HTTP crawlers.
- Conversation forking: Branch from any message without losing the original thread.
- Journal tool: The model can store notes and read them back in later conversations.
- Prompt caching: Cache breakpoints are inserted automatically (mainly for Anthropic models) to cut token cost and latency.
- Checkpointed streaming: Stop a response at any point; the state is saved so you can resume or branch from there.
- Desktop app: Cross-platform Electron build with auto-login and native packaging.
- One-container deploy: A single Docker image with SQLite. No external database.
- Server-side tool orchestration: Iterative and parallel tool calls, thinking support, and error handling.
- Streaming over SSE: Tool execution is visible as it happens, and streams can be aborted.
- Persistence: SQLite storage with retention cleanup and migrations.
- Providers: OpenAI, Anthropic, and Gemini behind one OpenAI-compatible interface.
- UI: React 19 with markdown, syntax highlighting, code wrapping, HTML preview, and a responsive layout.
- Prompts: Built-in and custom system prompts, picked per conversation.
- Attachments: Images (with vision models, drag-and-drop), audio for voice-capable models, and text files.
- Reasoning controls: Reasoning effort and extended thinking modes.
Quick Start
One-line Docker deployment:
docker run -d --name chatforge -p 3000:3000 \
-v chatforge_data:/data -v chatforge_logs:/app/logs \
-e DB_URL=file:/data/prod.db qduc/chat:latest
Visit http://localhost:3000, register, and configure your API keys in Settings → Providers & Tools.
Tech Stack
- Frontend: Next.js 15, React 19, TypeScript
- Backend: Node.js, Express, SQLite
- Desktop: Electron for cross-platform support
Docs and setup instructions are in the GitHub repository.