← back

Runway.

Self-service IDP. Pick a template, Terraform provisions, the WebSocket streams live.

React 18ViteNode.jsExpresswsTerraformsql.js
React 18 Vite browser UI REST WS (stdout) Express + ws backend policy engine fail fast terraform runner child proc TTL scheduler 1 to 72h terraform apply stdout streamed provider Docker · AWS 8 templates sql.js (in-memory) environments audit · env_logs MockCloud :4566 hook sqs / dynamo pre/post · local
architecture, roughly

why

Most internal developer platforms are either Kubernetes-shaped or yet another Jira. Runway is the smallest possible IDP: a curated catalog of opinionated templates, a button, and a live log streaming over WebSockets while Terraform does the actual work.

how it works

A React 18 + Vite frontend talks to a Node.js / Express backend over REST plus a WebSocket. The backend has three explicit subsystems:

Environment records and the audit log live in sql.js (SQLite, in-memory). The audit log is append-only: every request, who made it, what got created, what got destroyed.

templates

Out of the box: nodejs-docker, static-nginx, ec2-aws, s3-static-site, lambda, SQS, DynamoDB, EventBridge.

Two providers: Docker for local dev (just needs Desktop), AWS for production (needs credentials).

what I’m proudest of

The fail-fast policy gate. The Terraform runner never sees a request the policy engine hasn’t already cleared, which means partially-applied environments are rare and almost always the cloud’s fault rather than the platform’s. When they do happen, the audit log catches them and they show up as failed next to the user’s real error.

Reschedule-on-boot is the other small detail: if Runway is down when a TTL expires, it picks up the missed destroys when it comes back online instead of leaking resources.

choose a palette