{
  "slug": "miro-to-drawio",
  "title": "Miro Starter to self-hosted draw.io",
  "summary": "draw.io costs almost nothing to run and does maybe a third of what Miro does. Which third decides this.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Miro",
    "vendor_id": "miro",
    "plan": "Starter",
    "plan_id": "starter",
    "amount": 8,
    "period": "month",
    "per_seat": true,
    "billed": "annual",
    "seats": 6,
    "quote": "Starter For small teams collaborating regularly with unlimited boards $ 8 /month per member, billed yearly",
    "caveat": null,
    "source_url": "https://miro.com/pricing/",
    "verified_at": "2026-10-19",
    "needs_reverification": false
  },
  "alternative": {
    "name": "draw.io (self-hosted)",
    "repo": "jgraph/drawio",
    "project": {
      "full_name": "jgraph/drawio",
      "url": "https://github.com/jgraph/drawio",
      "homepage": "https://www.drawio.com",
      "description": "draw.io is a JavaScript, client-side editor for general diagramming.",
      "stars": 8863,
      "forks": 1326,
      "open_issues": 31,
      "license": "Apache-2.0",
      "archived": false,
      "pushed_at": "2026-10-18T10:53:15Z",
      "days_since_push": 1,
      "latest_release": {
        "tag": "v32.5.5",
        "published_at": "2026-10-18T10:54:09Z",
        "url": "https://github.com/jgraph/drawio/releases/tag/v32.5.5"
      },
      "days_since_release": 1,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:51.639Z"
    },
    "box": {
      "provider": "Linode",
      "name": "Nanode 1GB",
      "id": "linode:g6-nanode-1",
      "vcpu": 1,
      "ram_gb": 1,
      "disk_gb": 25,
      "bandwidth_tb": 0.98,
      "monthly_usd": 5,
      "url": "https://www.linode.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": 10,
      "monthly_usd": 0.07
    },
    "requirements": {
      "ram_gb": 1,
      "vcpu": 1,
      "disk_gb": 20
    },
    "box_alternatives": [
      {
        "provider": "Vultr",
        "name": "vc2-1c-1gb",
        "monthly_usd": 5,
        "vcpu": 1,
        "ram_gb": 1,
        "disk_gb": 25,
        "url": "https://www.vultr.com/pricing/",
        "chosen": false
      },
      {
        "provider": "Linode",
        "name": "Nanode 1GB",
        "monthly_usd": 5,
        "vcpu": 1,
        "ram_gb": 1,
        "disk_gb": 25,
        "url": "https://www.linode.com/pricing/",
        "chosen": true
      },
      {
        "provider": "DigitalOcean",
        "name": "1 vCPU · 1 GB",
        "monthly_usd": 6,
        "vcpu": 1,
        "ram_gb": 1,
        "disk_gb": 25,
        "url": "https://www.digitalocean.com/pricing/droplets",
        "chosen": false
      }
    ],
    "migration_hours": 3,
    "maintenance_hours_per_month": 0.3
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 6,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 48,
      "time_monthly": 0,
      "monthly": 48,
      "one_time": 0,
      "annual": 576
    },
    "alternative": {
      "cash_monthly": 5.07,
      "time_monthly": 15,
      "monthly": 20.07,
      "one_time": 150,
      "cash_one_time": 0,
      "time_one_time": 150,
      "annual": 240.83
    },
    "delta": {
      "monthly": 27.93,
      "upfront_to_switch": 150,
      "annual": 335.17
    },
    "break_even_month": 6,
    "break_even_hourly_rate": 111.99,
    "totals": {
      "at_12_months": {
        "incumbent": 576,
        "alternative": 390.83
      },
      "at_36_months": {
        "incumbent": 1728,
        "alternative": 872.5
      },
      "at_horizon": {
        "incumbent": 1728,
        "alternative": 872.5
      }
    },
    "savings": {
      "year_1": 185.17,
      "year_3": 855.5,
      "at_horizon": 855.5
    },
    "verdict": "switch"
  },
  "managed": null,
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 150
    },
    {
      "month": 1,
      "incumbent": 48,
      "alternative": 170.07
    },
    {
      "month": 2,
      "incumbent": 96,
      "alternative": 190.14
    },
    {
      "month": 3,
      "incumbent": 144,
      "alternative": 210.21
    },
    {
      "month": 4,
      "incumbent": 192,
      "alternative": 230.28
    },
    {
      "month": 5,
      "incumbent": 240,
      "alternative": 250.35
    },
    {
      "month": 6,
      "incumbent": 288,
      "alternative": 270.42
    },
    {
      "month": 7,
      "incumbent": 336,
      "alternative": 290.49
    },
    {
      "month": 8,
      "incumbent": 384,
      "alternative": 310.56
    },
    {
      "month": 9,
      "incumbent": 432,
      "alternative": 330.63
    },
    {
      "month": 10,
      "incumbent": 480,
      "alternative": 350.7
    },
    {
      "month": 11,
      "incumbent": 528,
      "alternative": 370.77
    },
    {
      "month": 12,
      "incumbent": 576,
      "alternative": 390.84
    },
    {
      "month": 13,
      "incumbent": 624,
      "alternative": 410.91
    },
    {
      "month": 14,
      "incumbent": 672,
      "alternative": 430.98
    },
    {
      "month": 15,
      "incumbent": 720,
      "alternative": 451.05
    },
    {
      "month": 16,
      "incumbent": 768,
      "alternative": 471.12
    },
    {
      "month": 17,
      "incumbent": 816,
      "alternative": 491.19
    },
    {
      "month": 18,
      "incumbent": 864,
      "alternative": 511.26
    },
    {
      "month": 19,
      "incumbent": 912,
      "alternative": 531.33
    },
    {
      "month": 20,
      "incumbent": 960,
      "alternative": 551.4
    },
    {
      "month": 21,
      "incumbent": 1008,
      "alternative": 571.47
    },
    {
      "month": 22,
      "incumbent": 1056,
      "alternative": 591.54
    },
    {
      "month": 23,
      "incumbent": 1104,
      "alternative": 611.61
    },
    {
      "month": 24,
      "incumbent": 1152,
      "alternative": 631.68
    },
    {
      "month": 25,
      "incumbent": 1200,
      "alternative": 651.75
    },
    {
      "month": 26,
      "incumbent": 1248,
      "alternative": 671.82
    },
    {
      "month": 27,
      "incumbent": 1296,
      "alternative": 691.89
    },
    {
      "month": 28,
      "incumbent": 1344,
      "alternative": 711.96
    },
    {
      "month": 29,
      "incumbent": 1392,
      "alternative": 732.03
    },
    {
      "month": 30,
      "incumbent": 1440,
      "alternative": 752.1
    },
    {
      "month": 31,
      "incumbent": 1488,
      "alternative": 772.17
    },
    {
      "month": 32,
      "incumbent": 1536,
      "alternative": 792.24
    },
    {
      "month": 33,
      "incumbent": 1584,
      "alternative": 812.31
    },
    {
      "month": 34,
      "incumbent": 1632,
      "alternative": 832.38
    },
    {
      "month": 35,
      "incumbent": 1680,
      "alternative": 852.45
    },
    {
      "month": 36,
      "incumbent": 1728,
      "alternative": 872.52
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 1545.5
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 3,
      "savings_at_horizon": 1200.5
    },
    {
      "hourly_rate": 50,
      "verdict": "switch",
      "break_even_month": 6,
      "savings_at_horizon": 855.5
    },
    {
      "hourly_rate": 75,
      "verdict": "switch",
      "break_even_month": 12,
      "savings_at_horizon": 510.5
    },
    {
      "hourly_rate": 100,
      "verdict": "marginal",
      "break_even_month": 24,
      "savings_at_horizon": 165.5
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -524.5
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -1214.5
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Real-time multiplayer, which is most of what Miro sells",
      "Templates, voting, timers and everything built for running a workshop",
      "Comment threads and the review flow around them"
    ],
    "you_gain": [
      "The best diagramming tool of the lot, and it is not close for flowcharts and architecture",
      "Diagrams as XML files you can version and diff in git",
      "Apache-2.0, and a container that runs on the cheapest box sold"
    ]
  },
  "caveats": [
    "These are different products. draw.io is for diagrams; Miro is for meetings. If your team runs workshops on Miro, this is not a replacement.",
    "Self-hosted draw.io has no collaboration server. People edit files, not a shared board.",
    "If you want an infinite shared canvas, read the Excalidraw page instead."
  ],
  "category": "whiteboard",
  "updated_at": "2026-10-19"
}