A clipboard management server with REST API, WebSocket support, and built-in Web UI.
docker run -d \
--name clipper \
-p 3000:3000 \
-v clipper-data:/data \
windoze/clipper-server
Access the Web UI at http://localhost:3000
| Variable | Default | Description |
|---|---|---|
CLIPPER_DB_PATH | /data/db | Database directory |
CLIPPER_STORAGE_PATH | /data/storage | File storage directory |
CLIPPER_LISTEN_ADDR | 0.0.0.0 | Listen address |
PORT | 3000 | HTTP port |
RUST_LOG | clipper_server=info | Log level |
| Variable | Default | Description |
|---|---|---|
CLIPPER_CLEANUP_ENABLED | false | Enable automatic cleanup |
CLIPPER_CLEANUP_RETENTION_DAYS | 30 | Delete clips older than N days |
CLIPPER_CLEANUP_INTERVAL_HOURS | 24 | Cleanup interval in hours |
| Variable | Default | Description |
|---|---|---|
CLIPPER_TLS_ENABLED | false | Enable HTTPS |
CLIPPER_TLS_PORT | 443 | HTTPS port |
CLIPPER_TLS_CERT | /certs/cert.pem | TLS certificate path |
CLIPPER_TLS_KEY | /certs/key.pem | TLS private key path |
CLIPPER_TLS_REDIRECT | true | Redirect HTTP to HTTPS |
| Variable | Default | Description |
|---|---|---|
CLIPPER_ACME_ENABLED | false | Enable automatic certificates |
CLIPPER_ACME_DOMAIN | - | Domain name for certificate |
CLIPPER_ACME_EMAIL | - | Contact email for Let's Encrypt |
CLIPPER_ACME_STAGING | false | Use staging environment |
CLIPPER_CERTS_DIR | /data/certs | Certificate cache directory |
| Variable | Default | Description |
|---|---|---|
CLIPPER_BEARER_TOKEN | - | Bearer token for API authentication |
When CLIPPER_BEARER_TOKEN is set, all API requests require authentication:
Authorization: Bearer <token> header or ?token=<token> query parameter{"type": "auth", "token": "<token>"} message after connecting?token=<token> query parameter for direct file links| Variable | Default | Description |
|---|---|---|
CLIPPER_SHORT_URL_BASE | - | Base URL for sharing (enables sharing feature) |
CLIPPER_SHORT_URL_EXPIRATION_HOURS | 24 | Default short URL expiration in hours |
When CLIPPER_SHORT_URL_BASE is set (e.g., https://clips.example.com), clips can be shared publicly via short URLs. The share button appears in the Web UI and desktop app.
| Variable | Default | Description |
|---|---|---|
CLIPPER_MAX_UPLOAD_SIZE_MB | 10 | Maximum file upload size in megabytes |
Files exceeding the limit will be rejected with a 413 Payload Too Large error.
docker run -d \
--name clipper \
-p 3000:3000 \
-v clipper-data:/data \
windoze/clipper-server
docker run -d \
--name clipper \
-p 3000:3000 \
-p 443:443 \
-v clipper-data:/data \
-v /path/to/certs:/certs:ro \
-e CLIPPER_TLS_ENABLED=true \
windoze/clipper-server
docker run -d \
--name clipper \
-p 80:3000 \
-p 443:443 \
-v clipper-data:/data \
-e CLIPPER_ACME_ENABLED=true \
-e CLIPPER_ACME_DOMAIN=clips.example.com \
-e [email protected] \
windoze/clipper-server
docker run -d \
--name clipper \
-p 3000:3000 \
-v clipper-data:/data \
-e CLIPPER_CLEANUP_ENABLED=true \
-e CLIPPER_CLEANUP_RETENTION_DAYS=7 \
windoze/clipper-server
docker run -d \
--name clipper \
-p 3000:3000 \
-v clipper-data:/data \
-e CLIPPER_BEARER_TOKEN=your-secret-token \
windoze/clipper-server
Example API call with authentication:
# Using Authorization header
curl -H "Authorization: Bearer your-secret-token" http://localhost:3000/clips
# Using query parameter
curl "http://localhost:3000/clips?token=your-secret-token"
docker run -d \
--name clipper \
-p 3000:3000 \
-v clipper-data:/data \
-e CLIPPER_MAX_UPLOAD_SIZE_MB=100 \
windoze/clipper-server
services:
clipper:
image: windoze/clipper-server
ports:
- "3000:3000"
- "443:443"
volumes:
- clipper-data:/data
- ./certs:/certs:ro # Optional: for manual TLS
environment:
- RUST_LOG=clipper_server=info
# Enable authentication:
# - CLIPPER_BEARER_TOKEN=your-secret-token
# Enable HTTPS with Let's Encrypt:
# - CLIPPER_ACME_ENABLED=true
# - CLIPPER_ACME_DOMAIN=clips.example.com
# - [email protected]
restart: unless-stopped
volumes:
clipper-data:
| Path | Description |
|---|---|
/data | Database and file storage (persistent) |
/certs | TLS certificates (for manual HTTPS) |
| Port | Description |
|---|---|
3000 | HTTP (Web UI + REST API + WebSocket) |
443 | HTTPS (when TLS enabled) |
GET /health - Health checkGET /version - Server version and status informationPOST /clips - Create a clipPOST /clips/upload - Upload a fileGET /clips - List clips (with pagination)GET /clips/search?q=query - Search clipsGET /clips/:id - Get a clipPUT /clips/:id - Update a clipDELETE /clips/:id - Delete a clipGET /clips/:id/file - Download file attachmentPOST /clips/:id/short-url - Create short URL for sharingGET /s/:code - Resolve short URL (public, no auth required)Connect to ws://localhost:3000/ws for real-time updates.
When authentication is enabled, send an auth message immediately after connecting:
{ "type": "auth", "token": "your-secret-token" }
The server will respond with:
{ "type": "auth_result", "success": true }
{ "type": "new_clip", "id": "abc123", "content": "...", "tags": [] }
{ "type": "updated_clip", "id": "abc123" }
{ "type": "deleted_clip", "id": "abc123" }
{ "type": "clips_cleaned_up", "ids": ["..."], "count": 5 }
Content type
Image
Digest
sha256:a8030bfa2…
Size
39.1 MB
Last updated
9 months ago
docker pull windoze/clipper-server