conduit-ui / qdrant-tools
CLI tools for Qdrant vector database operations - export, import, sync, and management
v0.1.0
2026-08-22 17:41 UTC
Requires
- php: ^8.3
- laravel-zero/framework: ^13.0
- saloonphp/saloon: ^4.0
Requires (Dev)
- laravel/pint: ^1.25
- mockery/mockery: ^1.6
- pestphp/pest: ^3.8|^4.1.2
README
CLI tools for Qdrant vector database operations - export, import, sync, and management.
Installation
composer global require conduit-ui/qdrant-tools
Or clone and install locally:
git clone https://github.com/conduit-ui/qdrant-tools.git
cd qdrant-tools
composer install
Configuration
Copy .env.example to .env and configure your Qdrant connections:
cp .env.example .env
Environment variables:
| Variable | Default | Description |
|---|---|---|
QDRANT_HOST |
localhost |
Default Qdrant host |
QDRANT_PORT |
6333 |
Default Qdrant port |
QDRANT_API_KEY |
API key for authentication | |
QDRANT_SECURE |
false |
Use HTTPS |
QDRANT_REMOTE_HOST |
Remote instance for sync | |
QDRANT_REMOTE_PORT |
6333 |
Remote port |
QDRANT_REMOTE_API_KEY |
Remote API key | |
QDRANT_REMOTE_SECURE |
false |
Remote uses HTTPS |
QDRANT_BATCH_SIZE |
100 |
Default batch size |
QDRANT_TIMEOUT |
30 |
HTTP timeout in seconds |
Commands
List Collections
./qdrant qdrant:collections ./qdrant qdrant:collections --host=remote.example.com --port=6333 ./qdrant qdrant:collections --json
Collection Stats
./qdrant qdrant:stats knowledge ./qdrant qdrant:stats knowledge --json
Export Collection
Export all points from a collection to a JSON file:
./qdrant qdrant:export knowledge
./qdrant qdrant:export knowledge --output=backup.json
./qdrant qdrant:export knowledge --with-vectors
./qdrant qdrant:export knowledge --batch-size=200
./qdrant qdrant:export knowledge --filter='{"must":[{"key":"status","match":{"value":"active"}}]}'
Import Collection
Import points from a JSON file:
./qdrant qdrant:import backup.json ./qdrant qdrant:import backup.json --collection=new_collection ./qdrant qdrant:import backup.json --create --vector-size=384 ./qdrant qdrant:import backup.json --batch-size=200
Note: Import requires the export to include vectors (--with-vectors during export).
Sync Collections
Sync a collection between two Qdrant instances:
# Using config (local -> remote) ./qdrant qdrant:sync knowledge --create # Explicit hosts ./qdrant qdrant:sync knowledge \ --source-host=localhost --source-port=6333 \ --dest-host=odin.example.com --dest-port=6333 \ --dest-api-key=your-api-key --dest-secure \ --create # Dry run to preview ./qdrant qdrant:sync knowledge --dry-run # Selective sync with filter ./qdrant qdrant:sync knowledge --filter='{"must":[{"key":"category","match":{"value":"important"}}]}'
Delete Points
Delete points by IDs or filter:
# By IDs ./qdrant qdrant:delete knowledge --ids=id1,id2,id3 # By filter ./qdrant qdrant:delete knowledge --filter='{"must":[{"key":"status","match":{"value":"archived"}}]}' # Force delete (skip confirmation) ./qdrant qdrant:delete knowledge --ids=id1 --force
Examples
Migrate Local to Production
# Export from local with vectors ./qdrant qdrant:export knowledge --with-vectors --output=knowledge-backup.json # Import to production ./qdrant qdrant:import knowledge-backup.json \ --host=production.qdrant.cloud \ --port=6333 \ --api-key=$QDRANT_CLOUD_API_KEY \ --secure \ --create
Direct Sync (Local to Remote)
./qdrant qdrant:sync knowledge \ --source-host=localhost \ --dest-host=odin.partridge.rocks \ --dest-port=6333 \ --create
Backup and Restore
# Backup ./qdrant qdrant:export mydata --with-vectors --output=mydata-$(date +%Y%m%d).json # Restore to new collection ./qdrant qdrant:import mydata-20250110.json --collection=mydata_restored --create
Development
# Install dependencies composer install # Run tests composer test # Format code composer format
License
MIT License - see LICENSE for details.