{
  "slug": "vercel-to-caprover",
  "title": "Vercel Pro to self-hosted CapRover",
  "summary": "CapRover is the oldest and calmest of the self-hosted deploy platforms. It is also the least fashionable, which is often a recommendation.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Vercel",
    "vendor_id": "vercel",
    "plan": "Pro",
    "plan_id": "pro",
    "amount": 20,
    "period": "month",
    "per_seat": true,
    "billed": "monthly",
    "seats": 4,
    "quote": "Pro Popular $20 /mo. ... Team Seats Developer seat 1 $20 / month",
    "caveat": "$20 per developer seat per month, which includes $20 of usage credit. Bandwidth and compute above that credit are billed on top, so real bills commonly exceed the seat price.",
    "source_url": "https://vercel.com/pricing",
    "verified_at": "2026-10-19",
    "needs_reverification": false
  },
  "alternative": {
    "name": "CapRover (self-hosted)",
    "repo": "caprover/caprover",
    "project": {
      "full_name": "caprover/caprover",
      "url": "https://github.com/caprover/caprover",
      "homepage": "https://CapRover.com",
      "description": "Scalable PaaS (automated Docker+nginx) - aka Heroku on Steroids",
      "stars": 15189,
      "forks": 1005,
      "open_issues": 175,
      "license": null,
      "archived": false,
      "pushed_at": "2026-10-19T05:23:41Z",
      "days_since_push": 0,
      "latest_release": {
        "tag": "v1.15.4",
        "published_at": "2026-08-30T22:41:34Z",
        "url": "https://github.com/caprover/caprover/releases/tag/v1.15.4"
      },
      "days_since_release": 50,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:58.043Z"
    },
    "box": {
      "provider": "Vultr",
      "name": "vc2-2c-4gb",
      "id": "vultr:vc2-2c-4gb",
      "vcpu": 2,
      "ram_gb": 4,
      "disk_gb": 80,
      "bandwidth_tb": 3,
      "monthly_usd": 20,
      "url": "https://www.vultr.com/pricing/",
      "verified_at": "2026-10-19T10:53:42.716Z"
    },
    "storage": {
      "id": "backblaze-b2",
      "name": "Backblaze B2",
      "usd_per_gb_month": 0.00695,
      "egress": "free up to 3x stored volume per month, then $0.01/GB",
      "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
      "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
      "verified_at": "2026-09-03",
      "verified_by": "human",
      "affiliate": true,
      "gb": 40,
      "monthly_usd": 0.28
    },
    "requirements": {
      "ram_gb": 4,
      "vcpu": 2,
      "disk_gb": 50
    },
    "box_alternatives": [
      {
        "provider": "Vultr",
        "name": "vc2-2c-4gb",
        "monthly_usd": 20,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.vultr.com/pricing/",
        "chosen": true
      },
      {
        "provider": "Linode",
        "name": "Linode 4GB",
        "monthly_usd": 24,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.linode.com/pricing/",
        "chosen": false
      },
      {
        "provider": "DigitalOcean",
        "name": "2 vCPU · 4 GB",
        "monthly_usd": 24,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.digitalocean.com/pricing/droplets",
        "chosen": false
      }
    ],
    "migration_hours": 8,
    "maintenance_hours_per_month": 0.75
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 4,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 80,
      "time_monthly": 0,
      "monthly": 80,
      "one_time": 0,
      "annual": 960
    },
    "alternative": {
      "cash_monthly": 20.28,
      "time_monthly": 37.5,
      "monthly": 57.78,
      "one_time": 400,
      "cash_one_time": 0,
      "time_one_time": 400,
      "annual": 693.34
    },
    "delta": {
      "monthly": 22.22,
      "upfront_to_switch": 400,
      "annual": 266.66
    },
    "break_even_month": 19,
    "break_even_hourly_rate": 61.43,
    "totals": {
      "at_12_months": {
        "incumbent": 960,
        "alternative": 1093.34
      },
      "at_36_months": {
        "incumbent": 2880,
        "alternative": 2480.01
      },
      "at_horizon": {
        "incumbent": 2880,
        "alternative": 2480.01
      }
    },
    "savings": {
      "year_1": -133.34,
      "year_3": 399.99,
      "at_horizon": 399.99
    },
    "verdict": "marginal"
  },
  "managed": null,
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 400
    },
    {
      "month": 1,
      "incumbent": 80,
      "alternative": 457.78
    },
    {
      "month": 2,
      "incumbent": 160,
      "alternative": 515.56
    },
    {
      "month": 3,
      "incumbent": 240,
      "alternative": 573.34
    },
    {
      "month": 4,
      "incumbent": 320,
      "alternative": 631.12
    },
    {
      "month": 5,
      "incumbent": 400,
      "alternative": 688.9
    },
    {
      "month": 6,
      "incumbent": 480,
      "alternative": 746.68
    },
    {
      "month": 7,
      "incumbent": 560,
      "alternative": 804.46
    },
    {
      "month": 8,
      "incumbent": 640,
      "alternative": 862.24
    },
    {
      "month": 9,
      "incumbent": 720,
      "alternative": 920.02
    },
    {
      "month": 10,
      "incumbent": 800,
      "alternative": 977.8
    },
    {
      "month": 11,
      "incumbent": 880,
      "alternative": 1035.58
    },
    {
      "month": 12,
      "incumbent": 960,
      "alternative": 1093.36
    },
    {
      "month": 13,
      "incumbent": 1040,
      "alternative": 1151.14
    },
    {
      "month": 14,
      "incumbent": 1120,
      "alternative": 1208.92
    },
    {
      "month": 15,
      "incumbent": 1200,
      "alternative": 1266.7
    },
    {
      "month": 16,
      "incumbent": 1280,
      "alternative": 1324.48
    },
    {
      "month": 17,
      "incumbent": 1360,
      "alternative": 1382.26
    },
    {
      "month": 18,
      "incumbent": 1440,
      "alternative": 1440.04
    },
    {
      "month": 19,
      "incumbent": 1520,
      "alternative": 1497.82
    },
    {
      "month": 20,
      "incumbent": 1600,
      "alternative": 1555.6
    },
    {
      "month": 21,
      "incumbent": 1680,
      "alternative": 1613.38
    },
    {
      "month": 22,
      "incumbent": 1760,
      "alternative": 1671.16
    },
    {
      "month": 23,
      "incumbent": 1840,
      "alternative": 1728.94
    },
    {
      "month": 24,
      "incumbent": 1920,
      "alternative": 1786.72
    },
    {
      "month": 25,
      "incumbent": 2000,
      "alternative": 1844.5
    },
    {
      "month": 26,
      "incumbent": 2080,
      "alternative": 1902.28
    },
    {
      "month": 27,
      "incumbent": 2160,
      "alternative": 1960.06
    },
    {
      "month": 28,
      "incumbent": 2240,
      "alternative": 2017.84
    },
    {
      "month": 29,
      "incumbent": 2320,
      "alternative": 2075.62
    },
    {
      "month": 30,
      "incumbent": 2400,
      "alternative": 2133.4
    },
    {
      "month": 31,
      "incumbent": 2480,
      "alternative": 2191.18
    },
    {
      "month": 32,
      "incumbent": 2560,
      "alternative": 2248.96
    },
    {
      "month": 33,
      "incumbent": 2640,
      "alternative": 2306.74
    },
    {
      "month": 34,
      "incumbent": 2720,
      "alternative": 2364.52
    },
    {
      "month": 35,
      "incumbent": 2800,
      "alternative": 2422.3
    },
    {
      "month": 36,
      "incumbent": 2880,
      "alternative": 2480.08
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 2149.99
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 5,
      "savings_at_horizon": 1274.99
    },
    {
      "hourly_rate": 50,
      "verdict": "marginal",
      "break_even_month": 19,
      "savings_at_horizon": 399.99
    },
    {
      "hourly_rate": 75,
      "verdict": "stay",
      "break_even_month": 173,
      "savings_at_horizon": -475.01
    },
    {
      "hourly_rate": 100,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -1350.01
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -3100.01
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -4850.01
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Vercel's edge network, which a single box does not replicate",
      "Automatic image optimisation and instant cache invalidation",
      "Next.js features that exist because Vercel builds both halves",
      "Free idle preview deployments"
    ],
    "you_gain": [
      "A fixed bill instead of usage billing that can spike overnight",
      "Free seats, including for people who only read logs",
      "A mature, boring codebase — CapRover has been doing this since 2017"
    ]
  },
  "caveats": [
    "Global latency-sensitive traffic is the case this loses regardless of price. Put Cloudflare in front or stay on Vercel.",
    "CapRover is built on Docker Swarm, which is stable but effectively frozen. That is fine for a single box and a poor foundation for a cluster.",
    "The $20 per seat excludes usage overages. If bandwidth is why you are reading this, your real bill is higher and this page understates the saving."
  ],
  "category": "hosting-paas",
  "updated_at": "2026-10-19"
}