<?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>Forem: Kazilsky</title>
    <description>The latest articles on Forem by Kazilsky (@kazilsky).</description>
    <link>https://forem.com/kazilsky</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%2F3700775%2F55bc4230-f7a8-4ca9-a467-e5eb4c47655d.jpg</url>
      <title>Forem: Kazilsky</title>
      <link>https://forem.com/kazilsky</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kazilsky"/>
    <language>en</language>
    <item>
      <title>Deploy to Raspberry Pi in One Command: Building a Rust-based Deployment Tool</title>
      <dc:creator>Kazilsky</dc:creator>
      <pubDate>Mon, 12 Jan 2026 07:59:29 +0000</pubDate>
      <link>https://forem.com/kazilsky/deploy-to-raspberry-pi-in-one-command-building-a-rust-based-deployment-tool-36m0</link>
      <guid>https://forem.com/kazilsky/deploy-to-raspberry-pi-in-one-command-building-a-rust-based-deployment-tool-36m0</guid>
      <description>&lt;h3&gt;
  
  
  Article
&lt;/h3&gt;

&lt;p&gt;Ever SSH'd into 5 different Raspberry Pis just to &lt;code&gt;git pull&lt;/code&gt; and restart a service? Yeah, me too. That's why I built Flare.&lt;/p&gt;

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

&lt;p&gt;I run a small homelab with multiple Raspberry Pis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pi in living room: Home automation&lt;/li&gt;
&lt;li&gt;Pi in garage: Temperature monitoring
&lt;/li&gt;
&lt;li&gt;Pi in basement: Blog and personal sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time I wanted to deploy an update:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh pi@192.168.1.50
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/apps/temperature-monitor
git pull
npm &lt;span class="nb"&gt;install
sudo &lt;/span&gt;systemctl restart temp-monitor

ssh pi@192.168.1.51
&lt;span class="c"&gt;# ... repeat ...&lt;/span&gt;

ssh pi@192.168.1.52
&lt;span class="c"&gt;# ... and again ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ansible? Too heavy. Docker Swarm? Overkill for 3 Pis. I just wanted &lt;code&gt;git push&lt;/code&gt; → deployed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;I built Flare - a lightweight deployment tool in Rust that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-discovers devices on your network&lt;/li&gt;
&lt;li&gt;Deploys from GitHub/Gitea with one command&lt;/li&gt;
&lt;li&gt;Manages apps (start/stop/restart)&lt;/li&gt;
&lt;li&gt;Sets up databases automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what it looks like:&lt;/p&gt;

&lt;p&gt;![Demo GIF]&lt;a href="https://github.com/Velooroo/Flare/raw/main/assets/demo.gif" rel="noopener noreferrer"&gt;https://github.com/Velooroo/Flare/raw/main/assets/demo.gif&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Start daemon on your Pi
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# On Raspberry Pi&lt;/span&gt;
flared
&lt;span class="c"&gt;# Listening on :7530&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No Docker, no Python, just a 10MB binary.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Discover devices from your laptop
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# On your laptop&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;flare discover
&lt;span class="o"&gt;[&lt;/span&gt;0] 192.168.1.50:7530 &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;1] 192.168.1.51:7530 &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;flare &lt;span class="nb"&gt;sync &lt;/span&gt;0
Name: pi-living-room
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flare uses UDP broadcast to find devices automatically. No static IPs needed!&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Add config to your project
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;flare.toml&lt;/code&gt; in your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[app]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"temp-monitor"&lt;/span&gt;
&lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.0.0"&lt;/span&gt;

&lt;span class="nn"&gt;[run]&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"python sensor.py"&lt;/span&gt;
&lt;span class="py"&gt;port&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;

&lt;span class="nn"&gt;[database]&lt;/span&gt;
&lt;span class="py"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sqlite"&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"readings.db"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Deploy!
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flare deploy github-user/temp-monitor &lt;span class="nt"&gt;--device&lt;/span&gt; pi-living-room
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Example
&lt;/h2&gt;

&lt;p&gt;Here's my temperature monitoring setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# sensor.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;w1thermsensor&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;W1ThermSensor&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sensor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;W1ThermSensor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/temperature&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_temp&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_temperature&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Store in SQLite
&lt;/span&gt;    &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;readings.db&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;INSERT INTO readings VALUES (?, ?)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
              &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this &lt;code&gt;flare.toml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[app]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"temperature-monitor"&lt;/span&gt;
&lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.0.0"&lt;/span&gt;

&lt;span class="nn"&gt;[build]&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pip install -r requirements.txt"&lt;/span&gt;

&lt;span class="nn"&gt;[run]&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"python sensor.py"&lt;/span&gt;
&lt;span class="py"&gt;port&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;

&lt;span class="nn"&gt;[database]&lt;/span&gt;
&lt;span class="py"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sqlite"&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"readings.db"&lt;/span&gt;
&lt;span class="py"&gt;preseed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"schema.sql"&lt;/span&gt;

&lt;span class="nn"&gt;[health]&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http://localhost:8080/temperature"&lt;/span&gt;
&lt;span class="py"&gt;timeout&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy to all Pis at once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flare deploy my-github/temp-monitor &lt;span class="nt"&gt;--device&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;p&gt;For the curious, here's what happens under the hood:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt;: UDP broadcast on port 7001&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: Argon2 hashed tokens (auto-generated)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transport&lt;/strong&gt;: TLS encrypted TCP (self-signed certs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol&lt;/strong&gt;: Length-prefixed messages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation&lt;/strong&gt;: Optional systemd scopes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; with tokio for async&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rustls&lt;/strong&gt; for TLS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;clap&lt;/strong&gt; for CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;serde&lt;/strong&gt; for serialization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;p&gt;Flare generates unique tokens for each device during sync:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// CLI generates random token&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_random_token&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Hashes with argon2&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;argon2&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Sends hash to daemon&lt;/span&gt;
&lt;span class="n"&gt;daemon&lt;/span&gt;&lt;span class="nf"&gt;.register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Future deploys use this token&lt;/span&gt;
&lt;span class="nf"&gt;deploy_with_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No passwords to manage, rotatable anytime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;On a Raspberry Pi Zero W:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binary size: 10MB&lt;/li&gt;
&lt;li&gt;RAM usage: ~20MB idle, ~40MB during deploy&lt;/li&gt;
&lt;li&gt;Deploy time: 5-15 seconds depending on repo size&lt;/li&gt;
&lt;li&gt;CPU: ~5% idle, ~30% during deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare to Ansible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ansible needs Python (100MB+)&lt;/li&gt;
&lt;li&gt;Takes minutes to run playbooks&lt;/li&gt;
&lt;li&gt;Requires maintaining inventory files&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current Limitations 📝
&lt;/h2&gt;

&lt;p&gt;Being honest - this is v0.2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gateway reverse proxy incomplete (static sites work, APIs coming)&lt;/li&gt;
&lt;li&gt;No Windows daemon support yet&lt;/li&gt;
&lt;li&gt;Single database per app&lt;/li&gt;
&lt;li&gt;Basic health checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it works great for my homelab!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It!
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install&lt;/span&gt;
cargo &lt;span class="nb"&gt;install &lt;/span&gt;flare-cli flare-daemon
&lt;span class="c"&gt;# Or download binaries from GitHub&lt;/span&gt;

&lt;span class="c"&gt;# Quick test&lt;/span&gt;
flared &amp;amp;
flare discover
flare deploy your-github/your-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://dev.toyour-link"&gt;https://github.com/Velooroo/flare&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Web dashboard&lt;/li&gt;
&lt;li&gt;[ ] Multi-database support&lt;/li&gt;
&lt;li&gt;[ ] Metrics collection&lt;/li&gt;
&lt;li&gt;[ ] Plugin system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Flare solved my "I just want to deploy to Pi" problem. It might not be Kubernetes, but for homelabs and IoT projects, sometimes simple is better.&lt;/p&gt;

&lt;p&gt;If you're running a homelab or IoT devices, give it a try! I'd love feedback on what features you'd want.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's your deployment setup for edge devices? Do you use Ansible, scripts, or something else? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>rust</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
