Deploy it yourself (beginner)

This guide assumes no server experience. The website and installer downloads are free to host. The API server costs from $4/month (DigitalOcean's smallest Droplet, price checked on 13 Oct 2026 on digitalocean.com/pricing/droplets); we recommend the $6/month 1 GB size.

Part 1: Website on Cloudflare Pages (free)

  1. Sign in to the Cloudflare dashboard. Go to Workers & Pages → Create → Pages → Direct Upload and create a project named blendbrowser. Your site will be at https://blendbrowser.pages.dev.
  2. Create an API token: My Profile → API Tokens → Create Token → Custom token with permission Account → Cloudflare Pages → Edit. Copy it.
  3. Copy your Account ID from the right sidebar of the Workers & Pages page.
  4. In GitHub, open the repository Settings → Secrets and variables → Actions:
    • Secrets: CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID.
    • Variables (optional): SITE_URL (default https://blendbrowser.pages.dev) and API_URL (your API address from Part 3).
  5. Go to Actions → Deploy website → Run workflow. Pushes to main deploy automatically.

Part 2: Installer downloads on Cloudflare R2 (free)

The code repository is private, so its GitHub release files can't be downloaded by the public. Installers go to a public R2 bucket instead (free tier: 10 GB storage, no egress fees).

  1. Cloudflare dashboard → R2 → Create bucket, e.g. blend-downloads.
  2. Bucket → Settings → Public access: enable the r2.dev subdomain (later: connect downloads.blendbrowser.com as a custom domain). Copy the public URL, e.g. https://pub-xxxx.r2.dev.
  3. Bucket → Settings → CORS policy, so the website can read the manifest:
    [{ "AllowedOrigins": ["https://blendbrowser.pages.dev", "https://blendbrowser.com"], "AllowedMethods": ["GET", "HEAD"], "AllowedHeaders": ["*"], "MaxAgeSeconds": 3600 }]
    
  4. R2 → Manage R2 API tokens → Create API token with Object Read & Write on that bucket only. Copy the Access Key ID and Secret.
  5. GitHub repository secrets: R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET (blend-downloads), R2_PUBLIC_URL (the URL from step 2). CLOUDFLARE_ACCOUNT_ID from Part 1 is reused for the R2 endpoint.
  6. Publish a version: push a tag such as v0.7.0 (or run Actions → Release → Run workflow). The workflow builds the installer and uploads win/<installer>.exe, win/latest.yml (auto-update feed) and win/latest.json (download page), plus a copy under win/<version>/.
  7. Re-run Deploy website so the download page uses R2_PUBLIC_URL.

Fallback without R2: create a separate public repository nomanasgharcodes/blend-browser-releases that holds no code, only releases. Create a release there and attach the .exe and latest.yml from the Release workflow artifact. The download page automatically falls back to that repo's latest release.

Part 3: API on a DigitalOcean Droplet

  1. In DigitalOcean click Create → Droplets. Choose Ubuntu 24.04, Basic → Regular, and $6/mo.
  2. Under Authentication add an SSH key (DigitalOcean shows how to create one).
  3. Under Advanced options → Add initialization scripts, paste the contents of deploy/digitalocean/cloud-init.yml. It installs Docker, a firewall and swap.
  4. Create the Droplet and wait about 3 minutes. Copy its IP address.
  5. On Windows, open PowerShell and run ssh root@YOUR_IP.
  6. Follow deploy/digitalocean/README.md: clone the repo, copy .env.prod.example to .env.prod, and fill it in. Until you own a domain, use API_DOMAIN=YOUR_IP.sslip.io, which gives you free HTTPS.
  7. Start everything with docker compose -f docker-compose.prod.yml --env-file .env.prod up -d --build, then open https://YOUR_IP.sslip.io/health. It should say ok: true.
  8. Set the GitHub variable API_URL=https://YOUR_IP.sslip.io and run Deploy website again.

Part 4: Your own domain (later)

  1. Buy the domain and add it to Cloudflare (free plan).
  2. In Pages → blendbrowser → Custom domains, add blendbrowser.com. Cloudflare creates the DNS record.
  3. Optional: in R2, connect the custom domain downloads.blendbrowser.com and update R2_PUBLIC_URL.
  4. Add a DNS record A api → YOUR_IP with the proxy off (grey cloud).
  5. Update the GitHub variables SITE_URL=https://blendbrowser.com and API_URL=https://api.blendbrowser.com, and on the server .env.prod: API_DOMAIN, API_URL, APP_URL, CORS_ORIGINS. Re-deploy both.

Costs

Item Cost
Cloudflare Pages, DNS, SSL $0
Cloudflare R2 downloads (≤10 GB, no egress fees) $0
DigitalOcean Droplet $4–6/mo
Backups (backup.sh, local) $0 (DO backups +20%)
Domain about $10/yr when bought