Three steps on the surface. Underneath, Shippers validates, sandboxes, and routes your app before it ever goes live.
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.
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.
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.
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.
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.
What happens after upload differs depending on your app type — here's what each engine actually does.
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.
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.
Confirm it actually started
Shippers waits for Tomcat's port to open and scans startup logs for severe errors before calling the deployment successful.
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.
Run with java -jar
Shippers picks a JDK image matching your compiled classes and runs the jar directly — no application server needed.
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.
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.
Create a free account and get a live URL in under a minute.