Self-hosted deploys

Ship,
done.

Build on your computer. Run that exact image on your VPS.

渋み  ship
1 commit ready to push
test passed
check passed
Built and uploaded a1b2c3d (3 MiB)
Replacement healthy in 812ms
Shipped in 15 secondshttps://example.com

Scope todayVPS deployment only

A small Linux server will do.

Connect over SSH. Caddy handles public traffic while each app listens on loopback.

2 imagesmaximum per app
12 hoursrollback retention
4 GiBdefault free-space floor
Example image storage by workload
WorkloadCurrentWith rollbackImage contents
Static site~6.2 MB~12.4 MBBusyBox and built site files. About 3 MB compressed.
Small Bun service~80–150 MB~160–300 MBBun Alpine, production packages, and app source.
Full-stack app~200–350 MB~400–700 MBRuntime, packages, built assets, and migrations.

Estimates include the current image and one similar rollback image. Shared layers may use less space. Leave room for the operating system, logs, databases, uploads, and the 4 GiB deployment floor.

Compare starter VPS optionsPrices vary by region, tax, and architecture
Starter VPS comparison
ProviderStarter planvCPURAMDiskFrom / month
OVHcloudEurope + globalVPS-124 GB40 GB$4.54
VultrGlobalCloud Compute11 GB25 GB$5
Akamai LinodeGlobalNanode11 GB25 GB$5
DigitalOceanGlobalBasic Droplet11 GiB25 GiB$6

Hetzner's entry plan has room for several small apps. A 1 GB server can run a light prebuilt service, but check its memory use first. Prices vary by location, tax, processor, and billing. Check the final price before ordering.

How it works

A deploy, from start to finish.

  1. Build the commit locally

    bun ship builds committed HEAD for your server, uploads the image, then pushes Git.

  2. Replace only after checks pass

    The image must belong to the commit you pushed. Config and optional tests must pass too. A failure leaves the current app running.

  3. Roll back for 12 hours

    Run bun ship --rollback to restore the previous image. No fetch or rebuild.

During replacement

The current app stays up.

Caddy retries its loopback upstream for up to 20 seconds. If startup or health fails, Shibumi restores the previous image.

On disk

Two images per app.

One runtime/<app>:current tag and one rollback tag. The rollback expires after 12 hours, even if the service restarts.

Linux server

Install shis*.

* shis = shibumi-server.

You need Bun, Git, rootless Podman, Caddy, and systemd. The installer checks each one and helps with anything missing. Updates keep your settings and secrets.

curl -fsSL https://server.shibumistack.dev/install | bash

Next, connect a project with Shibumi Ship. Server operators can register one directly with shis add example.com.