What developer mode unlocks
By default, a Dargo machine is locked down — you install apps from the AppStore and that's it. The dargo system owns Docker, no shell access, no port forwarding for things you write yourself. Great for self-hosting Ghost or Nextcloud; deliberately limited if you're trying to ship something you wrote.
Turn on developer mode in the portal Settings and a new menu appears, with all of this:
- SSH access — a
devuseraccount (non-root, not in the docker group) gets created on the device. Bring your public key in the portal and you're in. - Browser terminal — xterm.js in the portal, connected through a WebSocket. Useful when you don't have ssh handy. Right-click to paste.
- Native app deploys — run Django, Flask, FastAPI, Laravel, Rails, Node, anything that listens on a port. Use systemd user services (linger is enabled automatically, so they survive reboots).
- Developer proxies — pick a port on the device + a free subdomain (or a custom domain) and Dargo exposes it on the public internet over HTTPS. Same secure tunnel the AppStore apps use; no port forwarding, no router config, no IP exposure.
- Custom Docker apps — upload a
docker-compose.ymlthrough the Develop page and Dargo runs it like any other AppStore app — private to your account, lives in the same Docker registry.
Works on both Hardware and BYOD
Same developer mode on both. If you bought a Dargo device, flipping the switch turns it into a fully-fledged personal VPS you happen to own. If you're on BYOD, you already do own the machine — developer mode just adds the tunnel + domain plumbing on top of what you'd normally have to set up yourself.
The dev-proxy quota is small for now (2 free proxies per account during closed beta) — enough to ship a personal site or two. We'll raise the cap as the open beta ramps up.
Quick example — deploying a Flask app
To show the workflow end-to-end. Replace Flask with whatever your stack is — the pattern's the same.
Enable developer mode + add your SSH key
Settings → toggle Developer mode → in the new SSH & Terminal tab, paste your public key. The portal generates the SSH command:
ssh -i ~/.ssh/id_ed25519 devuser@<your-device>SSH in and set your app up like you would on a VPS
cd ~ && mkdir myflask && cd myflask python3 -m venv venv && source venv/bin/activate pip install flask gunicorn # write app.py … gunicorn -b 127.0.0.1:9000 app:appPick any port in the 9000–65535 range — that range is reserved for developer proxies (8001–8099 is reserved for AppStore apps; 8100+ for custom Docker apps).
Make it survive a reboot — write a systemd user service
cat > ~/.config/systemd/user/myflask.service << 'EOF' [Unit] Description=My Flask App [Service] ExecStart=/home/devuser/myflask/venv/bin/gunicorn -b 127.0.0.1:9000 app:app WorkingDirectory=/home/devuser/myflask Restart=always [Install] WantedBy=default.target EOF systemctl --user enable --now myflaskloginctl enable-linger devuser is set automatically when developer mode is enabled, so the service keeps running after you log out and survives reboots.
Expose it on the public internet
Portal → Develop → Developer Proxies → Add. Pick port 9000, give it a subdomain. Hit save.
Your Flask app is live at https://<subdomain>.mydargo.com, certs auto-issued, no router changes needed. Want a custom domain? Add it in the proxy settings — CNAME instructions are generated for you.
What you can deploy
Anything that runs on Linux and listens on a port. The combinations that show up most:
- Python: Django, Flask, FastAPI, Starlette — gunicorn or uvicorn behind the developer proxy
- Node: Express, Next.js (custom server / static export), Hono, Fastify — bare
nodebehind a systemd user service - PHP: Laravel, Symfony —
php-fpm+ nginx or justphp artisan servefor staging - Ruby: Rails, Sinatra — Puma listening on a localhost port
- Go / Rust / etc.: compile, drop the binary, systemd service it
- Static sites: drop files in
~/www, point a tiny nginx/caddy at it, expose via dev proxy - Containerised apps: upload a
docker-compose.ymlon the Develop page — Dargo handles install + domain + tunnel for you
Security model
- Non-root by default. The
devuseraccount isn't in the docker group and can't sudo. AppStore apps stay isolated from your dev stack. - SSH key only. No password auth on the devuser account; you bring your public key, the portal pushes it to
authorized_keys. - Outbound tunnel for everything. Dev proxies and AppStore apps share the same secure outbound tunnel. No open ports on your router; your home IP isn't exposed to visitors.
- HTTPS automatic. Both
*.mydargo.comsubdomains and custom domains get auto-issued certs (Cloudflare-managed on the edge).