DIGI Short for Digital

Zero config. Just deploy.

Production in ~60 seconds.

curl -fsSL https://scaliir.digital/cli/install.sh | bash
start deploy status domain ssh cost down
~/my-project
digi start
◇ Provider Hetzner
◇ Region Nuremberg (eu-central)
◇ Type cx22 · 2 vCPU · 4GB
✓ Server provisioned 34s
✓ Daemon installed
✓ mTLS configured
digi deploy
◇ Packed 1.4MB
✓ Deployed 1.2s
● SSR running on :4321
digi domain --set myapp.dev
✓ DNS verified
✓ TLS issued (Let's Encrypt)
Live at https://myapp.dev
<60s
Cold start
~1s
Deploy
0
Downtime
1
Binary

How it works

One CLI. One daemon.
Clear separation.

digi provisions your server and configures the runtime. scaled runs on the server as reverse proxy, deploy API, TLS manager, and process supervisor.

1

Provision

digi start creates a VPS, generates mTLS certificates, installs the daemon via cloud-init, and stores credentials in your OS keychain.

Server: cx22 · 2 vCPU · 4GB · Nuremberg
Auth: mTLS (ECDSA P-256) + Bearer fallback
Store: macOS Keychain / libsecret
2

Deploy

digi deploy packs your dist/, uploads via mTLS, extracts on the server, and starts the SSR process. Blue/green swap — zero downtime.

Pack: tar.gz of dist/ → mTLS upload
Swap: atomic POSIX symlink
Ports: :4321 ↔ :4322 (blue/green)
3

Serve

The daemon handles everything: static assets, SSR proxy, TLS termination, HTTP→HTTPS redirect. One process, no Nginx, no Caddy.

TLS: ACME DNS-01 (Cloudflare / Hetzner DNS)
Proxy: static → SSR → SPA fallback
Process: managed subprocess via --exec

Commands

Seven commands. That's it.

digi start Provision a server, install daemon, configure mTLS
digi deploy Pack dist/, upload, extract, blue/green swap
digi status Server health, deployment info, process state
digi domain Set custom domain, issue TLS via ACME DNS-01
digi ssh Open SSH session to your server
digi cost Show monthly cost estimate for your infrastructure
digi down Destroy server, clean up secrets, remove SSH keys

Under the hood

The scaled daemon

Compiled Bun binary

Single executable. Bun runtime + daemon code. No install, no deps.

Reverse proxy

Static assets, SSR proxy, SPA fallback. No Nginx required.

Blue/green deploys

Alternate port, health check, atomic swap. Zero downtime.

ACME DNS-01 TLS

Let's Encrypt via Cloudflare or Hetzner DNS. Auto-renewal.

mTLS execution API

Deploy, rollback, domain — mutual TLS on :8443. Pinned CA.

Process supervisor

SSR subprocess lifecycle. Spawn, kill, restart, health check.

Built with

Minimal dependencies.Strong primitives.

Four external TypeScript dependencies. Everything else is Bun, OS primitives, and infrastructure APIs.

External dependencies
cac picocolors acme-client @clack/prompts
Platform & infrastructure
Bun TypeScript Hetzner Cloud API Hetzner DNS Let's Encrypt cloud-init systemd mTLS (ECDSA) POSIX symlinks tar/gzip

Frameworks

Works with Astro + Bun.

Ships with @scale.digital/astro-bun — ISR, ETag/304, static manifest. More frameworks planned.

Astro
Qwik
Nuxt
SvelteKit

greyed = planned

Stop configuring.
Start shipping.

One command to provision. One command to deploy. That's the whole workflow.

$ bunx @scale.digital/cli start && bunx @scale.digital/cli deploy
WhatsApp Telegram Mail