How it works

From build to live URL

Three steps on the surface. Underneath, Shippers validates, sandboxes, and routes your app before it ever goes live.

1

Create an app

Name your app and pick a framework — WebforJ (WAR or JAR), Spring Boot (JAR), or Node.js. The name becomes part of your app's slug, validated against a reserved list so you can never accidentally claim something like www or admin.

2

Upload your build

Drag in your .war or .jar file. Shippers streams it to disk under your account's storage quota, checks the file extension matches your app's declared type, and verifies the first bytes are a real zip signature — a WAR or JAR is a zip under the hood.

3

Shippers validates and builds

The archive is safely extracted (protected against zip-slip path tricks) into a scratch directory. For a WAR, Shippers confirms a WEB-INF/ directory. For a JAR, it confirms a BOOT-INF/classes/ directory and a Start-Class manifest entry — and detects which JDK version your compiled classes need.

4

A sandboxed container starts

Your content is copied into a hardened container — dropped capabilities, no host networking, hard CPU/memory/process limits — and only then does Shippers stop whatever was previously running for this app, so a bad upload never takes down a working deploy before the new one is confirmed viable to start.

5

Get a live URL

Traefik picks up the container's routing labels automatically and your app is reachable at yourapp.shippers.cloud — usually under a minute while Tomcat or the JVM boots.

Two deploy engines, one workflow

What happens after upload differs depending on your app type — here's what each engine actually does.

WAR

Java web apps (WebforJ)

  1. 1

    Detect the required JDK

    Shippers reads your compiled .class file versions to pick a Tomcat image running a compatible JDK — no pom.xml parsing required.

  2. 2

    Boot inside Tomcat

    Your WAR is deployed as the app's root context, so it's reachable at the bare subdomain rather than a sub-path.

  3. 3

    Confirm it actually started

    Shippers waits for Tomcat's port to open and scans startup logs for severe errors before calling the deployment successful.

JAR

Spring Boot jars (Spring Boot, WebforJ)

  1. 1

    Validate the Spring Boot jar

    Shippers confirms a BOOT-INF/classes/ entry and a Start-Class manifest header — the markers Maven's or Gradle's Spring Boot repackage step always produces.

  2. 2

    Run with java -jar

    Shippers picks a JDK image matching your compiled classes and runs the jar directly — no application server needed.

  3. 3

    Confirm it actually started

    Shippers waits for the app's port to open and scans startup logs for a failed application context before calling the deployment successful.

Built for untrusted uploads

Shippers is a hosting provider for strangers' code, so isolation isn't an afterthought.

Every container runs with hard CPU, memory, and process limits, dropped Linux capabilities, and no host networking — isolated by default, not by configuration.

Archive extraction is zip-slip safe, so a crafted path inside an upload can never escape its own deployment directory.

Try it with your own build

Create a free account and get a live URL in under a minute.