Skip to content

Self-hosting 101

Self-hosting Plane means running the full application stack on infrastructure you control. This page covers what that involves, how Plane is licensed, what your team operates, and how to plan a deployment.

If you're ready to deploy, jump to the deployment scenarios on the overview.


1. What self-hosting Plane means

Self-hosting Plane means deploying Plane, the project and knowledge management platform, on infrastructure you control. Plane ships as a bundled Docker or Kubernetes deployment that includes the application and everything it depends on, so you can stand it up with a single command on a single machine.

Everything user-facing runs inside your network: the web app, the API, file uploads, real-time collaboration, search indexing, and AI inference paths. You control the data, the network path users take to reach Plane, the upgrade timing, the auth provider, and the integrations Plane talks to internally.

For the Commercial Edition, Plane operates the license validation server at the Prime portal. The Airgapped Edition removes that dependency and runs entirely offline.

For production deployments, you can also point Plane at managed services for the database and storage layers (RDS, Cloud SQL, S3, GCS, and similar) instead of running them yourself. See Plane Architecture for the full system anatomy and External services for the managed-service options.


2. Cloud vs self-hosted

DimensionPlane CloudSelf-hosted
Time to first userAbout 30 seconds20mins via Docker
Data residencyUS (default), EU available on demandAnywhere you deploy
Network isolationPublic internetVPC, private network, or fully air-gapped
Upgrade timingContinuousYou choose your window
Feature freshnessNew features ship here firstCommercial gets them next, Community last
Operational overheadZeroReal and ongoing
Backups and DRPlane operatesYou design and operate
Support escalationOne vendorYour platform team first, then Plane support
Compliance posturePlane's certifications applyYour perimeter, your audit
Integration with internal systemsEgress only (public APIs)Direct access to private services
Cost modelPer-seat subscriptionPer-seat subscription + On demand
Audit logs, SCIM, advanced authBusiness PlusAvailable on plans (Commercial and Airgapped)

Cloud and self-hosted migration is supported in the Cloud-to-self-hosted direction.


3. How licensing works

Plane's licensing has two layers, and confusing them is the most common mistake new self-hosters make.

The edition is the codebase you run. There are three self-hosted editions: Community, Commercial, and Airgapped. Each has its own release cycle. They are separate codebases, not feature toggles on the same binary.

The plan is the set of features your license key unlocks on the Commercial and Airgapped editions. Plans are Free, Pro, Business, and Enterprise Grid. You activate a plan by pasting a license key from the Prime portal into your workspace settings.

The three editions

Community Edition is open source under AGPL v3.0. Free, no license key, full source available, you can audit and modify it. Feature parity with the Free tier of Cloud, with no Pro, Business, or Enterprise features. To unlock paid features, switch to Commercial. See Upgrade Community to Commercial.

Commercial Edition is closed-source. It includes a built-in Free tier of 12 user seats per workspace, which means you can run Commercial in production at small scale without buying a license. To unlock Pro, Business, or Enterprise Grid features, you activate a license key. Commercial gets full feature parity with Cloud.

Airgapped Edition is the Commercial Edition adapted for environments without internet access. Same features, offline license activation, updates pulled from your own Docker registry. See Airgapped requirements.

How license activation works

License keys come from the Prime portal, which you log into with the email you used to purchase. To activate on a self-hosted instance:

  1. Copy the license key from Prime.
  2. In your Plane workspace, go to Workspace Settings > Billing and plans.
  3. Click Activate this Workspace, paste the key, click Activate.

Each license key is bound to one workspace and one machine. To move it (different server, different workspace, reinstall), use Delink license key in Billing and plans, then run prime-cli restart, then activate elsewhere. The full procedure is at Activate Pro and Business.

The Sync plan button in Billing and plans pulls the latest subscription state from Prime, including plan type, seat count, expiration, and feature flags. Use it whenever Prime and your workspace disagree.

For Enterprise Grid, see Activate Enterprise. For airgapped activation, see Activate airgapped and Activate airgapped Enterprise.

When something goes wrong

License-state failures (expiry, seat overflow, key conflicts, network errors during activation) surface as specific errors. The full reference is at License errors. Point your operations runbook there, since these are usually fast fixes once you know the symptom.

AGPL in practice

If you're running the Community Edition, AGPL v3.0 has a few real-world boundaries:

  • Running Community for your internal team. Fine, no obligations beyond AGPL terms.
  • Modifying Community for internal use. Fine, AGPL specifically allows this.
  • Hosting Community as a service for external customers. AGPL requires you to publish your modifications, including any changes you've made.
  • Embedding Community inside a commercial product. AGPL-affecting territory. Either comply with AGPL's source-disclosure requirements or talk to sales about a commercial license.

Most teams self-hosting Plane for internal project management never hit these boundaries. If you're not sure where you sit, ask your legal team or contact us before building anything customer-facing on top of Community.


4. When self-hosted fits

Self-hosting Plane fits the following scenarios.

1. Regulatory or contractual data residency. GDPR with strict country-level residency, sector rules (HIPAA, financial regulations), or customer contracts that specify where data sits. Self-hosting puts data on infrastructure you can point an auditor at.

2. Air-gapped or sovereign cloud. Your network has no outbound internet, or you operate in a sovereign cloud where third-party SaaS isn't permitted. The Airgapped Edition is built for this.

3. Internal-only integrations. You need Plane to integrate with services that aren't on the public internet: internal Git, internal ticketing, internal SSO, internal monitoring. Self-hosted lives on the same network as the things it talks to.

4. Upgrade timing control. Multi-week change windows, frozen periods around financial reporting, change-advisory-board approvals. Self-hosted lets you upgrade on your calendar. See Upgrade Plane.


5. What you're running

Plane is a multi-service application: eight application services plus a data layer.

Application services

  • Web. The main user-facing Next.js app at your primary domain.
  • Space. Public-facing project pages (deployed views, intake forms, and similar).
  • Admin. The admin console for instance-level configuration.
  • Live. Real-time collaboration backend (Yjs WebSocket server) for pages and work items.
  • API. The Django REST API that everything else calls.
  • Worker. Celery background workers for async jobs (notifications, webhooks, exports, AI).
  • Beat. Celery scheduler that triggers periodic tasks.
  • Migrator. One-shot DB migration job that runs on each upgrade.

Data layer

  • Postgres. Primary database. Holds workspaces, projects, work items, pages, users, and everything transactional.
  • Redis. Cache, session store, real-time pub/sub.
  • RabbitMQ. Message broker for the Celery workers.
  • Object storage. S3-compatible (MinIO, AWS S3, GCS, Azure Blob). File uploads, attachments, exports, and AI artifacts.
  • OpenSearch (optional). Full-text search index. Without it, search falls back to Postgres-based search.

The full breakdown of versions, ports, resource recommendations, and dependency graph is at Plane Architecture. For the complete environment-variable surface across all services, see Environment variables.


6. What your team operates

Skills your operators need

Time budget

  • Week 1: deploy and stand up. Pick a deployment method, provision infrastructure, install, configure auth, smoke-test. 1 to 3 days of an FTE for Docker Compose, 3 to 7 days for production Kubernetes.
  • Month 1: harden for production. Backup and restore drill, monitoring, integrations, user onboarding, runbook documentation. Another 3 to 5 days spread across the month.
  • Year 1: operate. Roughly 4 minor upgrades plus 1 to 2 major upgrades, ongoing patches, capacity planning, and user support escalations. Plan for 0.1 to 0.25 FTE at small scale, 0.5 to 1.0 FTE at large scale.

On-call and incident response

Self-hosted Plane sits inside your operational perimeter. Decide ownership and escalation before you go live: who's on the rotation, what your internal runbook covers, when you escalate to Plane support. The troubleshooting docs cover common cases, and your support tier determines response times when you need to escalate.


7. What changes between editions

Editions differ in three ways that matter operationally: feature availability, release cadence, and license model.

Feature availability. Community has parity with the Free tier of Cloud. Commercial and Airgapped get full parity with Cloud's paid plans (Pro, Business, Enterprise Grid), license-gated.

Release cadence. Cloud is the test bed. New features ship there first, then Commercial, then Community. If your team needs the latest features quickly, that affects which edition fits.

License model. Community is AGPL with no key. Commercial uses an online license key tied to one workspace and one machine. Airgapped uses an offline license bundle. Edition transitions are supported but generally one-directional in practice. See Community to Commercial and Community to Airgapped.

Full feature, version, and codebase comparison: Plane Editions. Latest changes by edition: Changelog.


8. Lifecycle: deploy, configure, operate, upgrade

Self-hosting Plane is four phases.

Deploy

Pick a method, provision infrastructure, install the binary or chart, run the migrator, smoke-test. Hours to days.

Decisions: which deployment method, where Postgres and object storage live (managed services or self-run), which domain, which network topology. Changing these later is painful.

Configure

Authentication, network and TLS, secrets, integrations, and instance admin setup. Days to a week for a hardened production deployment.

Authentication is often a full day's work. Picking and configuring Google, GitHub, SAML, OIDC, or LDAP, plus the reset password flow and email delivery, takes most of the configure phase.

Operate

Day-2 work: user management, monitoring, backups, support, logs, capacity. Ongoing.

The non-negotiable here is Backup and restore. Set it up before users log in. Test the restore path within the first month. A backup you haven't restored from is a backup you don't actually have.

Upgrade

Plane ships frequently. Minor upgrades every 4 to 8 weeks, majors less often. Each upgrade involves a change window, a backup, the upgrade itself via Upgrade Plane, and post-upgrade verification.

Skipping upgrades for 6+ months means bigger upgrade-time risk, more breaking changes to handle at once, and missed security patches.


9. Patterns and anti-patterns

Patterns we've seen repeated across self-hosted deployments.

Anti-pattern: Postgres in the same Docker container as Plane in production. Fine for Docker AIO evaluations. In production, you can't snapshot the database independently, you can't scale it, and a container restart is a database restart. Use a managed Postgres or run it in a separate, properly backed-up container. External services walks through both options.

Anti-pattern: skipping backups for the first three months. Backups should be running before the first real user logs in. See Backup and restore.

Anti-pattern: one environment, no staging. Every upgrade becomes a production incident. A small staging instance, even on a single VM, lets you run upgrades there first.

Anti-pattern: underestimating object storage growth. File uploads, page attachments, AI artifacts, and exports add up faster than people expect. Set lifecycle rules early and monitor growth. The private bucket and database and storage docs cover the basics.

Anti-pattern: ignoring upgrades for six months or more. The longer you wait, the bigger the gap, the more breaking changes accumulate, and the more security patches you've missed. Pick a cadence, quarterly minimum.

Anti-pattern: one person knows the configuration. Document your specific setup (env vars, IdP configuration, backup destinations, certificate renewal procedure) somewhere your team can find it. The environment variables reference is where to start.

Pattern that works: managed services for the data layer. Run Plane application services in containers, but use managed Postgres and managed object storage (RDS, Cloud SQL, S3, GCS). You inherit your cloud provider's backup, scaling, and durability story for the highest-stakes pieces.

Pattern that works: separate licenses per environment. A separate license key for staging keeps prod clean and makes upgrade testing realistic.

Pattern that works: integrate with your existing observability stack. Ship Plane logs and metrics into whatever you already use rather than inventing monitoring for it. Start with View logs.


10. Planning checklist

Before you go to production, have a clear answer to each of these:

  1. Why self-hosting. The specific reason: data residency, air-gapped network, internal integrations, upgrade control, scale economics, customization.
  2. Owner. A specific person or team responsible for the system.
  3. Backup and disaster recovery target. RPO and RTO in concrete numbers.
  4. Upgrade cadence. Monthly, quarterly, or another rhythm. See Upgrade Plane.
  5. Escalation path. Internal on-call rotation and the support tier you escalate to externally.

Once these are settled, head to the Self-hosting overview and pick a deployment scenario.


11. Next steps

Try Plane self-hosted. Docker AIO gives you a single container with embedded services in about 10 minutes (POC only).

Plan a production deployment. Read Plane Editions to pick your edition. Read Plane Architecture to plan capacity and network. Then pick a deployment method.

Talk to a human. Talk to sales for pricing, contracts, professional services, and airgapped. Community Discord for open questions. GitHub issues for bugs and feature requests.

Continue to: Self-hosting overview →