Deploy · Tunnel · Ship

Your platform
for shipping
everything

Deploy containerized apps in seconds, expose local servers to the internet with a single command, and manage your infrastructure from one dashboard — all self-hosted on your own server.

distribute cli
curl -fsSL https://distribute.app/install.sh | sh
$distribute .
Connected. 3 app(s) deployed.
1. ● my-api   2. ● storefront   3. + New
Deployed →
https://my-api.distribute.app
Everything you need

One platform. All your workflows.

Deploy from any folder

Run distribute . from any project. The CLI detects your stack, packages only what matters, and streams it to your server. Pick from existing deployments or name a new one — no config files required.

  • Auto-detects Node, Python, PHP, Docker, React, Next.js, Vue, Angular
  • Smart packaging — skips node_modules, build caches, media files
  • Interactive app picker — redeploy existing or create new
  • Custom domains with automatic SSL via Let's Encrypt
  • Zero-downtime blue/green container swap on every update
$ distribute .

  Connected. 2 app(s) deployed.
   1.  ● my-api
   2.  ● storefront
   3.  + Deploy as new app

  Select [1-3]: 3
  App name [my-project]: backend-v2

   Packaging… ✓  12.4 MB (284 files)
   Uploading 12.4 MB ...
  ✓  Deployed → https://backend-v2.distribute.app

Expose local servers instantly

Share your dev environment with a client, test webhooks, or demo a prototype without deploying. distribute http 3000 creates a secure public URL in seconds.

  • HTTP tunnels for web apps — React, Vue, Angular, Next.js all work
  • TCP tunnels for databases — PostgreSQL, MySQL, Redis, MongoDB, SSH
  • TLS tunnels for SSL-wrapped protocols — HTTPS, AMQPS, MQTTS
  • Automatic HTML rewriting — assets, fetch() calls, redirects all proxied correctly
  • HMR neutralized gracefully — pages load without live reload errors
# Web app on port 3000
$ distribute http 3000

  Tunnel open
  ─────────────────────────────────────
  Public URL → https://distribute.app/t/a3f82c1b
  Forwarding → localhost:3000
  Press Ctrl+C to stop

  GET /  → 200
  GET /api/users  → 200

# PostgreSQL on port 5432
$ distribute tcp 5432
  TCP Tunnel → https://distribute.app/tcp/f1c90a22

Terminal inside every deployed app

Each deployed app has a live shell directly in the dashboard. Run migrations, inspect logs, debug processes, or install packages — all from the browser, no SSH needed.

  • Full shell access via HTTP polling — works through any proxy
  • Starts in the app's working directory automatically
  • Ctrl+C support to interrupt running processes
  • No WebSocket dependency — reliable on all networks and CDNs
# Click >_ on any app card in the dashboard

✓ Connected to distribute-my-api

$ ls
app.py  requirements.txt  data/

$ python manage.py migrate
Applying auth.0001_initial... OK
Applying auth.0002_alter...   OK

$ pip install stripe
Successfully installed stripe-7.3.0

Turn any web app into a PWA

Paste a URL and Distribute analyzes the site, generates a complete PWA package — manifest, service worker, icons — and bundles it for Android and iOS. No Xcode or Android Studio required.

  • Auto-generates Web App Manifest with correct theme colors and icons
  • Creates service worker with offline-first caching strategy
  • Produces installable APK for Android sideloading
  • Builds iOS-compatible Capacitor project ready to submit
  • Detects framework: React, Vue, Angular, Next.js, plain HTML
# Dashboard → PWA Builder
# URL: https://myapp.distribute.app

  Analyzing site…
   Framework: Next.js
   Manifest generated
   Service worker created
   6 icon sizes generated

  Package ready
  ──────────────────────────────
  ↓ Download PWA Package (.zip)
  ↓ Download Android APK
  ↓ Download iOS Project (.zip)

Full app lifecycle control

Start, stop, restart, and delete apps from the dashboard. Stopping an app removes it from Traefik routing immediately — no dangling containers serving stale responses.

  • One-click start, stop, restart per app from the dashboard
  • Stop removes from Traefik — zero traffic leakage to offline apps
  • Admin panel lists all Traefik instances with one-click kill
  • Domain uniqueness enforced — no two apps can share a custom domain
  • Version history — roll back to any previous deployment
# Dashboard app controls

  ● my-api        LIVE
    [↺ Restart] [■ Stop] [>_ Terminal]

  ○ old-backend   STOPPED
    [▶ Start] [✕ Delete]

# Admin → Traefik

  distribute-my-api       running  ✓
  distribute-storefront   running  ✓
  distribute-old-backend  exited   — [Kill]

Supported Stacks

Zero-configuration support for the tools you love. Optimized, containerized, and globally accessible by default.

10+ Runtime Environments
Docker
Node.js
Python
React
Vue.js
Next.js
Angular
Static HTML
PHP
Any TCP/TLS

Engineered for Simplicity

Automatic SSL + Custom Domains

Every app gets a free SSL certificate the moment DNS propagates. Domain uniqueness is enforced — no two apps can ever share the same address.

Domains
<2mSSL Issuance
0Config files

Zero-Downtime Updates

Blue/green container swap on every deploy. Old container stays live while the new image builds. Your app never drops a request.

Team Collaboration

Invite collaborators with role-based access. Admins manage infrastructure. Developers deploy without touching the server.

Get started →
Infrastructure is balanced