Skip to main content
InfraGap.com Logo
Home
Getting Started
Core Concept What is a CDE? How It Works Benefits CDE Assessment Getting Started Guide Inner Loop vs Outer Loop Environment Drift Local vs Cloud CDEs for Startups
AI & Automation
AI Coding Assistants Agentic AI AI-Native IDEs Agentic Engineering AI Agent Orchestration AI Governance AI-Assisted Architecture Shift-Left AI LLMOps Autonomous Development AI/ML Workloads CDEs for Data Science GPU Computing
Agent Infrastructure
Agent Experience (AX) Agent Egress Control Computer Use Agents Agent Evals Agent Runbooks Agent Client Protocol AGENTS.md MCP Servers Git Worktrees Kubernetes Agent Sandbox Agent Fleets Agent Identity Prompt Injection Defense Agent Observability Context Engineering AI Code Review Bottleneck Headless Agents in CI Spec-Driven Development Agent Readiness Code Provenance
Implementation
Architecture Patterns DevContainers Advanced DevContainers Language Quickstarts IDE Integration CI/CD Integration Platform Engineering Developer Portals Container Registry Multi-CDE Strategies Remote Dev Protocols Nix Environments Hermetic Builds OpenTofu for CDEs Kubernetes Development
Operations
Performance Optimization High Availability & DR Disaster Recovery Monitoring Capacity Planning Multi-Cluster Development Troubleshooting Runbooks Ephemeral Environments Sandbox Environments Workspace Snapshots Database Branching
Security
Security Deep Dive Zero Trust Architecture Secrets Management Vulnerability Management Network Security IAM Guide Supply Chain Security Air-Gapped Environments AI Agent Security MicroVM Isolation Compliance Guide EU AI Act Cyber Resilience Act Data Residency Governance
Planning
Pilot Program Design Stakeholder Communication Risk Management Migration Guide Cost Analysis FinOps GreenOps Vendor Evaluation Training Resources Developer Onboarding Team Structure Platform Maturity Model Open Source CDEs AI Productivity Paradox Build vs Buy DevEx Metrics Productivity Engineering Industry Guides CDEs for Healthcare CDEs for Financial Services CDEs for Government Edge Development WebAssembly in CDEs
Resources
Tools Comparison State of CDEs 2026 Isolation Decision Tool Template Library
Learning Paths
All Paths Platform Engineer Security and Compliance Engineering Manager
Vendor Reviews
GitHub Codespaces Coder Ona Google Workstations Microsoft Dev Box Okteto Eclipse Che DevPod Daytona E2B
Head to Head
Coder vs Codespaces Coder vs Ona Ona vs Codespaces Coder vs Okteto Self-Hosted vs Managed E2B vs Daytona CDE Market Guide CDE vs Alternatives Case Studies Lessons Learned Glossary FAQ Sources & Citations

Self-Hosted vs Managed CDE

This decision does not turn on a feature list. It turns on whether you have a funded platform team - and if you do not, self-hosting is a commitment you will quietly default on.

A decision framework, with the deployment models checked against vendor documentation as of July 2026

The Thesis, Stated Plainly

Most evaluations of this question ask the wrong thing first

The usual framing is control versus convenience, and it produces a scoring matrix that both sides can win. The more useful framing is a staffing question: is there a funded, named team whose job description already includes operating internal infrastructure, and does that team have capacity for one more service with a pager attached to it?

If the answer is yes, self-hosting is a reasonable choice and the feature comparison is worth having. If the answer is no, the feature comparison is a distraction, because the failure mode of a self-hosted development platform is not that it lacks a feature. It is that it gets installed by an enthusiastic engineer, works well for a year, falls behind on upgrades when that engineer changes teams, and is quietly abandoned - at which point everyone goes back to local laptops with a worse taste in their mouth than before.

That failure has nothing to do with the software. It is the predictable result of taking on a permanent operational obligation without funding it. Naming the owner before the pilot, rather than after, is the single highest-value step in this entire decision.

This page does not tell you which side to pick. Both are correct under conditions the other cannot meet, and the conditions are set out below. What it does argue is that you should answer the staffing question before you open a single vendor comparison.

There Are Four Positions, Not Two

"Self-hosted" is used loosely enough across this market that the word alone tells you almost nothing

PositionWho runs the control planeCould you keep running without the vendorExamples as of July 2026
Open and self-operatedYouYesCoder Community, AGPL-3.0. E2B, Apache-2.0, with a Terraform self-hosting path documented for Google Cloud and AWS only, and AWS marked beta.
Self-operated but licensedYouOnly while the key is validOkteto Platform - a Helm chart in your own cluster that requires a license key issued with a subscription
Your compute, vendor control planeThe vendorNoOna Enterprise runners in your AWS or GCP VPC. Daytona offers the same shape on compute you provide, but it sells agent sandboxes rather than development environments, so it does not belong on a CDE shortlist.
Fully managedThe vendorNoGitHub Codespaces, which has no self-hosted or bring-your-own-cloud form at any tier

Deployment models in the table are taken from each vendor's own documentation as of July 2026: coder.com/pricing, Okteto's self-hosted documentation, ona.com/pricing, github.com/e2b-dev/E2B, and github.com/features/codespaces. Citation standard: sources.

Rows two and three are where procurement documents go wrong. A requirement written as "must be self-hosted" is usually shorthand for one of two very different things: code must not leave our boundary, or we must be able to keep operating if the vendor changes course. The third row satisfies the first and fails the second completely. The second row satisfies the first, and satisfies the second only for as long as somebody keeps renewing.

Separate those two requirements in writing before you shortlist anything, because they eliminate different vendors and a shortlist built on the merged version will contain products that cannot possibly meet it. Vendor evaluation turns that into a written question a salesperson has to answer.

The Ongoing Cost of Self-Hosting

Vendors of self-hosted products advertise the install. This is the part after the install.

The install genuinely is easy, and the demos are honest about that. What follows is a permanent obligation that no vendor puts on a pricing page, because it is your cost rather than theirs. It is not exotic work - it is ordinary production operations, applied to a system your engineers depend on to do any work at all.

Upgrades, forever

Active projects release often - Coder shipped across parallel version lines through mid-July 2026, with a separate stable line its own release notes recommend for customers without a staging environment. Somebody has to read release notes, maintain that staging environment, and schedule the work. Skipping it for two quarters turns a routine upgrade into a migration.

A database you now own

Coder keeps all platform state in PostgreSQL. That means backups, restore tests, retention, failover, and capacity - the same obligations as any other production database, on a system whose outage stops development entirely rather than degrading a feature.

More components than you think

Okteto's Helm chart brings an ingress controller, an API, a BuildKit build service, a frontend, a migration component, a container registry, and a validation webhook. Coder brings a server, a provisioner, ingress, and a template library. Each is a coherent bundle; none is a single binary.

Templates are a product you maintain

On Coder the workspace definition is Terraform your team writes. That is real power and real ongoing work: base images to patch, provider versions to bump, and a permissive template that nobody reviewed becoming your isolation boundary by accident.

Being on call for developer time

When the control plane is down, nobody can start a workspace. The blast radius is the whole engineering organization, which is a higher severity than most internal tools carry, and it means an actual rotation rather than a best-effort owner.

The cloud bill is yours too

Self-hosting moves compute onto your invoice: every workspace, the storage that persists between sessions, registry traffic, and egress. Auto-stop and quota policy matter more to this number than any license figure, and nobody owns that policy by default.

No credible measured figure exists for this. Nobody has published a defensible, reproducible measurement of the engineer-time required to operate a self-hosted CDE across organizations - and the number would not transfer anyway, because it depends on your existing platform maturity more than on the product. Any comparison quoting a specific figure for this is extrapolating from one deployment that is not yours. Estimate it internally, against your own on-call and upgrade history, and treat that estimate as the load-bearing number in the decision.

The Real Cost of Managed

Cheaper to start is not the same as cheaper, and the risks are different rather than absent

Consumption pricing drifts by default

Managed CDEs bill by usage, and usage grows without anyone deciding it should. GitHub publishes every Codespaces rate, which makes the model honest - but it also means idle time you forgot to stop bills at the same rate as work, and storage keeps accruing on a stopped codespace until it is deleted.

Where the unit is less familiar the drift is harder to see. Ona bills in OCUs, which its documentation describes as covering both agent token usage and environment runtime, so spend can move because agent behavior changed rather than because anyone resized a machine.

Constraints you cannot configure your way out of

A managed product's limits are architectural, not tiered. Codespaces gives you a Linux container on GitHub's infrastructure; there is no Windows build, no macOS, nothing below the container, and no bring-your-own-cloud at any price. If one of those is disqualifying, no negotiation and no future release fixes it.

Data location is the version of this that most often surprises buyers. A regional residency guarantee satisfies a jurisdiction requirement. It does not satisfy "must execute inside our VPC", and the two are routinely conflated. See data residency.

Vendor risk is the cost you pay in one lump, later

This category has churned badly. AWS closed Cloud9 to new customers and then closed CodeCatalyst, JetBrains discontinued Space, Daytona left the category for agent sandbox infrastructure, and Ona has an agreement to join OpenAI that had not closed as of July 2026. A managed product that is discontinued takes your environments with it, and the migration lands on the quarter it happens rather than the quarter you planned. That is exactly the risk a self-hosted deployment converts into a slower, more controllable problem - which is the strongest honest argument for self-hosting, and it is a risk argument rather than a features one.

Who Should Choose Which

Conditions you can check against your own organization chart today

Self-host when

  • A funded platform team already runs internal services on a rotation, and you can name the person who will own this one.
  • Code must not leave your network, and no regional guarantee satisfies the reviewer who has to sign.
  • You are air-gapped or on-premises, where a vendor control plane is disqualifying regardless of everything else.
  • Workspaces must be shapes a managed product does not offer - VMs, bare metal, specific GPU hardware, non-Linux toolchains.
  • Continuity is a stated requirement, and you want an installation that survives a change of vendor direction.
  • Utilization is high and sustained on your own committed-spend or reserved-capacity discounts.

Buy managed when

  • You cannot name the owner. This one condition outweighs every feature comparison on the other side.
  • Your platform team exists but is fully committed, and this would be an unfunded addition rather than a planned one.
  • A Linux container genuinely covers your toolchain and your compliance position.
  • Usage is intermittent, so consumption billing works in your favor rather than against it.
  • You need this working within weeks, and the realistic alternative is not a self-hosted platform but continuing to do nothing.
  • You are validating whether centralized environments help at all, and a reversible pilot beats a permanent obligation.

The middle position, and when it is the right answer

The your-compute-vendor-control-plane row is genuinely useful for one specific organization: one whose security review demands a network boundary but whose engineering organization has no capacity to operate a platform. That is a common shape and it deserves a real option rather than a lecture. Just be precise about what you are buying. You get a boundary and a data-jurisdiction story; you do not get an exit, because nothing in the relationship survives the vendor. Buy it deliberately for the first reason, and do not let anyone record it as satisfying the second.

What Cannot Be Compared

The numbers this framework deliberately refuses to supply

The break-even seat count

There is no publishable number of developers above which self-hosting becomes cheaper. It cannot exist while Coder Premium, Okteto Scale and Enterprise, and Ona Enterprise are all unpublished, and it would still depend on your cloud discounts and your existing platform staffing. Any article giving you a headcount threshold made it up.

Operational effort in engineer-days

No independent measurement of the ongoing cost of running a self-hosted CDE was found, from any publisher. The honest instruction is to estimate it internally from your own upgrade and on-call history, and to weight that estimate heavily rather than treating it as a rounding error.

Reliability, either way

Comparable uptime data for self-hosted deployments does not exist, because those deployments are yours and nobody aggregates them. Assuming a managed service is automatically more reliable than your own platform team is an assumption, not a finding, and it runs in both directions.