{
  "slug": "slack-to-zulip",
  "title": "Slack Pro to self-hosted Zulip",
  "summary": "Zulip's threaded topics are a different shape of chat — better for decisions, worse for banter, and free of per-seat pricing.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Slack",
    "vendor_id": "slack",
    "plan": "Pro",
    "plan_id": "pro",
    "amount": 7.25,
    "period": "month",
    "per_seat": true,
    "billed": "annual",
    "seats": 12,
    "quote": "$7.25 USD per user / month, when paying annually",
    "caveat": "Slack's headline shows a 50%-off-for-3-months promo figure ($4.38) next to the real one; $7.25 is the standard annual rate and $8.75 the monthly rate.",
    "source_url": "https://slack.com/pricing",
    "verified_at": "2026-10-11",
    "needs_reverification": false
  },
  "alternative": {
    "name": "Zulip (self-hosted)",
    "repo": "zulip/zulip",
    "project": {
      "full_name": "zulip/zulip",
      "url": "https://github.com/zulip/zulip",
      "homepage": "https://zulip.com",
      "description": "Zulip server and web application. Open-source team chat that helps teams stay productive and focused.",
      "stars": 26069,
      "forks": 10428,
      "open_issues": 2056,
      "license": "Apache-2.0",
      "archived": false,
      "pushed_at": "2026-10-18T16:22:46Z",
      "days_since_push": 1,
      "latest_release": {
        "tag": "12.3",
        "published_at": "2026-09-21T17:10:07Z",
        "url": "https://github.com/zulip/zulip/releases/tag/12.3"
      },
      "days_since_release": 28,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:57.069Z"
    },
    "box": {
      "provider": "Vultr",
      "name": "vc2-1c-2gb",
      "id": "vultr:vc2-1c-2gb",
      "vcpu": 1,
      "ram_gb": 2,
      "disk_gb": 55,
      "bandwidth_tb": 2,
      "monthly_usd": 10,
      "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": 30,
      "monthly_usd": 0.21
    },
    "requirements": {
      "ram_gb": 2,
      "vcpu": 1,
      "disk_gb": 40
    },
    "box_alternatives": [
      {
        "provider": "Vultr",
        "name": "vc2-1c-2gb",
        "monthly_usd": 10,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 55,
        "url": "https://www.vultr.com/pricing/",
        "chosen": true
      },
      {
        "provider": "Linode",
        "name": "Linode 2GB",
        "monthly_usd": 12,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 50,
        "url": "https://www.linode.com/pricing/",
        "chosen": false
      },
      {
        "provider": "DigitalOcean",
        "name": "1 vCPU · 2 GB",
        "monthly_usd": 12,
        "vcpu": 1,
        "ram_gb": 2,
        "disk_gb": 50,
        "url": "https://www.digitalocean.com/pricing/droplets",
        "chosen": false
      }
    ],
    "migration_hours": 9,
    "maintenance_hours_per_month": 0.8
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 12,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 87,
      "time_monthly": 0,
      "monthly": 87,
      "one_time": 0,
      "annual": 1044
    },
    "alternative": {
      "cash_monthly": 10.21,
      "time_monthly": 40,
      "monthly": 50.21,
      "one_time": 450,
      "cash_one_time": 0,
      "time_one_time": 450,
      "annual": 602.5
    },
    "delta": {
      "monthly": 36.79,
      "upfront_to_switch": 450,
      "annual": 441.5
    },
    "break_even_month": 13,
    "break_even_hourly_rate": 73.13,
    "totals": {
      "at_12_months": {
        "incumbent": 1044,
        "alternative": 1052.5
      },
      "at_36_months": {
        "incumbent": 3132,
        "alternative": 2257.51
      },
      "at_horizon": {
        "incumbent": 3132,
        "alternative": 2257.51
      }
    },
    "savings": {
      "year_1": -8.5,
      "year_3": 874.49,
      "at_horizon": 874.49
    },
    "verdict": "switch"
  },
  "managed": null,
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 450
    },
    {
      "month": 1,
      "incumbent": 87,
      "alternative": 500.21
    },
    {
      "month": 2,
      "incumbent": 174,
      "alternative": 550.42
    },
    {
      "month": 3,
      "incumbent": 261,
      "alternative": 600.63
    },
    {
      "month": 4,
      "incumbent": 348,
      "alternative": 650.84
    },
    {
      "month": 5,
      "incumbent": 435,
      "alternative": 701.05
    },
    {
      "month": 6,
      "incumbent": 522,
      "alternative": 751.26
    },
    {
      "month": 7,
      "incumbent": 609,
      "alternative": 801.47
    },
    {
      "month": 8,
      "incumbent": 696,
      "alternative": 851.68
    },
    {
      "month": 9,
      "incumbent": 783,
      "alternative": 901.89
    },
    {
      "month": 10,
      "incumbent": 870,
      "alternative": 952.1
    },
    {
      "month": 11,
      "incumbent": 957,
      "alternative": 1002.31
    },
    {
      "month": 12,
      "incumbent": 1044,
      "alternative": 1052.52
    },
    {
      "month": 13,
      "incumbent": 1131,
      "alternative": 1102.73
    },
    {
      "month": 14,
      "incumbent": 1218,
      "alternative": 1152.94
    },
    {
      "month": 15,
      "incumbent": 1305,
      "alternative": 1203.15
    },
    {
      "month": 16,
      "incumbent": 1392,
      "alternative": 1253.36
    },
    {
      "month": 17,
      "incumbent": 1479,
      "alternative": 1303.57
    },
    {
      "month": 18,
      "incumbent": 1566,
      "alternative": 1353.78
    },
    {
      "month": 19,
      "incumbent": 1653,
      "alternative": 1403.99
    },
    {
      "month": 20,
      "incumbent": 1740,
      "alternative": 1454.2
    },
    {
      "month": 21,
      "incumbent": 1827,
      "alternative": 1504.41
    },
    {
      "month": 22,
      "incumbent": 1914,
      "alternative": 1554.62
    },
    {
      "month": 23,
      "incumbent": 2001,
      "alternative": 1604.83
    },
    {
      "month": 24,
      "incumbent": 2088,
      "alternative": 1655.04
    },
    {
      "month": 25,
      "incumbent": 2175,
      "alternative": 1705.25
    },
    {
      "month": 26,
      "incumbent": 2262,
      "alternative": 1755.46
    },
    {
      "month": 27,
      "incumbent": 2349,
      "alternative": 1805.67
    },
    {
      "month": 28,
      "incumbent": 2436,
      "alternative": 1855.88
    },
    {
      "month": 29,
      "incumbent": 2523,
      "alternative": 1906.09
    },
    {
      "month": 30,
      "incumbent": 2610,
      "alternative": 1956.3
    },
    {
      "month": 31,
      "incumbent": 2697,
      "alternative": 2006.51
    },
    {
      "month": 32,
      "incumbent": 2784,
      "alternative": 2056.72
    },
    {
      "month": 33,
      "incumbent": 2871,
      "alternative": 2106.93
    },
    {
      "month": 34,
      "incumbent": 2958,
      "alternative": 2157.14
    },
    {
      "month": 35,
      "incumbent": 3045,
      "alternative": 2207.35
    },
    {
      "month": 36,
      "incumbent": 3132,
      "alternative": 2257.56
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 2764.49
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 4,
      "savings_at_horizon": 1819.49
    },
    {
      "hourly_rate": 50,
      "verdict": "switch",
      "break_even_month": 13,
      "savings_at_horizon": 874.49
    },
    {
      "hourly_rate": 75,
      "verdict": "stay",
      "break_even_month": 41,
      "savings_at_horizon": -70.51
    },
    {
      "hourly_rate": 100,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -1015.51
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -2905.51
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -4795.51
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Slack's familiar single-stream interface — Zulip's topic threading divides people",
      "The 2,600-app integration directory",
      "Huddles; Zulip has voice/video via Jitsi integration but it is not the same"
    ],
    "you_gain": [
      "Topics make a busy channel readable, which is the one thing Slack has never solved",
      "Apache-2.0 with no edition matrix — every feature is in the free self-hosted build",
      "Message history and search that never hit a 90-day wall"
    ]
  },
  "caveats": [
    "Zulip is opinionated: every message goes in a topic. Teams that fight itbounce off; teams that adopt it rarely go back. Do a two-week pilot before moving a whole workspace.",
    "Import from Slack is first-party (they ship a tooling path for it), which is unusual — the 9-hour estimate assumes it works on your export."
  ],
  "category": "team-chat",
  "updated_at": "2026-10-19"
}