Deploying
There are two ways to ship: build from source with git push, or deploy a prebuilt image.
Git push
Each app is a bare git repo on the platform. Add it as a remote, then every push builds your root Dockerfile into an image and boots it as a microVM — you watch the build live in your terminal.
FROM oven/bun:alpine WORKDIR /app COPY . . RUN bun install CMD ["bun", "run", "src/server.ts"]
Your app should listen on the PORT environment variable (Tower sets it; default 8080).
Bun.serve({ port: Number(process.env.PORT ?? 8080), fetch })Prebuilt image
wess deploy blog --image ghcr.io/you/blog:latest --port 8080
The --port sticks and is reused on later deploys.
Rolling redeploys
Every deploy is rolling: a new machine boots with your new build, the app's status flips to it, and the previous machine is retired. The app's URL never changes.