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.