ZeroDB Local — run ZeroDB locally without Docker
Project description
ZeroDB Local
Run ZeroDB on your local machine. Two modes available:
- Lite mode (recommended) — pip install, no Docker required
- Full mode — Docker Compose with PostgreSQL, Qdrant, MinIO, RedPanda
Quick Start — Lite Mode (No Docker)
pip install zerodb-local[lite]
zerodb serve
That's it. Server starts at http://localhost:8000 with:
- SQLite database
- FAISS vector search
- In-process embeddings (BAAI/bge-small-en-v1.5, 384 dims)
- Local filesystem storage
- SQLite event queue
Verify it works
# Health check
curl http://localhost:8000/health
# Create a project
curl -X POST http://localhost:8000/v1/projects \
-H "Content-Type: application/json" \
-d '{"name": "my-project", "description": "Testing ZeroDB Local"}'
CLI Options
zerodb serve # Start on port 8000
zerodb serve --port 9000 # Custom port
zerodb serve --data-dir /my/data # Custom data directory
zerodb serve --cloud-key sk_... # Enable cloud sync
Data is stored at ~/.zerodb/data/ by default.
Features
- Two backends: Lite (SQLite + FAISS) or Full (PostgreSQL + Qdrant + Docker)
- Local API Server: Mirrors all 128 ZeroDB Cloud endpoints
- Web Dashboard: Manage projects, vectors, tables, files, and events via UI
- CLI Tool:
zerodbcommand for local control and cloud sync - Offline-First: Work without internet, sync when ready
- No API Costs: Local embeddings using BAAI BGE models (free)
- Cloud Sync: Bidirectional sync with ZeroDB Cloud
- Production-Ready: Same code paths as cloud for consistency
Full Mode (Docker)
For production-like environments with PostgreSQL, Qdrant, MinIO, and RedPanda.
Prerequisites
- Docker 20.10+ and Docker Compose 2.0+
- Python 3.11+ (for CLI tool)
- At least 4GB RAM available for Docker
Installation
-
Clone the repository:
cd zerodb-local
-
Copy environment template:
cp .env.local.example .env.local
-
Edit
.env.local(optional):- Update
POSTGRES_PASSWORDfor production use - Set
CLOUD_API_KEYif you want cloud sync - Adjust
EMBEDDINGS_MODELbased on your needs
- Update
-
Start all services:
docker-compose up -d
-
Verify services are running:
docker-compose psYou should see 7 services running:
zerodb-postgres(PostgreSQL + pgvector)zerodb-qdrant(Vector search)zerodb-minio(Object storage)zerodb-redpanda(Event streaming)zerodb-embeddings(Local embeddings)zerodb-api(API server)zerodb-dashboard(Web UI)
-
Access the dashboard:
- Open http://localhost:3000 in your browser
-
Check API health:
curl http://localhost:8000/health
Architecture
┌─────────────────────────────────────────────────────────────┐
│ ZeroDB Local Stack │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ Dashboard │◄────────┤ API Server │ │
│ │ (React UI) │ REST │ (FastAPI) │ │
│ └─────────────┘ └───────┬──────┘ │
│ localhost:3000 │ │
│ │ │
│ ┌───────────────────────┼───────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ PostgreSQL │ │ Qdrant │ │ MinIO │ │
│ │ + pgvector │ │ (Vectors) │ │ (Files) │ │
│ └──────────────┘ └─────────────┘ └─────────────┘ │
│ localhost:5432 localhost:6333 localhost:9000 │
│ │
│ ┌───────────────────────┬──────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ RedPanda │ │ Embeddings │ │ CLI │ │
│ │ (Events) │ │ (BAAI) │ │ (Typer) │ │
│ └──────────────┘ └─────────────┘ └─────────────┘ │
│ localhost:9092 localhost:8001 zerodb command │
│ │
└─────────────────────────────────────────────────────────────┘
│
│ Sync (optional)
▼
┌─────────────────────┐
│ ZeroDB Cloud API │
│ api.ainative.studio │
└─────────────────────┘
Services
PostgreSQL + pgvector (Port 5432)
- Purpose: Relational data storage with vector support
- Storage:
./data/postgres - Console: Access via
psqlor any PostgreSQL client - Usage: Tables, metadata, change logs
Qdrant (Port 6333)
- Purpose: High-performance vector similarity search
- Storage:
./data/qdrant - Web UI: http://localhost:6333/dashboard
- Usage: Fast semantic search for vectors and memory
MinIO (Port 9000/9001)
- Purpose: S3-compatible object storage
- Storage:
./data/minio - Console: http://localhost:9001 (minioadmin/minioadmin)
- Usage: File uploads, large blobs
RedPanda (Port 9092)
- Purpose: Kafka-compatible event streaming
- Storage:
./data/redpanda - Console: http://localhost:9644
- Usage: Event sourcing, CDC, real-time notifications
Embeddings Service (Port 8001)
- Purpose: Local text embedding generation
- Model: BAAI/bge-small-en-v1.5 (384 dimensions)
- Storage:
./data/embeddings/models - Usage: Generate embeddings without API costs
API Server (Port 8000)
- Purpose: FastAPI server mirroring ZeroDB Cloud
- Endpoints: 128 endpoints matching cloud API
- Docs: http://localhost:8000/docs
- Health: http://localhost:8000/health
Dashboard (Port 3000)
- Purpose: Web UI for local management
- Framework: React 18 + TypeScript + Vite
- Features: Projects, vectors, tables, files, events, sync
Usage Examples
Create a Project
curl -X POST http://localhost:8000/v1/projects \
-H "Content-Type: application/json" \
-d '{
"name": "my-first-project",
"description": "Testing ZeroDB Local"
}'
Upsert a Vector
curl -X POST http://localhost:8000/v1/projects/{project_id}/database/vectors/upsert \
-H "Content-Type: application/json" \
-d '{
"vector_embedding": [0.1, 0.2, 0.3, ...],
"document": "This is my document",
"metadata": {"source": "local-test"}
}'
Search Vectors
curl -X POST http://localhost:8000/v1/projects/{project_id}/database/vectors/search \
-H "Content-Type: application/json" \
-d '{
"query_vector": [0.1, 0.2, 0.3, ...],
"limit": 10,
"threshold": 0.7
}'
CLI Tool
Installation
cd cli
pip install -e .
Commands
# Start local environment
zerodb local up
# Stop local environment
zerodb local down
# Check service status
zerodb local status
# Login to cloud
zerodb cloud login
# Link local project to cloud
zerodb cloud link <project_id>
# Sync to cloud (push)
zerodb sync apply
# Pull from cloud
zerodb cloud pull
Data Management
Backup Local Data
./scripts/backup-local.sh
Creates backup in ./backups/zerodb-backup-YYYY-MM-DD.tar.gz
Restore from Backup
./scripts/restore-local.sh ./backups/zerodb-backup-YYYY-MM-DD.tar.gz
Reset Everything
docker-compose down -v
rm -rf ./data
docker-compose up -d
Development
Hot Reload API
cd api
uvicorn main:app --reload --host 0.0.0.0 --port 8000
Hot Reload Dashboard
cd dashboard
npm run dev
Run Tests
cd api
pytest tests/ -v --cov
Troubleshooting
Services won't start
# Check logs
docker-compose logs
# Restart specific service
docker-compose restart zerodb-api
# Full reset
docker-compose down -v && docker-compose up -d
Port conflicts
# Check what's using the ports
lsof -i :5432 # PostgreSQL
lsof -i :6333 # Qdrant
lsof -i :9000 # MinIO
lsof -i :9092 # RedPanda
lsof -i :8000 # API
lsof -i :3000 # Dashboard
# Update ports in docker-compose.yml if needed
Slow embeddings
# Use GPU if available (NVIDIA)
# Update .env.local:
EMBEDDINGS_DEVICE=cuda
# Or use larger model (slower but more accurate)
EMBEDDINGS_MODEL=BAAI/bge-base-en-v1.5 # 768 dims
EMBEDDINGS_MODEL=BAAI/bge-large-en-v1.5 # 1024 dims
Database connection issues
# Check Postgres is healthy
docker-compose exec postgres pg_isready
# Inspect logs
docker-compose logs postgres
# Connect manually
docker-compose exec postgres psql -U zerodb -d zerodb_local
Cloud Sync
Setup
- Get your API key from https://www.ainative.studio/dashboard/api-keys
- Add to
.env.local:CLOUD_API_KEY=your-api-key-here - Login via CLI:
zerodb cloud login
Sync Workflow
# 1. Make changes locally (add vectors, tables, etc.)
# 2. See what will be synced
zerodb sync plan
# 3. Push to cloud
zerodb sync apply
# 4. Pull changes from cloud
zerodb cloud pull
Conflict Resolution
Configure in .env.local:
CONFLICT_RESOLUTION=newest-wins # local-wins, cloud-wins, newest-wins, manual
Environment Variables Reference
See .env.local.example for complete list. Key variables:
POSTGRES_PASSWORD- Database password (change in production!)CLOUD_API_KEY- Your ZeroDB Cloud API key for syncEMBEDDINGS_MODEL- Model to use (small/base/large)LOG_LEVEL- Logging verbosity (debug/info/warning/error)DEBUG- Enable debug mode (true/false)
System Requirements
Minimum
- 4GB RAM
- 10GB disk space
- 2 CPU cores
- Docker 20.10+
Recommended
- 8GB RAM
- 50GB disk space (for embeddings models + data)
- 4 CPU cores
- SSD storage
- Docker 24.0+
Performance
Expected Latency
- Vector upsert: <10ms
- Semantic search (10k vectors): <50ms
- Embeddings generation: <100ms per text
- Sync (1k vectors): <30s
Scaling Limits (Local)
- Vectors: Up to 1M (limited by RAM)
- Tables: Unlimited (limited by disk)
- Files: Unlimited (limited by disk)
- Events: 10k/sec (limited by RedPanda)
Security
Default Credentials
⚠️ CHANGE THESE IN PRODUCTION!
- PostgreSQL:
zerodb/localpass - MinIO:
minioadmin/minioadmin - API JWT Secret: (generated automatically)
Best Practices
- Use strong passwords in
.env.local - Never commit
.env.localto git - Use API keys for cloud sync (not passwords)
- Enable HTTPS for remote access
- Restrict CORS origins in production
Documentation
- Quick Start: docs/QUICK_START.md - Step-by-step setup guide
- Environment Setup: docs/ENVIRONMENT_SETUP.md - Configuration for local/staging/production
- Data Management: docs/DATA_MANAGEMENT.md - Backups, restores, and data lifecycle
- Troubleshooting: docs/TROUBLESHOOTING.md - Common issues and solutions
- Sync Strategy: docs/SYNC_STRATEGY.md - Cloud sync configuration
- API Reference: http://localhost:8000/docs - Interactive API documentation
Port Configuration
All external port mappings in docker-compose.yml are configurable via environment variables. Each defaults to the standard port if unset.
| Service | Default Port | Environment Variable |
|---|---|---|
| PostgreSQL | 5432 | ZERODB_POSTGRES_PORT |
| Qdrant REST | 6333 | ZERODB_QDRANT_REST_PORT |
| Qdrant gRPC | 6334 | ZERODB_QDRANT_GRPC_PORT |
| MinIO API | 9000 | ZERODB_MINIO_API_PORT |
| MinIO Console | 9001 | ZERODB_MINIO_CONSOLE_PORT |
| RedPanda Kafka | 9092 | ZERODB_REDPANDA_KAFKA_PORT |
| RedPanda HTTP Proxy | 8082 | ZERODB_REDPANDA_PROXY_PORT |
| RedPanda Admin | 9644 | ZERODB_REDPANDA_ADMIN_PORT |
| Embeddings | 8001 | ZERODB_EMBEDDINGS_PORT |
| API Server | 8000 | ZERODB_API_PORT |
| Dashboard | 3000 | ZERODB_DASHBOARD_PORT |
Remapping Ports
Set variables in your .env.local file or pass them directly:
# Via .env.local
ZERODB_API_PORT=8080
ZERODB_DASHBOARD_PORT=3001
ZERODB_POSTGRES_PORT=5433
# Or inline
ZERODB_API_PORT=8080 docker-compose up -d
Using docker-compose.override.yml
For persistent local overrides without modifying tracked files, create a docker-compose.override.yml:
version: '3.8'
services:
zerodb-api:
ports:
- "8080:8000"
dashboard:
ports:
- "3001:3000"
postgres:
ports:
- "5433:5432"
Docker Compose automatically merges this file with docker-compose.yml on every docker-compose up.
Port Conflict Detection
The port-config.json file in this directory describes all service ports and their env vars. It can be consumed by the port-management skill or any automation tool to detect conflicts before starting the stack.
Support
- GitHub Issues: https://github.com/AINative-Studio/core/issues
- Documentation: https://www.ainative.studio/docs
- Community: https://www.ainative.studio/community
- Email: hello@ainative.studio
License
MIT License. See LICENSE for details.
Built with ❤️ by the AINative Studio team
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zerodb_local-0.2.0.tar.gz.
File metadata
- Download URL: zerodb_local-0.2.0.tar.gz
- Upload date:
- Size: 262.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04527cc2185c0169c0a8065f92ecbae5c16774467687961ddcdcfe1115a21469
|
|
| MD5 |
08037a94aa1e9fce52e804971cb4fcfe
|
|
| BLAKE2b-256 |
dc5b21bc7040864f9e1e5e8036145cb629df193d2337e3390e96ff73222e4d95
|
File details
Details for the file zerodb_local-0.2.0-py3-none-any.whl.
File metadata
- Download URL: zerodb_local-0.2.0-py3-none-any.whl
- Upload date:
- Size: 353.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc1a5a1059dd1dc64cfd5847adb93685499d2b815f6bf2882889d1802208c462
|
|
| MD5 |
6b1f25707e1cf428025acb2bd1b654f9
|
|
| BLAKE2b-256 |
16d6cbf9a425811337597ca96c2546cd063a80d887541d2419edfbbc982fa54c
|