I build websites and web apps for clients, and almost every project ends with the same question: where does this actually run?
The easy answer is a managed platform like Vercel or Netlify. The workflow is great: connect a repo, build, get a URL, roll back if something breaks. But your app runs on their runtime, under their account, and the bill and the rules are theirs too. The other answer is a cheap Linux VPS. You own it, but then you are back to SSH tabs, hand-written Nginx configs, PM2 commands, and Certbot, every single time.
I wanted the first workflow on the second kind of server. That is why I built Shipown. This post explains the problem, how Shipown approaches it, and where it honestly stands today.
The gap between PaaS and "just SSH in"
There are already good self-hosted platforms: Coolify, Dokploy, CapRover. They are real options and worth a look. But they share a design choice: they are platforms you install on the server. A web dashboard and its services run there, and apps are deployed as Docker containers.
That is fine for some setups. For a lot of my work it is more than I need. I often have a small VPS that should run one Next.js app under PM2 behind Nginx. I don't want a control plane living next to it, and I don't necessarily want Docker in the picture at all.
So the question I started from was: what if the "platform" lived on my desktop, and the server stayed a plain Linux box?
How Shipown works
Shipown is a desktop application (Windows and Linux today) that deploys and operates apps on a Linux VPS, cloud VM, or bare-metal server you control. It connects over plain SSH. No Shipown deployment agent is installed on the server; it uses what is already there.
The flow is five steps:
- Connect a server. Host, port, user, and key or password. Shipown tests the connection before saving anything, so a bad credential fails at setup instead of halfway through a deploy.
- Pick a source. A GitHub repository and one of its real branches (the list is fetched, not guessed), or a folder on your computer.
- Review the plan. Framework, install/build/start commands, port, domain, and target are shown and every value is editable. Framework detection is a proposal, not a decision. You approve it, then it runs.
- Watch it build. Choose a server build or a PC build. Output streams live over SSH. In PC mode the verified output is uploaded without rebuilding remotely.
- Operate it. One page shows what is deployed, which commit it came from, how far behind its branch it is, health, logs, redeploy, rollback, or taking a site offline.
What it deploys
- Node apps under PM2: Next.js, Nuxt, Remix, SvelteKit, NestJS, Fastify, and plain Express. Installed, built, and started on your server with the port, health check, and restart policy set.
- Static sites on Nginx: Vite (React or Vue), Astro, or plain HTML, published to a release directory and served straight from Nginx. No process, no port.
-
Docker apps: supported Dockerfile and Compose projects, images labelled with the commit they came from, routed through Nginx to
127.0.0.1when configured. The previous container is kept until the health check passes.
Docker is optional. Node apps run directly under PM2 and static sites from Nginx on a server with no Docker at all.
Domains, HTTPS, and rollback
When you point a domain at an app, Shipown writes the Nginx virtual host, tests the config before reloading, and asks Certbot for a certificate when you want HTTPS. If Nginx rejects a config, it is put back the way it was. Certificate expiry is surfaced in the app.
Every deploy goes into its own release directory. A Shipown-managed app can return to a retained release (or an earlier image for Docker) while its files are still available. Detected runtime failures trigger recovery attempts. I want to be clear about limits here: recovery can fail if the server is unreachable or prerequisites are missing, and database migrations and persistent data need their own recovery plan.
Monitoring without a metrics stack
The server view shows CPU, RAM, disk, load average, and PM2 processes, read directly from /proc and pm2 jlist, next to an embedded xterm terminal (a real PTY). So there are no extra collectors to install. Heartbeats keep running from the tray: two consecutive failures report one "unreachable" incident, and recovery is reported once. These checks need the app running and your PC awake.
The AI terminal: one command at a time
This is the part I care about most. When something breaks — a 502 from Nginx, a crashed PM2 process, a full disk — you can describe it in plain language. Using your own Anthropic, OpenAI, or DeepSeek API key, the model inspects the server and proposes one shell command at a time, with its reason. You approve each command before it runs.
Destructive commands such as recursive deletes, reboots, firewall flushes, or stopping SSH are always held for confirmation. The AI never runs on Shipown's servers: requests go from your computer to the provider you chose, and your key is encrypted by the OS. Prompts and command output do go to that provider, so review output for secrets before sharing.
What Shipown is not
A few honest boundaries, because they matter when you pick a tool:
- No auto-deploy on push. Shipown tells you when a branch has moved ahead and how many commits are waiting, but a person presses deploy.
- Not open source. It is a commercial desktop app. What runs on your server is plain SSH and shell.
- Not fully offline. The desktop app uses a hosted licence service (with limited offline grace) and a hosted update service.
- Windows and macOS are not server targets. The targets are Linux servers.
Pricing and trial
Every plan is the full product. There is a free 30-day trial (1 server, 1 seat, 1 device) with no card required. After that, Pro is $5/month or $32/year: 1 seat, 2 devices, unlimited servers. A purchase covers a fixed period and does not renew automatically, and an unused licence can be refunded within seven days.
Platforms and current status
The desktop app runs on Windows (.exe) and Linux (.deb for Debian/Ubuntu). macOS (Apple Silicon and Intel) is coming in the next release.
Shipown is currently a release candidate (v0.1.0-rc.10). The docs state plainly that an end-to-end verification matrix across server OS versions, architectures, and runtimes has not been completed for this release, so check the supported environments page before choosing a setup.
Try it
If you rent a VPS and want the deploy-and-rollback workflow without moving your app onto someone else's platform, give it a try at shipown.com. Feedback from people running real servers is exactly what this RC stage needs.
I'm Vishvajeet Shukla, a full stack developer in Jaipur and the builder of Shipown. More of my work is at vishvajeetshukla.in.
Top comments (0)