Skip to content

Repository files navigation

Central Chat - Because that brilliant explanation ChatGPT or Claude gave you three months ago shouldn't be lost forever.

Central Chat

LicenseDockerPythonTypeScript

Grab your data archives and get one search bar for everything. Every AI conversation. Zero cloud dependencies. Your conversations are scattered across ChatGPT, Claude, and Raycast—Central Chat brings them together in a single, fast, searchable interface that runs entirely on your machine. Your data never leaves your computer.

Features

  • Unified search across all platforms with SQLite FTS5
  • Platform theming — Claude (amber), ChatGPT (teal), Raycast (rose)
  • Privacy-first — all data stays local in a SQLite database
  • Safe re-imports — duplicates are automatically skipped
  • Deep linking — shareable URLs for each conversation
  • Keyboard-drivenCmd+K to search, ↑↓ to navigate, ? for help
  • Syntax highlighting — code blocks with one-click copy
  • Markdown rendering — proper formatting for lists, headings, and more

Quick Start

Prerequisites

  • Docker (recommended), OR
  • Python 3.10+ and Node.js 18+

Step 1: Get Your Data

Export your chat history from each platform you use:

PlatformHow to Export
ChatGPTchat.openai.com → Settings → Data Controls → Export → Download ZIP
Claudeclaude.ai/settings → Export Data → Download ZIP
RaycastUse raycast-ai-exporter to export your AI chat history
GeminiNot available yet in Google Takeout

Step 2: Run the App

git clone https://github.com/daveonkels/centralchat.git
cd central-chat
docker compose up -d

Open http://localhost:3000

Step 3: Import Your Data

  1. Click Manage Data in the header
  2. Upload your exported ZIP or JSON files
  3. Click Upload & Import

That's it! Your conversations are now searchable.

Searching

  • Type to search across all messages and conversation titles
  • Filter by platform using the filter buttons
  • Click a result to view the full conversation

Search operators:

  • platform:claude — filter by platform (claude, openai, raycast)
  • role:user — filter by message role (user, assistant)
  • before:2024-01-01 — messages before a date

Keyboard shortcuts: Press ? to see all shortcuts

Screenshots

Search view

Conversation view

Mobile view

Tech Stack

LayerTechnology
FrontendReact, TypeScript, Vite
BackendPython, FastAPI
DatabaseSQLite with FTS5 full-text search
DeploymentDocker, nginx

Advanced Setup

Manual Setup (without Docker)

Backend

cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
export DATABASE_PATH=../data/central-chat.db
export IMPORTS_PATH=../imports
uvicorn app.main:app --reload --port 8000

Frontend

cd frontend
npm install
npm run dev
Server Deployment (Traefik)

For deployment to a server with an existing Traefik + Docker Compose setup:

1. Copy project and build images

rsync -avz --exclude 'node_modules' --exclude '.venv' --exclude 'data/*.db' --exclude '.git' \
./ yourserver:~/apps/central-chat/
ssh yourserver
cd~/apps/central-chat
docker build -t central-chat-backend:latest ./backend
docker build -t central-chat-frontend:latest ./frontend

2. Create data directories

mkdir -p ~/data/central-chat/imports

3. Add to your docker-compose.yml

central-chat-backend:
image: central-chat-backend:latestcontainer_name: central-chat-backendrestart: unless-stoppedvolumes:
- ~/data/central-chat:/app/data
- ~/data/central-chat/imports:/app/imports:roenvironment:
- DATABASE_PATH=/app/data/central-chat.db
- IMPORTS_PATH=/app/importsnetworks:
- proxycentral-chat-frontend:
image: central-chat-frontend:latestcontainer_name: central-chat-frontendrestart: unless-stoppeddepends_on:
- central-chat-backendnetworks:
- proxylabels:
- "traefik.enable=true"
- "traefik.http.routers.central-chat.rule=Host(`central-chat.example.com`)"
- "traefik.http.routers.central-chat.entrypoints=https"
- "traefik.http.routers.central-chat.tls=true"
- "traefik.http.services.central-chat.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"

4. Start services

docker compose up -d central-chat-backend central-chat-frontend

Data Storage

  • Database:data/central-chat.db
  • Imports:imports/ directory
  • Safe to delete the database and re-import at any time

Supported Export Formats

PlatformExpected FileNotes
ChatGPTconversations.jsonFull history with message tree structure
Claudeconversations.jsonFull history with timestamps
Raycastraycast_ai_chats.jsonSimple format (no per-message timestamps)

API

EndpointDescription
GET /api/search?q=queryFull-text search
GET /api/conversationsList conversations
GET /api/conversations/{id}Get conversation with messages
GET /api/conversations/statsDatabase statistics
POST /api/import/runTrigger import

License

MIT

About

The unofficial ChatGPT, Claude, and Raycast AI chat archive viewer. Search across all your AI conversations in one place. Local-first, privacy-focused.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages