Simple orchestration for modern services.

Deploy your services and processes with a single binary, from one server to production infrastructure.

$ curl -fsSL https://get.runestack.io | sh
Runs on
DigitalOcean AWS EC2 Hetzner Google Cloud Docker systemd Terraform GitHub Actions
One binary
ARTIFACT
runed
28 MB
linux/amd64
One static binary
Zero control-plane sprawl
28 MB drop-and-run
Containers or processes
CONTAINERweb-gatewayready
PROCESSworker-queueready
CONTAINERpostgresready
OCI image workloads
Native process supervision
One unified scheduler
CLI-driven
rune cast1.8s
rune get12ms
rune scale0.4s
rune logslive
rune exec
Declarative service specs
cast · scale · logs · exec
gRPC + REST control API
Yours to host
WEB_126ms
WEB_222ms
IOS_176ms
TEST25ms
WEB_1 WEB_2
Self-host anywhere
Terraform any cloud
Local data & keys

A small set of primitives, composed.

Rune borrows the mental model you already know from Kubernetes and Nomad — services, namespaces, secrets, policy — and strips it to the parts that earn their keep.

Cast it. Watch it roll.

One verb deploys a service from a declarative file; the rest of the surface is the same muscle memory you'd expect — get, scale, logs, exec. No kubectl context juggling, no YAML archaeology.

rune castApply a service or runeset; rolls instances with health gating.
rune getInspect services, instances, secrets — tables or -o yaml.
rune scaleResize a service to N instances, live.
rune logsStream structured logs with -f follow.
rune execShell straight into a running instance.
$ rune cast -f service.rune parsed service.rune · 1 service pushed ghcr.io/acme/api-core:1.4.0 rolling out api-core production instance api-core-7fk2d ready instance api-core-9xb1c ready instance api-core-2mn8p ready api-core cast to production at v4 3/3 ready · 1.8s
$ rune get services -n production NAME READY STATUS VERSION AGE web-gateway 3/3 running 1.24.0 14d api-core 4/4 running 3.11.2 6d auth-service 2/2 running 2.0.7 14d payments 2/3 degraded 1.8.4 2d worker-queue 5/5 running 1.8.4 2d postgres 1/1 running 16.3 29d
$ rune scale worker-queue --to 5 scaling worker-queue 3 5 instance worker-queue-a1 ready instance worker-queue-b2 ready worker-queue scaled to 5 5/5 ready
$ rune logs api-core -f 12:04:41.882 info request completed method=GET path=/v1/orders status=200 dur=42ms 12:04:41.903 info db pool acquired conn=11/25 wait=0ms 12:04:42.140 warn upstream latency high service=payments p99=820ms 12:04:42.512 info grpc auth.Verify ok subject=user:48211 dur=8ms 12:04:42.770 info request completed method=POST path=/v1/checkout status=201 dur=118ms
$ rune exec api-core -- sh # in api-core-7fk2d $ ls /etc/secrets/db url username password $ cat /etc/config/log.level info $ env | grep DATABASE DATABASE_URL=postgres://acme_app:***@postgres:5432/acme
api-core.runeservice spec
service:
  name: api-core
  image: ghcr.io/acme/api-core:1.4.0
  namespace: production
  instances: 3
  ports:
    - 8080/http
  envFrom:
    - secretRef: db-credentials
    - configRef: api-config
  secretMounts:
    - secretName: jwt-signing-key
      mountPath: /etc/secrets/jwt
  health:
    http: /healthz
    interval: 10s

Package once. Version forever.

A runeset bundles the services, secrets refs, config and policy for an app into one versioned artifact — Rune's answer to a Helm chart. Lint it, pack it, cast it, roll it back. The file above is all it takes to stand a service up with secrets, config and health checks wired in.

rune lintStatic-check a runeset before it ever touches a cluster.
rune packBundle into a versioned, distributable artifact.
rune depsResolve and visualize service dependency order.
Runeset reference →

From a single droplet to a Terraform fleet.

Official Terraform modules provision runed across the major clouds. terraform apply, point your CLI at the context, and cast.

DigitalOcean
module "rune/digitalocean"
Droplet + block storage
AWS
module "rune/aws"
EC2 + EBS + security groups
Hetzner
module "rune/hetzner"
Cloud server + volumes
Google Cloud
module "rune/google"
Compute Engine + PD

The orchestrator, right-sized.

Rune isn't trying to run Google. It's trying to run your stack — with the smallest surface area that still feels like a real platform.

CapabilityRuneKubernetesNomad
Install footprintsingle 28MB binarycontrol plane + etcd + kubeletserver + agents
Runs containers yes yes yes
Runs raw processes yes yes
Encrypted secrets built-in envelope encryptionbase64 + addonsvia Vault
Networking & policy built-inCNI pluginsvia Consul
Identity & RBAC built-in yesACLs
Control APIgRPC + RESTRESTHTTP
Time to first deployminutesdayshours

// Reflects typical out-of-the-box setups · June 2026 · Kubernetes and Nomad are excellent at scale — this is about fit, not winners.

A reference you host.

Rune's gRPC + REST surface renders as a Markline three-pane reference — endpoints, schemas and a request explorer — generated on every build and served from your own box.

Services
POST Cast service
GET List services
GET Get service
DEL Delete service
Secrets
POST Create secret
GET List secrets
Volumes
POST Create volume
Cast service
POST https://rune-prod:7700/v1/services:cast
Apply a service spec. Creates or updates the service and rolls its instances with health gating. Idempotent on (namespace, name).
Body parameters
specrequiredServiceSpecThe full service definition — image, instances, ports, mounts.
namespacestringTarget namespace. Defaults to default.
dryRunbooleanValidate and diff without applying.
grpcurlcurlGo
$ grpcurl -d '{
  "namespace":"production",
  "spec":{ "name":"api-core" }
}' rune-prod:7700 \
  rune.v1.Services/Cast
● 200 OK · 1.8s
{
  "service": "api-core",
  "version": 4,
  "ready": "3/3"
}

Every line your cluster emits, queryable.

rune.sight is the log explorer that ships with runed — label-based search, saved views, log-based alerts and retention, served from the same box. No agents to wire up, no external SaaS to pay for.

{service=~"payments|api-core"} |= "503" | level=~"error|warn"
Live 1h
14:32:01.882errorpaymentscheckout failed: upstream returned 503 retry=2/3 order_id=ord_9f2ab1c4
14:31:58.140warnapi-coreupstream latency high service=payments p99=820ms
14:31:55.512errorpayments500 internal error path=/v1/payments/intent request_id=req_8c1d04
14:31:52.903infoapi-corerequest completed method=POST path=/v1/checkout status=201 dur=118ms
14:31:49.220infoweb-gatewaydb pool acquired conn=11/25 wait=0ms
14:31:46.071warnapi-coreretry scheduled attempt=1/3 backoff=200ms

Log Explorer

Search every line by label — namespace, service, level, node — with live facets and a severity histogram.

Saved Views

Pin the queries your team runs daily and share them across the cluster.

Alert Rules

Fire on log patterns — error rates, 5xx spikes, ingest drops — straight from a saved query.

Ingestion

Per-node rates, top streams and 14-day retention — all stored on your own box.

Open RuneSight // ships with runed 0.34 · no external SaaS

Read the source. Run the source.

Rune is MIT-licensed and built in the open. No SaaS, no seats, no phone-home — the same binary you read is the one you ship.

0
SaaS dependencies
MIT
License · fork it
1
Binary to deploy
v0.34
Latest release
Ship in minutes

Own your platform.

One binary to install. One CLI to learn. Zero control planes to babysit.

$ curl -fsSL https://get.runestack.io | sh