When it comes to running a homelab, sometimes all you need is a straightforward way to know when your apps are down—no bells, no whistles, and definitely no complicated configuration files. That’s exactly why I built PingPulse.
My journey began with a simple need: I wanted to know immediately when one of my apps went down so I could restart it. Tools like Monika are incredibly powerful and feature-rich, but they come with the tradeoff of heavier configuration and a steeper learning curve. For my homelab, that felt like overkill.
That said, I still believe there’s a place for these tools. In fact, I rely on Uptime Kuma to monitor all of my public-facing endpoints. I run it outside of my homelab so it remains unaffected by any internal issues.
The first solution I built was python-URLChecker. It wasn’t just a simple script—it was a multi-file project with support for notifications and several useful features. However, as with any project, I saw opportunities for improvement and simplification.
Later, at work, I was tasked with building a similar tool but with more enterprise-grade features, such as database storage, advanced configuration parameters, and more. I eventually ported that work to my personal GitHub as python-URLPinger.
When I brought URLPinger over from the work project, I intentionally excluded some of the heavier enterprise features. Still, it ended up being more than I needed for my homelab, especially with its dependency on a database for storing metrics. Another pain point was its reliance on JSON configuration files, which I’ve always found unwieldy for simple setups.
Ultimately, I realized I needed something even leaner, more straightforward, and tailored for my specific needs. That realization led to the creation of PingPulse.
I’d been interested in learning Go, and it struck me as a great fit for a tool like this. That’s how PingPulse was born. The Go implementation is much simpler and more portable than my previous Python versions. The codebase is smaller, easier to understand, and does exactly what I need—no more, no less.
PingPulse keeps things simple:
One of the biggest wins with PingPulse is portability. Unlike Python, Go produces a static binary that can run anywhere. While I usually run my tools in Kubernetes, PingPulse’s portability allows me to run it as a systemd service on one of my servers. Sometimes, that simplicity is all you really need.
PingPulse has been running in my homelab for a few weeks now without a hitch. It strikes the right balance between features, ease of use, and portability. If you’re looking for simple, no-fuss uptime monitoring for your own projects or homelab, give it a try!