<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Riccardo Tacconi</title>
    <description>The latest articles on DEV Community by Riccardo Tacconi (@rtacconi).</description>
    <link>https://dev.to/rtacconi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F336109%2F86a519d1-ba6a-4b61-a3ae-296ae09f91af.jpeg</url>
      <title>DEV Community: Riccardo Tacconi</title>
      <link>https://dev.to/rtacconi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rtacconi"/>
    <language>en</language>
    <item>
      <title>Why I Built kcore: Proxmox Broke My Automation One Too Many Times</title>
      <dc:creator>Riccardo Tacconi</dc:creator>
      <pubDate>Mon, 16 Mar 2026 17:30:52 +0000</pubDate>
      <link>https://dev.to/rtacconi/why-i-built-kcore-proxmox-broke-my-automation-one-too-many-times-2453</link>
      <guid>https://dev.to/rtacconi/why-i-built-kcore-proxmox-broke-my-automation-one-too-many-times-2453</guid>
      <description>&lt;p&gt;After years running Proxmox in production, every automation attempt hit the same walls: an API bolted onto a web UI, mutable Debian hosts, Perl internals. So I built kcore — a modern, API-first hypervisor on NixOS.&lt;/p&gt;

&lt;p&gt;I've been running Proxmox for years. On paper, it's great: open source, KVM-based, web UI included. In practice, every time I tried to automate anything beyond the basics, I hit a wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API That Isn't Really an API
&lt;/h2&gt;

&lt;p&gt;Proxmox has a REST API. Technically. But it's a thin wrapper over the web UI, not a first-class interface. Try doing something simple like attaching a cloud-init drive or configuring a network bridge programmatically — you'll end up shelling out to &lt;code&gt;qm&lt;/code&gt; or &lt;code&gt;pvesh&lt;/code&gt; from your Terraform or Ansible playbook. The Terraform provider for Proxmox is a community project that constantly fights against API limitations. Half the time you're writing &lt;code&gt;provisioner "remote-exec"&lt;/code&gt; blocks to run CLI commands on the host because the API simply doesn't expose what you need.&lt;br&gt;
That's not automation. That's scripting around an incomplete interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perl, Corosync, and Legacy All the Way Down
&lt;/h2&gt;

&lt;p&gt;Look under Proxmox's hood and you'll find Perl — lots of it. The core management framework, &lt;code&gt;pve-manager&lt;/code&gt;, is written in Perl. The API server is Perl. The cluster stack depends on Corosync and &lt;code&gt;pmxcfs&lt;/code&gt;, a custom clustered filesystem. It's engineering from a different era. Nobody is excited about debugging Perl stack traces in 2026. When something goes wrong — and in clustering, things go wrong — you're reading through code that feels like it belongs in a museum.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Update Problem
&lt;/h2&gt;

&lt;p&gt;Ask anyone running Proxmox in a serious deployment what version they're on. It's almost never the latest. Upgrading Proxmox is a manual, nerve-wracking process. You're &lt;code&gt;apt upgrade&lt;/code&gt;-ing a mutable Debian system that's running your production VMs. There's no atomic rollback. If something breaks mid-upgrade — a kernel incompatibility, a Corosync version mismatch, a ZFS module that didn't rebuild — you're in for a long night. So people don't upgrade. They run Proxmox 7 when 8 has been out for years. They skip point releases. They treat their hypervisor like a legacy appliance: don't touch it, pray it keeps working.&lt;br&gt;
This is the opposite of how modern infrastructure should work.&lt;/p&gt;

&lt;h2&gt;
  
  
  NixOS Changes Everything
&lt;/h2&gt;

&lt;p&gt;kcore runs on NixOS. The entire host OS is defined declaratively in a single configuration. Every node built from the same flake is identical — no drift, no snowflakes, no "works on node 3 but not node 7." Updates produce a new system generation. If the update breaks something, you reboot into the previous generation. Done. No partial states, no manual rollback procedures, no downtime prayer sessions.&lt;br&gt;
Updating a 10-node kcore cluster means pushing a new flake and rebuilding. Every node converges to the same state. If one node has a problem, it rolls back independently. Compare that to upgrading 10 Proxmox nodes one by one, crossing your fingers each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built Instead
&lt;/h2&gt;

&lt;p&gt;kcore is what I wanted Proxmox to be. The API is the product — every operation goes through gRPC with typed schemas. The CLI is a thin client. The Terraform provider talks to the same API. There's no web UI you have to click through to complete a workflow that the API forgot.&lt;br&gt;
VMs are defined in YAML and applied declaratively. The control plane is written in Go — not Perl, not PHP, not a 20-year-old web framework. The codebase is small, readable, and modern.&lt;br&gt;
Is it done? No. kcore is alpha software. It doesn't have HA clustering, live migration, or a web dashboard yet. Proxmox does, and if you need those things today, use Proxmox. I'm not pretending otherwise.&lt;br&gt;
But if you've ever stared at a Proxmox Terraform run that failed because the API doesn't support what the UI does, or held your breath through a cluster upgrade, or wondered why your hypervisor's core is written in Perl — kcore is being built for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's early. The foundation is solid. And I'd rather build the right thing slowly than ship another legacy platform.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kcorehypervisor.com/blog/why-i-built-kcore.html" rel="noopener noreferrer"&gt;https://kcorehypervisor.com/blog/why-i-built-kcore.html&lt;/a&gt;&lt;br&gt;
kcore is open source: &lt;a href="https://github.com/rtacconi/kcore" rel="noopener noreferrer"&gt;github.com/rtacconi/kcore&lt;/a&gt;&lt;br&gt;
If this resonates, I'd love to hear from you — reach out at &lt;a href="mailto:team@tacconiconsulting.com"&gt;team@tacconiconsulting.com&lt;/a&gt; or check the &lt;a href="https://kcorehypervisor.com/roadmap.html" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>pensource</category>
      <category>go</category>
      <category>nixos</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
