Why I Built Shipherd
I built Shipherd because I was tired of doing the same ops chores for tiny projects over and over again.
At the time, I had a personal dashboard running on an OrangePi that genuinely helped me stay on top of daily life. But each small change turned into a deployment ritual: code, commit, push, SSH, cd, pull, restart, and then hope it stayed alive. If something crashed quietly, I often discovered it days later.
That same pattern kept repeating with everything else I hosted: bots, scripts, and small services. I didn't need enterprise infrastructure for these projects, but I did need reliability. I wanted something that felt like self-hosting, but with an assistant.
What Shipherd Is
Shipherd is a free, open-source platform to run and monitor code on your own server.
The core idea is simple: connect code, run it, and let Shipherd handle the boring parts. It automates common tasks like:
- Pulling updates from Git providers (including self-hosted options)
- Running projects with low setup overhead
- Restarting services when they crash
- Exposing logs, CPU, and memory from one dashboard
- Sending notifications when something needs attention
It runs in Docker, so setup stays predictable across machines.
How It Works Day-to-Day
For me, the best part is that Shipherd changes the way I think about side projects.
Before Shipherd, I delayed small improvements because deployment felt annoying. Now, I can treat side projects as always-on systems instead of fragile experiments.
Source Options
Shipherd has three main ways to connect your code:
Your Mounted Filesystem
If you have a project on your server, you can point Shipherd to its directory. It will run the code right there, so you can keep using your existing workflow. This is great for projects that aren't in Git or for quick experiments.
Git Providers
You can connect GitHub, GitLab, self-hosted Forgejo, or any Git repository. Shipherd will pull the latest changes and run your code automatically. This is perfect for projects that are already in Git and for teams.
Sample Projects
If you're not sure how to get started, Shipherd has sample templates for Node.js, Python, Go, and Rust. You can create a new project from one of these templates and have a working app in seconds.
What Makes It Useful
Push and Forget
The project can track your main branch and pull new changes automatically, so deployment becomes completely automatic for many use cases.
Self-Healing by Default
If a process crashes, Shipherd can restart it and notify you through email, Discord, or webhooks. That closed the biggest gap in my personal hosting setup: silent failure.
Live Operations Visibility
Logs and resource usage are available from the dashboard, so troubleshooting no longer starts with SSH.
Runtime Support and Shipherd Tools
Shipherd's runtime already supports Node.js, Python, Go, and Rust projects. For application-side integration, shipherd-tools currently ships as an official Node.js SDK (tools-node) v1. It wraps health checks, logging, and control APIs so apps can report richer runtime data back to Shipherd.
Rust, Go, and Python SDK packages are in active development and are a first-priority part of the roadmap. The platform contract is already language-agnostic, so these SDKs are being built for parity rather than as second-class add-ons.
Why This Project Matters to Me
Shipherd started as a personal painkiller, but it became one of the projects that most improved how I build software.
It taught me how to design for reliability as a product feature, not just a backend concern. It also pushed me to think in terms of real workflows: what people do before, during, and after deployment.
Today, Shipherd is the platform I wish I had from day one: practical self-hosting with fewer babysitting tasks and much faster feedback loops.