Ship anything. Anywhere. At scale.
TurboCI is a configuration-driven infrastructure orchestrator for deploying multi-cloud server stacks. Server provisioning, private networking, load balancing, and zero-downtime rolling deploys, all from a single YAML file.
# .turboci/config.yaml - Deploy to multiple clouds with one config
- deployment_name: my_app_hetzner
provider: hetzner
location: hil
services:
web:
instances: 3
clusters: 2
healthcheck:
cmd: curl http://localhost/health
test: OK
- deployment_name: my_app_aws
provider: aws
location: us-east-1
duplicate_deployment_name: my_app_hetzner # Inherit all configsEverything you need, nothing you don't
Terraform is overkill. Kubernetes is overhead. TurboCI is enough.
Run Any Workload
Default VPS, Docker, or NGINX load balancer. Pick the service type that fits. Run any command on any server, in any order.
Multi-Cloud by Default
Deploy to Hetzner, AWS, GCP, or Azure. Use duplicate_deployment_name to mirror a full stack to another provider with a single config override.
Zero-Downtime Rollouts
Clusters are deployed sequentially. Each cluster must pass a health check before the next one starts, and before traffic is shifted. At least one cluster stays live throughout.
Networking Done For You
Every deployment gets a private network and a relay server that acts as NAT gateway, distribution hub, and SSH entry point, automatically.
One YAML, Everything
No Terraform modules, no Kubernetes manifests, no Helm charts. Just one simple YAML that defines your entire infrastructure.
VPS Orchestration
Provision servers, install dependencies, configure services, manage load balancers, all from one orchestrator.
One config file. All your clouds.
While Kubernetes requires different manifests per cloud and Terraform needs separate modules for each provider, TurboCI uses one YAML file for everything.
Single YAML
Define all your deployments, services, and instances in one file. No separate configs per cloud provider.
Simple Setup
Just add your cloud provider API keys as environment variables. That's it.
# Add to your environment or .env file
TURBOCI_HETZNER_API_KEY=your_key
TURBOCI_AWS_ACCESS_KEY=your_key
TURBOCI_AWS_SECRET_ACCESS_KEY=your_key
Only add keys for the clouds you use. TurboCI automatically detects available providers.
Compare the complexity
Updates that protect production
TurboCI's cluster-based rolling rollout ensures zero downtime. At least one cluster always stays live during every deployment.
Sequential Cluster Rollout
Servers are grouped into clusters. TurboCI deploys clusters one at a time. Each cluster must be healthy before the next one starts.
With instances: 2 and clusters: 3, you get 6 servers updated in 3 sequential batches of 2.
Health-Checked Before Go-Live
Each cluster must pass a health check: a command whose output must contain an expected string, before its load balancer upstream is updated.
TurboCI retries up to 5 times with 5-second delays. If it never passes, the deployment halts and the remaining clusters are left untouched.
Zero Downtime, Always
Because clusters are updated sequentially and traffic is only shifted after a successful health check, at least one cluster is always live and serving requests throughout the entire rollout.
If a cluster fails its health check, the rollout stops immediately. The live clusters keep running, and your load balancer continues routing traffic to them, with no manual intervention needed.
Deploy in three simple steps
From zero to production in minutes, not days.
Define Your Infrastructure
Create a config file at .turboci/config.yaml in your project root, or run turboci init for an interactive setup wizard.
# .turboci/config.yaml
- deployment_name: web_hetzner
provider: hetzner
services:
web:
instances: 2
clusters: 3
Set Your API Keys
Add cloud provider API keys to your environment or .env file. One-time setup.
# .env file
TURBOCI_HETZNER_API_KEY=your_key
TURBOCI_AWS_ACCESS_KEY=your_key
TURBOCI_AWS_SECRET_ACCESS_KEY=your_keyDeploy & Scale
Run one command and watch TurboCI orchestrate everything automatically.
$ turboci up
✓ Provisioning servers
✓ Configuring network
✓ Deployed successfullyAdvanced: Target or Skip Services
Deploy only specific services:
$ turboci up -t web_hetzner.web
$ turboci up --target web_hetzner.web web_aws.apiSkip specific services:
$ turboci up -s web_hetzner.web
$ turboci up --skip web_hetzner.web web_aws.apiTear down your infrastructure:
$ turboci downWhy teams choose TurboCI
One orchestrator replaces Kubernetes + Terraform. No vendor lock-in, no complexity.
| Feature | TurboCI ✓ | Kubernetes | Terraform |
|---|---|---|---|
| Infrastructure Model | One concept: deployment → VPS + private network | Pods, Services, Ingress, ConfigMaps, Secrets... | Provider-specific resources (EC2, VPC, ALB, RDS...) |
| Configuration | One YAML file | Multiple manifests + Helm charts | Dozens of .tf files + modules per provider |
| Networking | Automatic per deployment (NAT + routing built-in) | Manual CNI, Services, Ingress setup | Define VPCs, subnets, NAT gateways, security groups |
| Multi-Cloud | Native. Same config, any provider. | Complex federation, separate clusters | Rewrite modules per provider |
| Workload Flexibility | Containers, Compose, or plain apps | Containers only | N/A (infrastructure only) |
| Load Balancing | Built-in service type | Ingress controllers + cloud LBs | AWS ALB, Hetzner LB, etc. (vendor lock-in) |
| Databases | Deploy on VPS, full control | StatefulSets or external services | RDS, CloudSQL, etc. (vendor lock-in) |
| Learning Curve | Hours | Weeks to months | Days to weeks |
Ready to simplify your deployments?
Download TurboCI and deploy your first application in under 10 minutes.
$ turboci up
✓ Private network ready
✓ SSH keys registered
✓ Provisioning 6 servers
✓ Syncing files → relay → servers
✓ Installing dependencies
✓ Preflight complete
✓ Application started
✓ Healthcheck passed
✓ Load balancer updated
Deployed in 3m 47sLean Configuration • Cross-platform • No installation required