Public beta

Run your deployment strategy, not a control plane.

TurboCI turns one YAML file into provisioned VPS fleets, private networking, rollout-safe clusters, and repeatable multi-cloud environments.

Download the Node.js build

Deployment graph

One config driving two clouds and a guarded rollout
Live topology
.turboci/config.yaml
yaml
# Shared production shape - 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 configs

Rollout status

Safe mode

1 filemodels networking, servers, and rollout policy
4 cloudssame deployment shape across Hetzner, AWS, GCP, and Azure
0 downtimehealth checks gate every cluster before traffic shifts
Capabilities

Everything required to run the fleet, without dragging in a platform.

TurboCI keeps the surface area tight: one orchestrator, one config, and enough deployment machinery to handle real production traffic.

01

Process, container, or balancer

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.

02

One deployment shape, four providers

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.

03

Health checks gate every shift

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.

04

Private by default

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.

05

Config stays readable

One YAML, Everything

No Terraform modules, no Kubernetes manifests, no Helm charts. Just one simple YAML that defines your entire infrastructure.

06

Provision + deploy in one pass

VPS Orchestration

Provision servers, install dependencies, configure services, manage load balancers, all from one orchestrator.

Config surface

One deploy file defines the fleet.

A TurboCI deployment carries the infrastructure shape, service topology, runtime commands, and rollout guards in one readable config.

.turboci/config.yaml
yaml
# Add to your project root - deployment_name: web_hetzner provider: hetzner location: ash services: web: instances: 2 clusters: 3 dependencies: turboci: - bun run: start: work_dir: /app cmds: - pm2 start "bun server.ts" healthcheck: cmd: curl http://localhost:3000/health test: ok - deployment_name: web_aws provider: aws location: us-east-1 duplicate_deployment_name: web_hetzner

Setup stays flat

Add only the provider credentials you need. TurboCI detects the rest.

.env
bash
# 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

Configuration that stays operationally small

The same file handles provider choice, runtime setup, deployment duplication, and rollout policy. The operational model stays close to the workload instead of fragmenting into separate stacks.

One source of truth

Provider choice, service shape, and rollout rules stay in the same file.

Topology comes along

Private networking, relay routing, and balancer wiring are all implied by the deployment model.

Cloning stays cheap

Duplicate one deployment into another cloud with an override instead of a rewrite.

Example

`instances: 2` plus `clusters: 3` means six servers in three guarded batches.

Each batch can be rebuilt, checked, and promoted independently. That gives you a predictable rollback boundary without introducing a second scheduler.

1

config file in TurboCI

10+

manifests per cloud in Kubernetes

20+

modules and resources in Terraform

Rollout safety

Updates that behave like an operator with a steady hand.

TurboCI keeps at least one healthy cluster in rotation while the next one is provisioned, checked, and promoted.

Phase 1

Cluster A stays live

Traffic keeps flowing to healthy instances while the next cluster is prepared.

Serving

Phase 2

Cluster B updates in isolation

Provisioning, dependency installs, runtime hooks, and health checks happen before traffic moves.

Updating

Phase 3

Balancer shifts only after success

Once the health check passes, TurboCI adds the new cluster into rotation and continues.

Shifted

Example

`instances: 2` plus `clusters: 3` means six servers in three guarded batches.

Each batch can be rebuilt, checked, and promoted independently. That gives you a predictable rollback boundary without introducing a second scheduler.

Health policy

1 cluster

promoted at a time

5 retries

with 5-second spacing

Deployment sequence

Provision, prepare, run, and promote repeat in a fixed order. The rollout stays deterministic because the scheduler only advances after a healthy result.

Sequential by design

Instances update together inside a cluster, but clusters move one at a time.

Health check gated

Every cluster must pass its command-based health check before it can receive traffic.

Failure stops the rollout

If a cluster never becomes healthy, TurboCI halts the remaining steps and leaves live capacity untouched.

Workflow

From repository to live fleet in three clean moves.

The workflow stays close to the application: define it, point TurboCI at your provider credentials, and let the orchestrator carry the rollout.

01Step

Model the deployment

Describe the provider, services, cluster counts, health checks, and runtime commands in one YAML file.

.turboci/config.yaml
02Step

Load provider credentials

Set only the cloud credentials you actually need. TurboCI resolves the matching provider for each deployment.

TURBOCI_HETZNER_API_KEY=...
03Step

Push one command

TurboCI provisions the fleet, syncs your code, executes the runtime steps, and shifts traffic cluster by cluster.

turboci up

Control surface

Target, skip, and tear down without leaving the same CLI.

The same command surface handles full deploys, partial service updates, and selective teardown. No second toolchain needed.

turboci up -t web_hetzner.web
turboci up --skip web_aws.api
turboci down -t web_hetzner
Positioning

The point is to ship infrastructure, not inherit a platform.

TurboCI sits in the gap between app deployment and infrastructure sprawl. It handles the operational mechanics without requiring a cluster platform or a cloud-specific resource graph.

1

config surface

4

major cloud targets

0

extra control planes

Operating stance

TurboCI collapses provisioning and rollout logic into one deployment model. You still ship machines and services, but without adopting a platform whose main job is abstracting those same machines.

Comparison pointTurboCIKubernetesTerraform
Infrastructure modelOne concept: deployment -> VPS + private networkPods, Services, Ingress, ConfigMaps, Secrets...Provider-specific resources (EC2, VPC, ALB, RDS...)
ConfigurationOne YAML fileMultiple manifests + Helm chartsDozens of .tf files + modules per provider
NetworkingAutomatic per deployment (NAT + routing built in)Manual CNI, Services, and Ingress setupDefine VPCs, subnets, NAT gateways, and security groups
Multi-cloudNative. Same config, any provider.Complex federation, separate clustersRewrite modules per provider
Workload flexibilityContainers, Compose, or plain appsContainers onlyInfrastructure only
Load balancingBuilt-in service typeIngress controllers + cloud load balancersAWS ALB, Hetzner LB, etc.

Start small

Download TurboCI and ship the first deployment from one file.

Begin with the binary, keep the docs nearby, and only reach for the Node build if that fits your environment better.

Node.js build

Lean config. Cross-platform. No platform sprawl.

deploy.log
bash
$ turboci up -> Private network ready -> SSH keys registered -> Provisioning 6 servers -> Syncing files through relay -> Installing dependencies -> Preflight complete -> Application started -> Healthcheck passed -> Load balancer updated Deployed in 3m 47s