{
  "slug": "figma-to-penpot",
  "title": "Figma Professional to self-hosted Penpot",
  "summary": "Penpot is the only design tool where open file format and open source are the same decision, and the seat math is where Figma charges most.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Figma",
    "vendor_id": "figma",
    "plan": "Professional — Full seat",
    "plan_id": "professional-full",
    "amount": 16,
    "period": "month",
    "per_seat": true,
    "billed": "annual",
    "seats": 6,
    "quote": "Professional Monthly Annual Full seat $16 /mo + 3,000 AI credits/mo",
    "caveat": "Figma prices per seat with three seat types. Full seat is the editor; Dev and Collab seats are cheaper and read- or comment-mostly.",
    "source_url": "https://www.figma.com/pricing/",
    "verified_at": "2026-10-11",
    "needs_reverification": false
  },
  "alternative": {
    "name": "Penpot (self-hosted)",
    "repo": "penpot/penpot",
    "project": {
      "full_name": "penpot/penpot",
      "url": "https://github.com/penpot/penpot",
      "homepage": "https://penpot.app",
      "description": "Penpot: The open-source design platform for Product teams that need scalable collaboration.",
      "stars": 61356,
      "forks": 4253,
      "open_issues": 863,
      "license": "MPL-2.0",
      "archived": false,
      "pushed_at": "2026-10-19T10:51:28Z",
      "days_since_push": 0,
      "latest_release": {
        "tag": "2.18.3",
        "published_at": "2026-10-06T12:46:50Z",
        "url": "https://github.com/penpot/penpot/releases/tag/2.18.3"
      },
      "days_since_release": 13,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:51.172Z"
    },
    "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": 12,
    "maintenance_hours_per_month": 1
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 6,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 96,
      "time_monthly": 0,
      "monthly": 96,
      "one_time": 0,
      "annual": 1152
    },
    "alternative": {
      "cash_monthly": 20.28,
      "time_monthly": 50,
      "monthly": 70.28,
      "one_time": 600,
      "cash_one_time": 0,
      "time_one_time": 600,
      "annual": 843.34
    },
    "delta": {
      "monthly": 25.72,
      "upfront_to_switch": 600,
      "annual": 308.66
    },
    "break_even_month": 24,
    "break_even_hourly_rate": 56.79,
    "totals": {
      "at_12_months": {
        "incumbent": 1152,
        "alternative": 1443.34
      },
      "at_36_months": {
        "incumbent": 3456,
        "alternative": 3130.01
      },
      "at_horizon": {
        "incumbent": 3456,
        "alternative": 3130.01
      }
    },
    "savings": {
      "year_1": -291.34,
      "year_3": 325.99,
      "at_horizon": 325.99
    },
    "verdict": "marginal"
  },
  "managed": null,
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 600
    },
    {
      "month": 1,
      "incumbent": 96,
      "alternative": 670.28
    },
    {
      "month": 2,
      "incumbent": 192,
      "alternative": 740.56
    },
    {
      "month": 3,
      "incumbent": 288,
      "alternative": 810.84
    },
    {
      "month": 4,
      "incumbent": 384,
      "alternative": 881.12
    },
    {
      "month": 5,
      "incumbent": 480,
      "alternative": 951.4
    },
    {
      "month": 6,
      "incumbent": 576,
      "alternative": 1021.68
    },
    {
      "month": 7,
      "incumbent": 672,
      "alternative": 1091.96
    },
    {
      "month": 8,
      "incumbent": 768,
      "alternative": 1162.24
    },
    {
      "month": 9,
      "incumbent": 864,
      "alternative": 1232.52
    },
    {
      "month": 10,
      "incumbent": 960,
      "alternative": 1302.8
    },
    {
      "month": 11,
      "incumbent": 1056,
      "alternative": 1373.08
    },
    {
      "month": 12,
      "incumbent": 1152,
      "alternative": 1443.36
    },
    {
      "month": 13,
      "incumbent": 1248,
      "alternative": 1513.64
    },
    {
      "month": 14,
      "incumbent": 1344,
      "alternative": 1583.92
    },
    {
      "month": 15,
      "incumbent": 1440,
      "alternative": 1654.2
    },
    {
      "month": 16,
      "incumbent": 1536,
      "alternative": 1724.48
    },
    {
      "month": 17,
      "incumbent": 1632,
      "alternative": 1794.76
    },
    {
      "month": 18,
      "incumbent": 1728,
      "alternative": 1865.04
    },
    {
      "month": 19,
      "incumbent": 1824,
      "alternative": 1935.32
    },
    {
      "month": 20,
      "incumbent": 1920,
      "alternative": 2005.6
    },
    {
      "month": 21,
      "incumbent": 2016,
      "alternative": 2075.88
    },
    {
      "month": 22,
      "incumbent": 2112,
      "alternative": 2146.16
    },
    {
      "month": 23,
      "incumbent": 2208,
      "alternative": 2216.44
    },
    {
      "month": 24,
      "incumbent": 2304,
      "alternative": 2286.72
    },
    {
      "month": 25,
      "incumbent": 2400,
      "alternative": 2357
    },
    {
      "month": 26,
      "incumbent": 2496,
      "alternative": 2427.28
    },
    {
      "month": 27,
      "incumbent": 2592,
      "alternative": 2497.56
    },
    {
      "month": 28,
      "incumbent": 2688,
      "alternative": 2567.84
    },
    {
      "month": 29,
      "incumbent": 2784,
      "alternative": 2638.12
    },
    {
      "month": 30,
      "incumbent": 2880,
      "alternative": 2708.4
    },
    {
      "month": 31,
      "incumbent": 2976,
      "alternative": 2778.68
    },
    {
      "month": 32,
      "incumbent": 3072,
      "alternative": 2848.96
    },
    {
      "month": 33,
      "incumbent": 3168,
      "alternative": 2919.24
    },
    {
      "month": 34,
      "incumbent": 3264,
      "alternative": 2989.52
    },
    {
      "month": 35,
      "incumbent": 3360,
      "alternative": 3059.8
    },
    {
      "month": 36,
      "incumbent": 3456,
      "alternative": 3130.08
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 2725.99
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 6,
      "savings_at_horizon": 1525.99
    },
    {
      "hourly_rate": 50,
      "verdict": "marginal",
      "break_even_month": 24,
      "savings_at_horizon": 325.99
    },
    {
      "hourly_rate": 75,
      "verdict": "stay",
      "break_even_month": 1247,
      "savings_at_horizon": -874.01
    },
    {
      "hourly_rate": 100,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -2074.01
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -4474.01
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -6874.01
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Figma's plugin ecosystem, which is years ahead of anyone's",
      "Auto-layout and some of the newer prototyping interactions behave differently",
      "Figma AI — Penpot has AI in cloud offerings, not in the self-hosted build"
    ],
    "you_gain": [
      "No seat taxonomy: no Full/Dev/Collab split to manage, everyone edits",
      "SVG-native — files are web standards, not a proprietary format",
      "MPL-2.0, and Penpot is the only design tool the EU has invested in as public infrastructure"
    ]
  },
  "caveats": [
    "Penpot is genuinely close on UI but not identical. Auto-layout, variant behaviour and some keyboard muscle memory differ; budget a re-learning week for a design-heavy team.",
    "Importing Figma files works file-by-file via SVG/PDF rather than a full-workspace importer. The 12-hour estimate assumes a 6-seat team's active projects, not every historical draft.",
    "Penpot self-hosted needs 4 GB RAM minimum and is heavier on disk than the design work itself suggests — the render pipeline and Postgres dominate."
  ],
  "category": "design",
  "updated_at": "2026-10-19"
}