Whenever we—by “we” I mean IT folks—run a project somewhere, there’s always something to host or configure. Could be a Kubernetes cluster with a bunch of pods, a web app, or, in this case, this blog. And when there’s configuration involved, we should keep it as code whenever possible.
Configuration as code is the only way. It guarantees reproducibility, and honestly, it just makes most things easier.
This blog
Let’s take this blog as an example. It’s built with Hugo. Hugo isn’t considered stable yet—it’s still on 0.xx.yy versions. The current version, as of writing, is 0.149.1. But, as with any non-trivial project, there are a few more dependencies. I use some npm packages like tailwindcss and fuse.js (for search). To install them, I need a package manager—pnpm (currently 10.15.0). And since I want to run these packages (at least the Tailwind bit), I need a Node.js runtime. Right now I’m on version 22.19.0.
With Renovate, all of these versions can be updated. And with Cloudflare Pages, I get preview builds for every version bump. It works pretty well: Cloudflare uses package.json and respects .nvmrc. But there’s no real way to pin the Hugo version—at least not in a way that’s checked into Git.

Setting the Hugo version in the Cloudflare Pages panel.
So, I did something a bit hacky. Because you can update that environment variable via an API, I use curl to set the Hugo version to whatever’s in a file.
At work
At work, we also use Renovate—like for updating dependencies in our Maven projects. It generally works really well; every now and then a dependency breaks. Fair enough.
What we’ve noticed with automatic updates—especially when not only creating pull requests with Renovate but also auto-merging them after tests and checks pass—is that having a way to test, build, and deploy automatically is a must. And that’s when you get the best feeling in IT, where it all feels a bit like magic.
Continuous updating is a must
Anything on the web needs updating, and it really should be updated continuously. The only smart way I’ve found is to keep all configuration as code. That way, a tool like Renovate can help keep things fresh.
But it goes much further. It means the tool/app/website can be deployed easily. It often avoids vendor lock-in if you can redeploy elsewhere. And it lets you version your configuration and check it into Git—where, let’s be honest, most developers feel right at home.