Scafo
self-hosted serverless deployments

Run JavaScript projects across your own machines. Nodes coordinate through an S3-compatible bucket, Celld runs the code, and your ingress pulls the routing from the node next to it.
npm install --global scafo
scafo deploy ./my-app --name my-app --remote prod

What is in the box

One binary

scafo sail runs a node; the same executable is the operator CLI.

Bucket as registry

Applications, placements and nodes are JSON objects in an S3-compatible bucket, updated with conditional writes. No database, no consensus protocol.

Celld runtime

Each application runs as its own Celld fleet, one process per assigned node.

Ingress pulls routing

Caddy (with the scafo modules) or Traefik (http provider) read the fleet's routing from the node API. The node writes no ingress configuration.

Certificates through the node

Caddy stores certificates, ACME accounts and locks in the bucket through the node, holding only an ingress token.

WireGuard transport

scafo wg init and scafo wg peers render the tunnel between nodes; listeners follow the tunnel address.