<?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: Youssef Boubli</title>
    <description>The latest articles on DEV Community by Youssef Boubli (@boubli).</description>
    <link>https://dev.to/boubli</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1057510%2F173bfd25-f174-4807-9af1-091b897a5b35.jpeg</url>
      <title>DEV Community: Youssef Boubli</title>
      <link>https://dev.to/boubli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boubli"/>
    <language>en</language>
    <item>
      <title>Real-Time Homelab Telemetry Without Spawning Shell Scripts</title>
      <dc:creator>Youssef Boubli</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:44:04 +0000</pubDate>
      <link>https://dev.to/boubli/real-time-homelab-telemetry-without-spawning-shell-scripts-5dbp</link>
      <guid>https://dev.to/boubli/real-time-homelab-telemetry-without-spawning-shell-scripts-5dbp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8yhge3n1no9q5puq11xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8yhge3n1no9q5puq11xs.png" alt="AMUD Dashboard screenshot" width="799" height="383"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  BODY — copy from here ↓
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt; Building AMUD — Part 4 of 12&lt;br&gt;
&lt;strong&gt;Part 1:&lt;/strong&gt; &lt;a href="https://dev.to/boubli/why-i-ditched-heavy-dashboards-and-built-my-own-in-pure-rust-4l1d"&gt;Why I Built AMUD in Rust&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most homelab dashboards get CPU and container stats by running &lt;code&gt;docker stats&lt;/code&gt;, &lt;code&gt;pvesh&lt;/code&gt;, or &lt;code&gt;curl&lt;/code&gt; in a loop. Every poll = new subprocess = wasted CPU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AMUD&lt;/strong&gt; collects telemetry natively in Rust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick facts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amud-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Collects host + container metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amud-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Broadcasts to browsers via WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tokio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Async polling on green threads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IPC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unix domain socket (or TCP on Windows)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Idle footprint: &lt;strong&gt;~26–35MB&lt;/strong&gt; for server + agent combined.&lt;/p&gt;

&lt;h2&gt;
  
  
  The old way vs AMUD
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shell out to &lt;code&gt;pvesh get ...&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;New process every few seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;curl&lt;/code&gt; Proxmox API in bash&lt;/td&gt;
&lt;td&gt;Parsing overhead, fragile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker CLI polling&lt;/td&gt;
&lt;td&gt;Slow, permission-heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The AMUD way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Host metrics:&lt;/strong&gt; read directly from &lt;code&gt;/proc&lt;/code&gt; and &lt;code&gt;/sys&lt;/code&gt; — no subprocess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proxmox LXC/VM status:&lt;/strong&gt; native HTTPS REST calls via &lt;code&gt;hyper&lt;/code&gt; + &lt;code&gt;rustls&lt;/code&gt; to the Proxmox API (port 8006).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; read the Docker daemon over the Unix socket via &lt;code&gt;hyperlocal&lt;/code&gt; — no &lt;code&gt;docker stats&lt;/code&gt; CLI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser updates:&lt;/strong&gt; &lt;code&gt;amud-server&lt;/code&gt; uses a &lt;code&gt;tokio::sync::watch&lt;/code&gt; channel. One poll tick → serialize once → push to all WebSocket clients.&lt;/p&gt;

&lt;p&gt;Result: live CPU, RAM, disk, and network graphs that update smoothly without freezing the UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent ↔ server security
&lt;/h2&gt;

&lt;p&gt;The agent must authenticate before sending telemetry — challenge-response with a shared secret (&lt;code&gt;AMUD_AGENT_SECRET&lt;/code&gt;). Random processes can't inject fake metrics.&lt;/p&gt;

&lt;p&gt;Architecture docs: &lt;a href="https://boubli.github.io/AMUD-Dashboard/docs/ARCHITECTURE" rel="noopener noreferrer"&gt;https://boubli.github.io/AMUD-Dashboard/docs/ARCHITECTURE&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you see on the dashboard
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Host CPU / RAM / disk bars (real-time)&lt;/li&gt;
&lt;li&gt;Per-app &lt;strong&gt;RUNNING&lt;/strong&gt; / &lt;strong&gt;STOPPED&lt;/strong&gt; when linked to LXC CTID or Docker name&lt;/li&gt;
&lt;li&gt;Integration badges (Plex streams, Pi-hole queries, etc.) polled concurrently&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup reminder
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install AMUD (Proxmox or Docker)&lt;/li&gt;
&lt;li&gt;Ensure &lt;code&gt;amud-agent&lt;/code&gt; is running&lt;/li&gt;
&lt;li&gt;Add Proxmox API token in Settings if you use LXC status&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; Green/red LXC badges and start/stop from the dashboard.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>homelab</category>
      <category>proxmox</category>
      <category>rust</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Install AMUD on Proxmox in One Command (No Docker Required)</title>
      <dc:creator>Youssef Boubli</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:40:33 +0000</pubDate>
      <link>https://dev.to/boubli/install-amud-on-proxmox-in-one-command-no-docker-required-55mp</link>
      <guid>https://dev.to/boubli/install-amud-on-proxmox-in-one-command-no-docker-required-55mp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgl5xzxsywdzg9ep8laxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgl5xzxsywdzg9ep8laxq.png" alt="AMUD Dashboard screenshot" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  BODY — copy from here ↓
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt; Building AMUD — Part 2 of 12&lt;br&gt;
&lt;strong&gt;Previous:&lt;/strong&gt; &lt;a href="https://dev.to/boubli/why-i-ditched-heavy-dashboards-and-built-my-own-in-pure-rust-4l1d"&gt;Why I Ditched Heavy Dashboards and Built My Own in Pure Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you run Proxmox, you probably have 20+ services and no single place to open them. Most dashboards assume Docker. &lt;strong&gt;AMUD&lt;/strong&gt; (Advanced Modern Unified Dashboard) is different: native Rust binaries, ~26–35MB RAM idle, and a one-line Proxmox installer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick facts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rust, Axum, Tokio, SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Config&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Web UI only — no YAML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~26–35MB (server + agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://boubli.github.io/AMUD-Dashboard/docs/installation/proxmox" rel="noopener noreferrer"&gt;https://boubli.github.io/AMUD-Dashboard/docs/installation/proxmox&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How it works on Proxmox
&lt;/h2&gt;

&lt;p&gt;AMUD splits into two tiny daemons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;amud-agent&lt;/code&gt;&lt;/strong&gt; — runs on the &lt;strong&gt;Proxmox host&lt;/strong&gt;. Reads CPU/RAM/disk from &lt;code&gt;/proc&lt;/code&gt;, queries the Proxmox API for LXC/VM status, writes metrics to a Unix socket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;amud-server&lt;/code&gt;&lt;/strong&gt; — runs in a &lt;strong&gt;Debian 12 LXC&lt;/strong&gt;. Serves the web UI on port 8000, stores config in SQLite, streams live telemetry over WebSockets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No Docker layer. No PHP. No Node runtime sitting idle.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-command install
&lt;/h2&gt;

&lt;p&gt;SSH into your Proxmox host as &lt;code&gt;root&lt;/code&gt; and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://raw.githubusercontent.com/boubli/AMUD-Dashboard/main/setup-amud.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;amud-agent&lt;/code&gt; as a systemd service on the host&lt;/li&gt;
&lt;li&gt;Create an LXC named &lt;code&gt;amud-dashboard&lt;/code&gt; (1 CPU, 256MB RAM, 4GB disk)&lt;/li&gt;
&lt;li&gt;Bind-mount &lt;code&gt;/opt/amud/run&lt;/code&gt; so server and agent share the IPC socket&lt;/li&gt;
&lt;li&gt;Deploy &lt;code&gt;amud-server&lt;/code&gt; and print the container IP when done&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  First login
&lt;/h2&gt;

&lt;p&gt;Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;LXC-IP&amp;gt;:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default credentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Username:&lt;/strong&gt; &lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password:&lt;/strong&gt; &lt;code&gt;password&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Change the password immediately under &lt;strong&gt;Settings → Admin Profile&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable live LXC status (green/red badges)
&lt;/h2&gt;

&lt;p&gt;Without a Proxmox API token, host metrics work but app cards stay on &lt;strong&gt;CHECKING...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quick CLI setup on the Proxmox host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pveum role add AMUDAgentRole &lt;span class="nt"&gt;-privs&lt;/span&gt; &lt;span class="s2"&gt;"VM.Audit Sys.Audit VM.PowerMgmt"&lt;/span&gt;
pveum group add amud-group
pveum user add amud@pve &lt;span class="nt"&gt;-group&lt;/span&gt; amud-group &lt;span class="nt"&gt;-comment&lt;/span&gt; &lt;span class="s2"&gt;"Telemetry Agent User"&lt;/span&gt;
pveum aclmod / &lt;span class="nt"&gt;-group&lt;/span&gt; amud-group &lt;span class="nt"&gt;-role&lt;/span&gt; AMUDAgentRole
pveum user token add amud@pve amud-token &lt;span class="nt"&gt;--privsep&lt;/span&gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the token line that looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;PVEAPIToken&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;amud@pve!amud-token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste it in AMUD → &lt;strong&gt;Settings → Proxmox VE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now link app cards to container IDs and watch &lt;strong&gt;RUNNING&lt;/strong&gt; / &lt;strong&gt;STOPPED&lt;/strong&gt; update in real time. You can start/stop containers from the dashboard if you included &lt;code&gt;VM.PowerMgmt&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prefer Docker?
&lt;/h2&gt;

&lt;p&gt;AMUD supports Docker Compose too — but on Proxmox, native LXC is the lightest path. Docker guide: &lt;a href="https://boubli.github.io/AMUD-Dashboard/docs/installation/docker" rel="noopener noreferrer"&gt;https://boubli.github.io/AMUD-Dashboard/docs/installation/docker&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 3:&lt;/strong&gt; Why I replaced Homepage YAML with a SQLite UI.&lt;/p&gt;

&lt;p&gt;⭐ If this helped: &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions welcome in GitHub Discussions.&lt;/p&gt;

</description>
      <category>proxmox</category>
      <category>homelab</category>
      <category>selfhosted</category>
      <category>rust</category>
    </item>
    <item>
      <title>I Replaced Homepage YAML with a SQLite UI — Here's Why</title>
      <dc:creator>Youssef Boubli</dc:creator>
      <pubDate>Sun, 21 Jun 2026 06:39:54 +0000</pubDate>
      <link>https://dev.to/boubli/i-replaced-homepage-yaml-with-a-sqlite-ui-heres-why-29j</link>
      <guid>https://dev.to/boubli/i-replaced-homepage-yaml-with-a-sqlite-ui-heres-why-29j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqypwfg18haz960m4gxte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqypwfg18haz960m4gxte.png" alt="AMUD Dashboard screenshot" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  BODY — copy from here ↓
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Series:&lt;/strong&gt; Building AMUD — Part 3 of 12&lt;br&gt;
&lt;strong&gt;Part 1:&lt;/strong&gt; &lt;a href="https://dev.to/boubli/why-i-ditched-heavy-dashboards-and-built-my-own-in-pure-rust-4l1d"&gt;Why I Built AMUD in Rust&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Part 2:&lt;/strong&gt; &lt;a href="https://dev.to/boubli/install-amud-on-proxmox-in-one-command-no-docker-required-55mp"&gt;Install AMUD on Proxmox in One Command (No Docker Required)&lt;/a&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Homepage and Homarr are great — until you miss one YAML indent and the whole dashboard breaks. I built &lt;strong&gt;AMUD&lt;/strong&gt; with a different rule: &lt;strong&gt;no YAML as primary config&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick facts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AMUD&lt;/strong&gt; = Advanced Modern Unified Dashboard&lt;/li&gt;
&lt;li&gt;Config lives in &lt;strong&gt;SQLite&lt;/strong&gt; (&lt;code&gt;amud.db&lt;/code&gt;), edited through the web UI&lt;/li&gt;
&lt;li&gt;Layouts, tabs, apps, settings — all managed visually&lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The YAML pain (you've felt it)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Media&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Plex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://plex.local:32400&lt;/span&gt;
           &lt;span class="s"&gt;icon&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;plex.png&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One wrong space and the page is blank.&lt;/p&gt;

&lt;p&gt;With Homepage/Homarr you often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit files on disk or in Git&lt;/li&gt;
&lt;li&gt;Restart or reload to see changes&lt;/li&gt;
&lt;li&gt;Debug syntax errors in nested YAML&lt;/li&gt;
&lt;li&gt;Keep config in sync across machines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What AMUD does instead
&lt;/h2&gt;

&lt;p&gt;Everything goes into SQLite in &lt;strong&gt;WAL mode&lt;/strong&gt; (fast concurrent reads/writes):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;App cards and URLs&lt;/td&gt;
&lt;td&gt;UI — drag, edit, save&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Category tabs&lt;/td&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grid columns, accent color&lt;/td&gt;
&lt;td&gt;Settings → Appearance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrations (Plex, Jellyfin, HA)&lt;/td&gt;
&lt;td&gt;Settings → Integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxmox token&lt;/td&gt;
&lt;td&gt;Settings → Proxmox VE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No file to SSH into. No restart after adding a bookmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup is one file
&lt;/h2&gt;

&lt;p&gt;Your entire dashboard config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/amud/data/amud.db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy that file = full backup. Restore it = full restore.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://boubli.github.io/AMUD-Dashboard/docs/troubleshooting" rel="noopener noreferrer"&gt;https://boubli.github.io/AMUD-Dashboard/docs/troubleshooting&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When YAML dashboards still win
&lt;/h2&gt;

&lt;p&gt;Be honest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitOps workflows&lt;/strong&gt; — you want config in Git and PR reviews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Huge static service lists&lt;/strong&gt; generated from Ansible/Terraform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-environment&lt;/strong&gt; configs from templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AMUD is for homelabbers who want a &lt;strong&gt;living control panel&lt;/strong&gt; you tweak from the browser — not a config repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  AMUD's hard rule
&lt;/h2&gt;

&lt;p&gt;From the roadmap — things AMUD will &lt;strong&gt;not&lt;/strong&gt; do:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;YAML as primary config. SQLite + UI is the whole point.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Install: &lt;a href="https://boubli.github.io/AMUD-Dashboard/docs/installation/proxmox" rel="noopener noreferrer"&gt;https://boubli.github.io/AMUD-Dashboard/docs/installation/proxmox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next:&lt;/strong&gt; Real-time telemetry without shell scripts.&lt;/p&gt;

&lt;p&gt;⭐ Star the repo: &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>homelab</category>
      <category>selfhosted</category>
      <category>sqlite</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why I Ditched Heavy Dashboards and Built My Own in Pure Rust</title>
      <dc:creator>Youssef Boubli</dc:creator>
      <pubDate>Thu, 11 Jun 2026 15:01:04 +0000</pubDate>
      <link>https://dev.to/boubli/why-i-ditched-heavy-dashboards-and-built-my-own-in-pure-rust-4l1d</link>
      <guid>https://dev.to/boubli/why-i-ditched-heavy-dashboards-and-built-my-own-in-pure-rust-4l1d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohw9vhvadwvtjlyshy94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohw9vhvadwvtjlyshy94.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;br&gt;
Why I Ditched Heavy Dashboards and Built My Own in Pure Rust&lt;/p&gt;

&lt;p&gt;If you run a home lab, you know the feeling: you spend hours setting up the perfect stack of services, only to realize you need a centralized way to access them. You reach for a dashboard, install it, and suddenly realize your simple link portal is eating up 150MB of RAM and requires a crash course in YAML just to add a new shortcut.&lt;/p&gt;

&lt;p&gt;I decided I was done with that. So, I built AMUD (Advanced Modern Unified Dashboard).&lt;/p&gt;

&lt;p&gt;You can check out the source code and the final result here: &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is a look at why I built it, the architecture behind it, and how it completely changed my server workflow.&lt;/p&gt;

&lt;p&gt;The Problem: Bloatware in the Home Lab&lt;br&gt;
The current landscape of self-hosted dashboards is generally split into two frustrating camps.&lt;/p&gt;

&lt;p&gt;On one side, you have applications like Heimdall. While it looks great, it brings the entire weight of a PHP/Laravel lifecycle with it. A dashboard's primary job is to sit idle 99% of the time, yet these setups consume significant server resources just existing in the background.&lt;/p&gt;

&lt;p&gt;On the other side, you have highly customizable tools like Homepage. The catch? You are forced to manage complex YAML configuration files. If you make a single indentation error, the whole interface breaks.&lt;/p&gt;

&lt;p&gt;As someone who values highly optimized system architecture, wasting CPU cycles on a heavy runtime—or wasting my own time writing YAML to add a simple URL—felt unacceptable. I wanted a control center that was microscopic in size but massive in functionality.&lt;/p&gt;

&lt;p&gt;The Solution: Enter AMUD and Pure Rust&lt;br&gt;
I built AMUD entirely from scratch using pure, compiled Rust. By stepping away from heavy web frameworks and Docker-dependent networking layers, the results were exactly what I was aiming for.&lt;/p&gt;

&lt;p&gt;AMUD operates as a single-binary ecosystem with an embedded SQLite architecture. Because it executes as native machine code, the entire dashboard, database, and telemetry layer idle at roughly 26MB of RAM.&lt;/p&gt;

&lt;p&gt;Performance and memory safety were the biggest reasons for choosing Rust, but the real magic happens in the telemetry. AMUD utilizes Tokio to handle asynchronous threads. This allows the dashboard to stream live CPU, RAM, and disk metrics to your screen in real-time without locking up the UI or taxing the host system.&lt;/p&gt;

&lt;p&gt;Best of all? Zero YAML. Everything from advanced layouts to tagging and sub-pages is managed entirely through a clean, reactive user interface.&lt;/p&gt;

&lt;p&gt;The Proxmox Advantage: Bypassing Docker Overhead&lt;br&gt;
A lot of self-hosted software assumes you want to run everything in Docker. While Docker is great, wrapping a simple dashboard in a containerized network layer adds unnecessary overhead, especially if you are running a bare-metal hypervisor like Proxmox.&lt;/p&gt;

&lt;p&gt;I designed AMUD to be a first-class citizen in Proxmox LXC (Linux Container) environments.&lt;/p&gt;

&lt;p&gt;To make deployment seamless, I wrote a native Proxmox Autopilot setup script. Instead of wrestling with container registries and port forwarding, you simply run the script. It provisions a minimal Debian 12 LXC, installs the compiled Rust binary, configures the services, and launches AMUD instantly. Furthermore, if you link your apps to your LXC containers, AMUD's live telemetry will dynamically turn your dashboard icons green or red based on the container's true running state.&lt;/p&gt;

&lt;p&gt;Call to Action: Let's Build This Together&lt;br&gt;
AMUD is completely open-source, and I am actively looking to grow the community around it. Whether you are a Rust developer looking for a new open-source project to contribute to, or a homelab enthusiast who just wants a faster, lighter dashboard, I would love for you to try it out.&lt;/p&gt;

&lt;p&gt;Check out the repository, test the Proxmox installation script, and let me know what you think:&lt;br&gt;
👉 &lt;a href="https://github.com/boubli/AMUD-Dashboard" rel="noopener noreferrer"&gt;https://github.com/boubli/AMUD-Dashboard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like the architecture or find the tool useful, dropping a Star on the repo helps tremendously. Feel free to fork the code, open an issue for feature requests, or submit a pull request!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
