Self-Hosted

ClawKeep is MIT-licensed. You can use it entirely without an account, backing up to your own storage. No telemetry, no phone-home.

Local backup

The simplest option — back up to any directory on your machine or NAS.

# Install
npm install -g clawkeep

# Back up to local directory
clawkeep backup local --dest /mnt/nas/backups/my-project

# Restore
clawkeep restore . --from /mnt/nas/backups/my-project

No account, no API key, no network required. Encryption still happens locally — your backups are encrypted at rest.

S3-compatible storage

ClawKeep speaks standard S3 protocol. Point it at any S3-compatible endpoint.

AWS S3

clawkeep backup s3 \
  --endpoint https://s3.us-east-1.amazonaws.com \
  --bucket my-clawkeep-backups \
  --access-key AKIAXXXXXXXXXXXXXXXX \
  --secret-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  --prefix projects/my-project/

Cloudflare R2

clawkeep backup s3 \
  --endpoint https://<account-id>.r2.cloudflarestorage.com \
  --bucket my-backups \
  --access-key <r2-access-key> \
  --secret-key <r2-secret-key> \
  --prefix clawkeep/

R2 has zero egress fees, making it ideal for backups you might restore frequently.

MinIO

clawkeep backup s3 \
  --endpoint https://minio.internal:9000 \
  --bucket backups \
  --access-key minioadmin \
  --secret-key minioadmin

Backblaze B2

clawkeep backup s3 \
  --endpoint https://s3.us-west-001.backblazeb2.com \
  --bucket my-b2-bucket \
  --access-key <key-id> \
  --secret-key <application-key>

Switching to ClawKeep Cloud

If you start self-hosted and later want managed storage, create a ClawKeep Cloud account and point your CLI to it:

# 1. Create account at clawkeep.com/register
# 2. Generate API key from dashboard
clawkeep auth login --key ck_live_xxxx

# 3. Create cloud workspace
clawkeep workspace create my-project

# 4. Sync existing backups to cloud
clawkeep backup cloud --workspace ws_xxxx
clawkeep backup sync

Your existing local backups remain untouched. Cloud is additive.

Deploying the API yourself

The ClawKeep Cloud API is open source. You can deploy it on your own Cloudflare account.

Prerequisites

  • Cloudflare account with Workers, D1, R2, and KV enabled
  • Node.js 18+
  • Stripe account (for billing, or remove billing routes)

Setup

# Clone
git clone https://github.com/taco-devs/cloud-clawkeep.git
cd cloud-clawkeep

# Install
npm install

# Create Cloudflare resources
wrangler d1 create clawkeep-db
wrangler r2 bucket create clawkeep-storage
wrangler kv:namespace create clawkeep-kv

# Update wrangler.toml with your resource IDs
# (see api/wrangler.toml)

# Apply database migrations
cd infra
wrangler d1 migrations apply clawkeep-db

# Set secrets
cd ../api
wrangler secret put JWT_SECRET
wrangler secret put STRIPE_SECRET_KEY
wrangler secret put STRIPE_WEBHOOK_SECRET

# Deploy API
npm run deploy

# Deploy frontend
cd ../web
npm run pages:build
npm run pages:deploy

Environment configuration

SecretDescription
JWT_SECRETRandom string for signing JWTs (32+ chars)
STRIPE_SECRET_KEYStripe secret key (sk_live_...)
STRIPE_WEBHOOK_SECRETStripe webhook signing secret (whsec_...)

Running without Stripe

If you don't need billing (single-user or internal deployment), you can remove the billing routes from api/src/index.ts and set all users to the enterprise plan in the database. This removes all storage limits.