# comparison
We took a real production platform built with Terraform, Helm, CloudFormation and Ansible across 26 repositories, and rebuilt it in Orbi. Identical infrastructure — an EKS cluster, 3 Aurora PostgreSQL databases, Redis, Kafka, S3, a full monitoring stack, DNS, email, and 22 microservices. Here is the side-by-side.
| Terraform / Helm | Orbi | |
|---|---|---|
| Repositories | 26 | 1 |
| Files | 1,086 | 11 |
| Lines of code | 108,511 | 1,235 |
| Dependencies | 63 | 3 |
| Time to first plan | 30–60 min | 5 min |
| State backend | S3 + DynamoDB (bootstrap first) | SQLite, zero setup |
Terraform state is an opaque JSON blob you inspect with CLI grep. Orbi state is SQL.
SELECT id, resource_type, status FROM resources ORDER BY resource_type;
One query, all providers, all environments, live.
Terraform: 5 directories, ~40 files each, 211 files of duplicated config — and versions drift between them silently. Orbi: one variable.
SET @pg_version = '15.10'; -- one line, every environment, no drift
Terraform/Helm: copy a chart, write a .tf file, add values in 4 env directories, touch CI — 16+ files. Orbi:
CREATE RESOURCE 'k8s_deployment' id = 'newservice' namespace = 'services' image = @registry || '/newservice:latest' replicas = 2 port = 8080 ON PROVIDER 'k8s';
6 lines, 1 file.
Terraform has no post-deploy verification. Orbi:
ASSERT EXISTS (SELECT 1 FROM tcp_probe('api.example.com', 443) WHERE status = 'open'), 'API gateway not reachable';
| Dimension | Terraform | Orbi | Winner |
|---|---|---|---|
| Lines of code | 108K | 1.2K | Orbi (88×) |
| Dependencies | 63 | 3 | Orbi (21×) |
| Onboarding | 30–60 min | 5 min | Orbi |
| State queries | CLI tools | SQL | Orbi |
| Env management | 211 files | 1 variable | Orbi |
| Post-deploy verify | Manual | Built-in ASSERT | Orbi |
| Rollback on failed apply | No | Yes | Orbi |
| Ecosystem maturity | 10+ years | v0.6.x | Terraform |
| Team familiarity | Standard | New | Terraform |
Terraform wins on maturity and familiarity.
Orbi wins on everything else.