I have tried to build monitoring tools several times during my career. Most started with an immediate need, solved part of it, and stopped there. Fomkee began in much the same way—but it was far from my first attempt.
Before Fomkee
I have always enjoyed infrastructure. I used to be a co-owner of Roští.cz, a Czech hosting company, and before Fomkee, I maintained servers for another company. That was where I built my first proper monitoring system.
I called it SIMO, short for Simple Monitoring. Its collector is still available on PyPI under my username, rbas. It was a Python script that ran on monitored servers, collected data about load, disks, processes, and other system state, and sent everything to a central server.
The central component was a web application—built with Django. It displayed the collected data and managed notifications and escalation policies. You could configure what should happen when a particular condition was met.
That was around 2014. The software is ancient now, but the problem it tried to solve is still very familiar.
Monitoring the Monitoring
A few years ago—I honestly cannot remember exactly when—I built a home lab server. Since then, the number of things running around our house has steadily grown: services on the server, ESP devices doing various jobs, sensors submitting data, and small displays showing information we find useful.
I have built enough gadgets around the house that debugging our home sometimes feels like being on call for a small company—except the users know exactly where I sleep.
At first, my wife said many of these inventions were useless. Then she got used to them. Now, when one stops working, she immediately complains that it is broken. Apparently, a useless gadget becomes critical infrastructure the moment it goes offline.
That is not how monitoring should work.
Ideally, I should know first and fix the problem before anyone notices. At the very least, when my wife tells me something is broken, I want to say, “I already know,” with the calm confidence of someone who definitely was not about to discover it for the first time.
So I installed Uptime Kuma. It is a nice piece of software: ready to use, easy to configure, and good at its job.
There was just one obvious problem. It ran on the same home lab server as everything it monitored. If the entire server went down, the monitoring disappeared with it—and I knew nothing.
That led me to build Fluxa. Fluxa is intentionally small. It runs HTTP checks defined in a configuration file and sends me a push notification through Pushover when something goes wrong. In my setup, its main job is simply to check whether Uptime Kuma is still alive.
I had a lot of fun writing it. This was before AI-generated code became a normal part of development, so I wrote it by hand in Rust. I also tested it with more than a thousand monitored websites, checking each one every 30 to 60 seconds. Its memory footprint remained very low—even lower than Uptime Kuma’s—and I was genuinely happy with the result.
Fluxa did what I needed, but I kept thinking about how I could extend it. I never had enough time, so the idea stayed in the back of my mind. Eventually, it became a slightly different question:
What if I built a proper monitoring system in Rust?
Why Rust
Part of the motivation was simple: I like Rust.
I enjoy its strictness and the way it makes error handling explicit. Rust asks you to write more code up front and think about the unhappy paths, not just the happy one. It can feel verbose, but it also makes me trust the result more.
One thing I have learned during my career is that production code is mostly about what happens when things do not go according to plan. A network request fails. A service disappears. An input is not what you expected.
Rust makes it difficult to quietly ignore those cases, which makes it a great fit for monitoring software.
When I started designing Fomkee, I returned to the problem I had with Uptime Kuma: who monitors the monitoring?
A single monitoring server can disappear along with everything around it. So I designed Fomkee around multiple nodes. These nodes should be small enough to run on cheap hardware and lightweight enough to deploy in several locations without much effort.
The project kept growing from there. Fomkee can now run checks across multiple nodes with a relatively small footprint, and it is getting close to a public beta.
For HTTP checks, I also added the option to evaluate responses using JavaScript. I wanted an excuse to experiment with WebAssembly, so the JavaScript checks run inside WASM. It is a useful feature—but it was also fun to build, which remains an important reason why I work on the project.
That is more or less how Fomkee began. It grew from a real problem in my house, the enjoyment of building Fluxa, and my curiosity about what a monitoring system designed around Rust and small, distributed nodes could look like.
I think it could be useful to other people too. A few people around me have already tried it and told me it helps them, which gives me a good reason to continue.
For now, I am working toward the public beta and seeing where the project takes me.