<?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: Noel Paul</title>
    <description>The latest articles on DEV Community by Noel Paul (@zius).</description>
    <link>https://dev.to/zius</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%2F3908523%2Fff0c0f9b-ba05-4ff5-a564-f6a5a1f650b1.jpg</url>
      <title>DEV Community: Noel Paul</title>
      <link>https://dev.to/zius</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zius"/>
    <language>en</language>
    <item>
      <title>Liquid Glass: Physical Optical Lensing &amp; Glassmorphism UI Engine for Linux in Rust (WGPU)</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 25 Oct 2026 14:23:51 +0000</pubDate>
      <link>https://dev.to/zius/liquid-glass-physical-optical-lensing-glassmorphism-ui-engine-for-linux-in-rust-wgpu-11lk</link>
      <guid>https://dev.to/zius/liquid-glass-physical-optical-lensing-glassmorphism-ui-engine-for-linux-in-rust-wgpu-11lk</guid>
      <description>&lt;p&gt;Most "frosted glass" or "glassmorphism" implementations on the web and Linux desktops boil down to a simple 2D box-blur shader layered over a background capture. &lt;/p&gt;

&lt;p&gt;While that looks pleasant, it isn’t how real glass behaves. Real optical glass has &lt;strong&gt;curvature, refraction, chromatic dispersion (wavelength splitting), surface tension, and directional specular sheen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I’ve been building &lt;strong&gt;&lt;a href="https://github.com/ziuus/liquid-glass" rel="noopener noreferrer"&gt;Liquid Glass&lt;/a&gt;&lt;/strong&gt;: an open-source rendering engine and UI framework written in &lt;strong&gt;Rust, WGPU, and WGSL&lt;/strong&gt; that brings true physical optical glass simulation to Linux desktop apps and Wayland widgets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fziuus%2Fliquid-glass%2Fmaster%2Fdocs%2Fscreenshots%2Fshowcase.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fziuus%2Fliquid-glass%2Fmaster%2Fdocs%2Fscreenshots%2Fshowcase.gif" alt="Liquid Glass Live Media Island Demo" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔬 The Optical Physics Under the Hood
&lt;/h2&gt;

&lt;p&gt;Instead of drawing flat quads with blurred backdrops, Liquid Glass computes analytical Signed Distance Fields (SDFs) per fragment:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Plano-Convex Snell Refraction
&lt;/h3&gt;

&lt;p&gt;We compute the surface height $h(p)$ and its normal gradient $\nabla h(p)$ analytically across the geometry boundary:&lt;br&gt;
$$N = \text{normalize}\begin{pmatrix} -\nabla h_x \ -\nabla h_y \ 1 \end{pmatrix}$$&lt;/p&gt;

&lt;p&gt;Using Snell's Law ($IOR = 1.33 - 1.52$), light rays bend towards the optical center, producing true optical barrel distortion and magnification of underlying desktop wallpapers.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Spectral Chromatic Dispersion
&lt;/h3&gt;

&lt;p&gt;Real glass splits white light into spectral wavelengths at curved meniscus boundaries. Liquid Glass offsets red, green, and blue texture sample coordinates proportionally to the surface refraction angle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let r_offset = refract_vec * (1.0 - dispersion);
let g_offset = refract_vec;
let b_offset = refract_vec * (1.0 + dispersion);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives chamfered edges and button rims an unmistakable physical glow.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Directional Solar Rim Lighting &amp;amp; Specular Sheen
&lt;/h3&gt;

&lt;p&gt;A dual-lobe Blinn-Phong specular reflection catches a simulated directional sunlight vector (&lt;code&gt;[-0.6, -0.8]&lt;/code&gt;), producing bright 1.5px grazing meniscus catches.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Performance: 0.0% CPU When Idle
&lt;/h2&gt;

&lt;p&gt;A common pitfall with custom Linux widgets and shaders is battery drain from uncapped render loops. Liquid Glass was architected for zero idle overhead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Kernel &lt;code&gt;epoll_wait&lt;/code&gt; Blocking&lt;/strong&gt;: When no audio is playing and no pointer is moving, the event loop stops spinning and sleeps in Wayland's &lt;code&gt;event_queue.blocking_dispatch()&lt;/code&gt;. Top benchmark:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   PID    USER  %CPU  %MEM  COMMAND
   241729 zius   0.0   1.2  glass-panel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single Quad Draw Call&lt;/strong&gt;: The entire UI (capsule glass, vinyl grooves, music notes, equalizer bars, timeline, scrubber knob, transport buttons, speaker) is rendered in &lt;strong&gt;a single quad draw call&lt;/strong&gt; inside WGSL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Memory Pre-Scaled Wallpaper Cache&lt;/strong&gt;: Moving or dragging the widget samples wallpaper crops in sub-milliseconds without disk I/O.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎨 Building UI Components with &lt;code&gt;glass-ui&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Building high-level interfaces shouldn't require writing raw WGSL shaders. The workspace includes &lt;code&gt;glass-ui&lt;/code&gt;, providing pre-built interactive components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassCard&lt;/code&gt; / &lt;code&gt;GlassIsland&lt;/code&gt;&lt;/strong&gt;: Physical glass containers with adjustable corner radius, curvature, and bevel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassButton&lt;/code&gt;&lt;/strong&gt;: Tactile spring-animated buttons with click compression (&lt;code&gt;0.94x&lt;/code&gt;) and smooth recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassToggle&lt;/code&gt;&lt;/strong&gt;: Pill switch with spring-animated knob transitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassSlider&lt;/code&gt;&lt;/strong&gt;: Draggable timeline scrubber with track rail, active fill, and thumb.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;glass_ui&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;GlassWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassToggle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassSlider&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;GlassWidget&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Floating container&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassCard&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;island&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32.0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// Interactive controls&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassButton&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Play"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassToggle&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_slider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassSlider&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// In your event loop:&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.on_pointer_move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;surfaces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.collect_surfaces&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="nf"&gt;.render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;surfaces&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Two Running Targets
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Floating Wayland Desktop Island (&lt;code&gt;glass-panel&lt;/code&gt;)&lt;/strong&gt;: Uses &lt;code&gt;zwlr_layer_shell_v1&lt;/code&gt; on Hyprland/wlroots to float transparently over your wallpaper with real-time MPRIS media playback control.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo run &lt;span class="nt"&gt;-p&lt;/span&gt; glass-panel &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform Desktop Window (&lt;code&gt;simple-window&lt;/code&gt;)&lt;/strong&gt;: Uses standard &lt;code&gt;winit&lt;/code&gt; and &lt;code&gt;wgpu&lt;/code&gt; to render a windowed UI component playground.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo run &lt;span class="nt"&gt;-p&lt;/span&gt; simple-window
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🤝 Open Source &amp;amp; Contributing
&lt;/h2&gt;

&lt;p&gt;We'd love community help expanding this into a full-featured desktop UI ecosystem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building new &lt;code&gt;glass-ui&lt;/code&gt; components (&lt;code&gt;GlassTextInput&lt;/code&gt;, &lt;code&gt;GlassTooltip&lt;/code&gt;, &lt;code&gt;GlassContextMenu&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Supporting more compositor protocols (KDE KWin blur, COSMIC compositor).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New showcase widgets (weather, clock, system monitor).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/ziuus/liquid-glass" rel="noopener noreferrer"&gt;https://github.com/ziuus/liquid-glass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contributing Guide&lt;/strong&gt;: &lt;a href="https://github.com/ziuus/liquid-glass/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find this interesting or want to support native graphics on Linux, consider starring the repo on GitHub! ⭐&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>rust</category>
    </item>
    <item>
      <title>Liquid Glass: Physical Optical Lensing &amp; Glassmorphism UI Engine for Linux in Rust (WGPU)</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Thu, 22 Oct 2026 11:33:07 +0000</pubDate>
      <link>https://dev.to/zius/liquid-glass-bringing-true-apple-grade-physical-optical-lensing-to-linux-wayland-in-rust-57jp</link>
      <guid>https://dev.to/zius/liquid-glass-bringing-true-apple-grade-physical-optical-lensing-to-linux-wayland-in-rust-57jp</guid>
      <description>&lt;p&gt;Most "frosted glass" or "glassmorphism" implementations on the web and Linux desktops boil down to a simple 2D box-blur shader layered over a background capture. &lt;/p&gt;

&lt;p&gt;While that looks pleasant, it isn’t how real glass behaves. Real optical glass has &lt;strong&gt;curvature, refraction, chromatic dispersion (wavelength splitting), surface tension, and directional specular sheen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I’ve been building &lt;strong&gt;&lt;a href="https://github.com/ziuus/liquid-glass" rel="noopener noreferrer"&gt;Liquid Glass&lt;/a&gt;&lt;/strong&gt;: an open-source rendering engine and UI framework written in &lt;strong&gt;Rust, WGPU, and WGSL&lt;/strong&gt; that brings true physical optical glass simulation to Linux desktop apps and Wayland widgets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fziuus%2Fliquid-glass%2Fmaster%2Fassets%2Fmedia_island.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fziuus%2Fliquid-glass%2Fmaster%2Fassets%2Fmedia_island.gif" alt="Liquid Glass Live Media Island Demo" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔬 The Optical Physics Under the Hood
&lt;/h2&gt;

&lt;p&gt;Instead of drawing flat quads with blurred backdrops, Liquid Glass computes analytical Signed Distance Fields (SDFs) per fragment:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Plano-Convex Snell Refraction
&lt;/h3&gt;

&lt;p&gt;We compute the surface height $h(p)$ and its normal gradient $\nabla h(p)$ analytically across the geometry boundary:&lt;br&gt;
$$N = \text{normalize}\begin{pmatrix} -\nabla h_x \ -\nabla h_y \ 1 \end{pmatrix}$$&lt;/p&gt;

&lt;p&gt;Using Snell's Law ($IOR = 1.33 - 1.52$), light rays bend towards the optical center, producing true optical barrel distortion and magnification of underlying desktop wallpapers.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Spectral Chromatic Dispersion
&lt;/h3&gt;

&lt;p&gt;Real glass splits white light into spectral wavelengths at curved meniscus boundaries. Liquid Glass offsets red, green, and blue texture sample coordinates proportionally to the surface refraction angle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let r_offset = refract_vec * (1.0 - dispersion);
let g_offset = refract_vec;
let b_offset = refract_vec * (1.0 + dispersion);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives chamfered edges and button rims an unmistakable physical glow.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Directional Solar Rim Lighting &amp;amp; Specular Sheen
&lt;/h3&gt;

&lt;p&gt;A dual-lobe Blinn-Phong specular reflection catches a simulated directional sunlight vector (&lt;code&gt;[-0.6, -0.8]&lt;/code&gt;), producing bright 1.5px grazing meniscus catches.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Performance: 0.0% CPU When Idle
&lt;/h2&gt;

&lt;p&gt;A common pitfall with custom Linux widgets and shaders is battery drain from uncapped render loops. Liquid Glass was architected for zero idle overhead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Kernel &lt;code&gt;epoll_wait&lt;/code&gt; Blocking&lt;/strong&gt;: When no audio is playing and no pointer is moving, the event loop stops spinning and sleeps in Wayland's &lt;code&gt;event_queue.blocking_dispatch()&lt;/code&gt;. Top benchmark:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   PID    USER  %CPU  %MEM  COMMAND
   241729 zius   0.0   1.2  glass-panel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single Quad Draw Call&lt;/strong&gt;: The entire UI (capsule glass, vinyl grooves, music notes, equalizer bars, timeline, scrubber knob, transport buttons, speaker) is rendered in &lt;strong&gt;a single quad draw call&lt;/strong&gt; inside WGSL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Memory Pre-Scaled Wallpaper Cache&lt;/strong&gt;: Moving or dragging the widget samples wallpaper crops in sub-milliseconds without disk I/O.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎨 Building UI Components with &lt;code&gt;glass-ui&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Building high-level interfaces shouldn't require writing raw WGSL shaders. The workspace includes &lt;code&gt;glass-ui&lt;/code&gt;, providing pre-built interactive components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassCard&lt;/code&gt; / &lt;code&gt;GlassIsland&lt;/code&gt;&lt;/strong&gt;: Physical glass containers with adjustable corner radius, curvature, and bevel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassButton&lt;/code&gt;&lt;/strong&gt;: Tactile spring-animated buttons with click compression (&lt;code&gt;0.94x&lt;/code&gt;) and smooth recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassToggle&lt;/code&gt;&lt;/strong&gt;: Pill switch with spring-animated knob transitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;GlassSlider&lt;/code&gt;&lt;/strong&gt;: Draggable timeline scrubber with track rail, active fill, and thumb.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;glass_ui&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;GlassWidget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassToggle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GlassSlider&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;GlassWidget&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Floating container&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassCard&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;island&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;32.0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// Interactive controls&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassButton&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Play"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassToggle&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.add_slider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;GlassSlider&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.65&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// In your event loop:&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.on_pointer_move&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;surfaces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="nf"&gt;.collect_surfaces&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="nf"&gt;.render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;surfaces&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Two Running Targets
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Floating Wayland Desktop Island (&lt;code&gt;glass-panel&lt;/code&gt;)&lt;/strong&gt;: Uses &lt;code&gt;zwlr_layer_shell_v1&lt;/code&gt; on Hyprland/wlroots to float transparently over your wallpaper with real-time MPRIS media playback control.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo run &lt;span class="nt"&gt;-p&lt;/span&gt; glass-panel &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform Desktop Window (&lt;code&gt;simple-window&lt;/code&gt;)&lt;/strong&gt;: Uses standard &lt;code&gt;winit&lt;/code&gt; and &lt;code&gt;wgpu&lt;/code&gt; to render a windowed UI component playground.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   cargo run &lt;span class="nt"&gt;-p&lt;/span&gt; simple-window
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🤝 Open Source &amp;amp; Contributing
&lt;/h2&gt;

&lt;p&gt;We'd love community help expanding this into a full-featured desktop UI ecosystem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building new &lt;code&gt;glass-ui&lt;/code&gt; components (&lt;code&gt;GlassTextInput&lt;/code&gt;, &lt;code&gt;GlassTooltip&lt;/code&gt;, &lt;code&gt;GlassContextMenu&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Supporting more compositor protocols (KDE KWin blur, COSMIC compositor).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;New showcase widgets (weather, clock, system monitor).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/ziuus/liquid-glass" rel="noopener noreferrer"&gt;https://github.com/ziuus/liquid-glass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contributing Guide&lt;/strong&gt;: &lt;a href="https://github.com/ziuus/liquid-glass/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find this interesting or want to support native graphics on Linux, consider starring the repo on GitHub! ⭐&lt;/p&gt;

</description>
      <category>rust</category>
      <category>linux</category>
      <category>graphics</category>
      <category>webgpu</category>
    </item>
    <item>
      <title>Building GoRoute: An Ultra-Lightweight (&lt;15MB RAM) LLM Gateway in Go</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 18 Oct 2026 03:32:18 +0000</pubDate>
      <link>https://dev.to/zius/building-goroute-an-ultra-lightweight-15mb-ram-llm-gateway-in-go-5dnj</link>
      <guid>https://dev.to/zius/building-goroute-an-ultra-lightweight-15mb-ram-llm-gateway-in-go-5dnj</guid>
      <description>&lt;p&gt;Most developers using terminal coding agents like &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;OpenCode&lt;/strong&gt;, &lt;strong&gt;Codex&lt;/strong&gt;, or &lt;strong&gt;Cursor&lt;/strong&gt; end up running an LLM router in the background to handle rate limits, multiple accounts, and model failovers.&lt;/p&gt;

&lt;p&gt;Popular tools like OmniRoute and LiteLLM work, but running a full Node.js or Python runtime 24/7 just to proxy HTTP requests consumes 150MB to 300MB of RAM and introduces cold-start latency.&lt;/p&gt;

&lt;p&gt;I wanted something that idles at &lt;code&gt;&amp;lt; 6MB RAM&lt;/code&gt;, starts instantly, and never panics. So I built &lt;strong&gt;GoRoute&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What is GoRoute?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ziuus/goroute" rel="noopener noreferrer"&gt;GoRoute&lt;/a&gt; is a zero-dependency, compiled LLM gateway and multi-agent router written in Go.&lt;/p&gt;

&lt;p&gt;It acts as a local reverse proxy (&lt;code&gt;http://127.0.0.1:8128&lt;/code&gt;) sitting between your developer agents and AI providers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------+       +-------------------+       +-----------------------+
| Claude Code | ----&amp;gt; |                   | ----&amp;gt; | Google Antigravity    |
| OpenCode    | ----&amp;gt; | GoRoute (Go Proxy)| ----&amp;gt; | OpenAI / Anthropic    |
| Codex/Cursor| ----&amp;gt; |   (&amp;lt;15MB RAM)     | ----&amp;gt; | Custom Endpoints      |
+-------------+       +-------------------+       +-----------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Key Capabilities
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sub-15MB Memory Footprint&lt;/strong&gt;: Compiles to a single 16MB binary with zero external dependencies. Idles under 6MB RAM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic 429 Failover &amp;amp; Round-Robin&lt;/strong&gt;: Automatically rotates accounts and instantly fails over across keys if rate limits are hit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual Protocol Translation&lt;/strong&gt;: Speak OpenAI (&lt;code&gt;/v1/chat/completions&lt;/code&gt;) or Anthropic Messages API (&lt;code&gt;/v1/messages&lt;/code&gt;) seamlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1-Click Agent Setup&lt;/strong&gt;: Automatically configures Claude Code, OpenCode, Codex, Cursor, Aider, and Cline with a single command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   goroute setup all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Seamless OmniRoute Migration&lt;/strong&gt;: If you already have OmniRoute configured, import your existing credentials and routes in 1 second:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   goroute import-omniroute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Installation &amp;amp; Quick Start
&lt;/h3&gt;

&lt;p&gt;You can install GoRoute directly via curl:&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;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ziuus/goroute/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run via npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx goroute setup all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, check status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goroute status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the GitHub repo here: &lt;a href="https://github.com/ziuus/goroute" rel="noopener noreferrer"&gt;https://github.com/ziuus/goroute&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback, feature requests, or questions!&lt;/p&gt;

</description>
      <category>backend</category>
      <category>go</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a Near-Zero CPU Linux Settings Center in Rust (settings-tui)</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Tue, 13 Oct 2026 11:49:51 +0000</pubDate>
      <link>https://dev.to/zius/building-a-near-zero-cpu-linux-settings-center-in-rust-settings-tui-1nh</link>
      <guid>https://dev.to/zius/building-a-near-zero-cpu-linux-settings-center-in-rust-settings-tui-1nh</guid>
      <description>&lt;p&gt;Most desktop Linux users on tiling window managers like Hyprland, Sway, or i3 face the same dilemma: either memorize dozens of CLI arguments across nmcli, bluetoothctl, wpctl, and systemctl, or pull in heavy 500MB+ GUI control centers from GNOME or KDE.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/ziuus/settings-tui" rel="noopener noreferrer"&gt;settings-tui&lt;/a&gt; to bridge that gap with a unified, hyper-lightweight (&amp;lt;9MB, near 0% idle CPU) terminal control center written in Rust with &lt;a href="https://ratatui.rs" rel="noopener noreferrer"&gt;Ratatui&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Subsystems Covered
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network&lt;/strong&gt;: Wi-Fi network scanning, WPA/WPA2 interactive password modals, and Ethernet stats via NetworkManager D-Bus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio&lt;/strong&gt;: Sink/source volume, streams, and muting via WirePlumber / PipeWire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bluetooth&lt;/strong&gt;: Device scanning, pairing, and connection management over BlueZ.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Displays &amp;amp; Backlight&lt;/strong&gt;: Hyprland IPC monitor modes, resolutions, scale factors, and single-digit brightness control via sysfs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power&lt;/strong&gt;: Battery health, discharge rates, and power profiles via UPower.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Systemd&lt;/strong&gt;: Service inspection, restarts, and unit status.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Transaction Engine
&lt;/h3&gt;

&lt;p&gt;Rather than blindly executing shell commands and assuming success, settings-tui implements a transactional lifecycle:&lt;br&gt;
READ CURRENT STATE -&amp;gt; MUTATE -&amp;gt; BOUNDED PROPAGATION WAIT -&amp;gt; READ CANONICAL STATE -&amp;gt; VERIFY POSTCONDITION.&lt;/p&gt;

&lt;p&gt;If a Wi-Fi authentication fails or a PipeWire node does not accept a volume change, the TUI transparently reports the exact status badge.&lt;/p&gt;
&lt;h3&gt;
  
  
  Trying it Out
&lt;/h3&gt;

&lt;p&gt;You can try it instantly without compiling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx settings-tui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install from source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ziuus/settings-tui.git
&lt;span class="nb"&gt;cd &lt;/span&gt;settings-tui &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cargo run &lt;span class="nt"&gt;--release&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/ziuus/settings-tui" rel="noopener noreferrer"&gt;https://github.com/ziuus/settings-tui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contributions, ideas, and feedback are welcome!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>linux</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Terminal Renaissance is here!!</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 13 Sep 2026 05:18:57 +0000</pubDate>
      <link>https://dev.to/zius/terminal-renaissance-4fg3</link>
      <guid>https://dev.to/zius/terminal-renaissance-4fg3</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%2F48d4oqp14dfjyw59b5gw.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%2F48d4oqp14dfjyw59b5gw.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something interesting is happening with the terminal again.&lt;/p&gt;

&lt;p&gt;Not a return to the old command line.&lt;/p&gt;

&lt;p&gt;A new generation of terminal-first software is being built.&lt;/p&gt;

&lt;p&gt;And the reason isn't nostalgia.&lt;/p&gt;

&lt;p&gt;Modern terminals are fast, lightweight, composable and automation-friendly. They work well over SSH, can run headlessly, use far fewer resources than many GUI applications, and fit naturally into scripts and larger workflows.&lt;/p&gt;

&lt;p&gt;But terminals are also becoming much more than text interfaces.&lt;/p&gt;

&lt;p&gt;Interactive TUIs, system dashboards, database clients, infrastructure, monitoring, networking, security, AI, development and automation are all becoming increasingly sophisticated terminal experiences.&lt;/p&gt;

&lt;p&gt;AI is accelerating this, but it's only one part of the trend.&lt;/p&gt;

&lt;p&gt;The bigger shift is that the terminal is becoming a programmable interface for complex workflows.&lt;/p&gt;

&lt;p&gt;I've been exploring this space myself with Vanta, a terminal system monitor built in Rust.&lt;br&gt;
&lt;a href="https://github.com/ziuus/vanta" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ziuus" rel="noopener noreferrer"&gt;
        ziuus
      &lt;/a&gt; / &lt;a href="https://github.com/ziuus/vanta" rel="noopener noreferrer"&gt;
        vanta
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The most complete keyboard-driven terminal dashboard in Rust. One pane, six modes — CPU, memory, disk, network, GPU, processes, clock, calendar, media visualizer. ~3MB binary, 2-5% CPU.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;vanta&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Your machine, one pane.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A fast, aesthetic terminal system dashboard in Rust. The most complete keyboard-driven terminal dashboard — one pane, six modes, zero mouse.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@ziuus/vanta" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2cea5d4a2cfd44fabf9a24c6cd01e3751676487303eafc136c2e288c5a7ca4d2/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f407a697575732f76616e74613f7374796c653d666f722d7468652d6261646765266c6f676f3d6e706d266c6f676f436f6c6f723d776869746526636f6c6f723d434233383337" alt="npm"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ziuus/vanta/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bfaf913a37826ac60d162d58850e09791240c65bed2ff44315295678d2dd3658/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7a697575732f76616e74612f63692e796d6c3f7374796c653d666f722d7468652d6261646765266c6162656c3d4349" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ziuus/vanta/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d80b7cd682d2afe079091dce93241137657a817d091c97a55b250072ffde148d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f7a697575732f76616e74613f7374796c653d666f722d7468652d626164676526636f6c6f723d344139453845" alt="Release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ziuus/vanta/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1736263e7abccd5448e130c257555354792cbceae6b18535e86d6157f95b906f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75653f7374796c653d666f722d7468652d6261646765" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://website-pi-seven-nty4ogjp2f.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cd7386ac8904723fe55eaaab0d44c22f7c10293690feac4d4df075723bba140c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c616e64696e675f506167652d3033303731323f7374796c653d666f722d7468652d6261646765266c6f676f3d76657263656c266c6f676f436f6c6f723d7768697465" alt="Landing page"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/ziuus/vanta/docs/dashboard.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fziuus%2Fvanta%2FHEAD%2Fdocs%2Fdashboard.png" alt="vanta dashboard page" width="900"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Vanta collapses everything you care about into one terminal pane: CPU, memory, disk
network, GPU, processes, now-playing, a block-digit clock, a calendar, and an audio
visualizer. Keyboard only. &lt;strong&gt;~3 MB binary, ~2–5% CPU&lt;/strong&gt; at the default 30 fps.&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install -g @ziuus/vanta &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; vanta&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;strong&gt;npm&lt;/strong&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;npm install -g @ziuus/vanta&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Fetches the prebuilt &lt;code&gt;linux-x64&lt;/code&gt; binary. No Rust needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;strong&gt;Prebuilt binary&lt;/strong&gt;&lt;/td&gt;
  &lt;td&gt;&lt;a href="https://github.com/ziuus/vanta/releases/latest" rel="noopener noreferrer"&gt;Releases&lt;/a&gt;&lt;/td&gt;
  &lt;td&gt;Download the &lt;code&gt;tar.gz&lt;/code&gt;, drop &lt;code&gt;vanta&lt;/code&gt; on your &lt;code&gt;PATH&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;strong&gt;cargo&lt;/strong&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;cargo install --git https://github.com/ziuus/vanta&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;Any architecture. Needs a Rust toolchain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;strong&gt;From source&lt;/strong&gt;&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;git clone https://github.com/ziuus/vanta &amp;amp;&amp;amp; cd vanta &amp;amp;&amp;amp; cargo run --release&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;For hacking on it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;One-liner, no install:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx @ziuus/vanta&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Requirements&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Linux (vanta reads &lt;code&gt;/proc&lt;/code&gt; and &lt;code&gt;/sys&lt;/code&gt;). Building from source also needs &lt;code&gt;libdbus&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;sudo pacman -S&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ziuus/vanta" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Maybe terminal-native software is becoming a serious design space again.&lt;/p&gt;

&lt;p&gt;And honestly, it feels like we're still early.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Terminal Renaissance is here</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 13 Sep 2026 05:12:27 +0000</pubDate>
      <link>https://dev.to/zius/terminal-renaissance-is-here-3mnp</link>
      <guid>https://dev.to/zius/terminal-renaissance-is-here-3mnp</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%2F48d4oqp14dfjyw59b5gw.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%2F48d4oqp14dfjyw59b5gw.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something interesting is happening with the terminal again.&lt;/p&gt;

&lt;p&gt;Not a return to the old command line.&lt;/p&gt;

&lt;p&gt;A new generation of terminal-first software is being built.&lt;/p&gt;

&lt;p&gt;And the reason isn't nostalgia.&lt;/p&gt;

&lt;p&gt;Modern terminals are fast, lightweight, composable and automation-friendly. They work well over SSH, can run headlessly, use far fewer resources than many GUI applications, and fit naturally into scripts and larger workflows.&lt;/p&gt;

&lt;p&gt;But terminals are also becoming much more than text interfaces.&lt;/p&gt;

&lt;p&gt;Interactive TUIs, system dashboards, database clients, infrastructure, monitoring, networking, security, AI, development and automation are all becoming increasingly sophisticated terminal experiences.&lt;/p&gt;

&lt;p&gt;AI is accelerating this, but it's only one part of the trend.&lt;/p&gt;

&lt;p&gt;The bigger shift is that the terminal is becoming a programmable interface for complex workflows.&lt;/p&gt;

&lt;p&gt;I've been exploring this space myself with Vanta, a terminal system monitor built in Rust.&lt;br&gt;
&lt;a href="https://github.com/ziuus/vanta" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maybe terminal-native software is becoming a serious design space again.&lt;/p&gt;

&lt;p&gt;And honestly, it feels like we're still early.&lt;/p&gt;

</description>
      <category>cli</category>
      <category>software</category>
      <category>terminal</category>
    </item>
    <item>
      <title>Building Elige: Zero-Hallucination Government Opportunity Intelligence with Google ADK, Gemini 3.5, and Deterministic ASTs</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Mon, 31 Aug 2026 12:41:15 +0000</pubDate>
      <link>https://dev.to/zius/building-elige-zero-hallucination-government-opportunity-intelligence-with-google-adk-gemini-35-424d</link>
      <guid>https://dev.to/zius/building-elige-zero-hallucination-government-opportunity-intelligence-with-google-adk-gemini-35-424d</guid>
      <description>&lt;p&gt;I created this project and article for the purpose of entering the All Things Agentic Hackathon organized by Google and Devpost.&lt;/p&gt;

&lt;p&gt;Excited to share &lt;strong&gt;Elige&lt;/strong&gt; — our submission for the Google &amp;amp; Devpost &lt;strong&gt;#AllThingsAgenticHackathon&lt;/strong&gt;! 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Discovering government grants and subsidies is broken. Most AI chatbots hallucinate legal criteria. We built an autonomous opportunity intelligence agent using &lt;strong&gt;Google ADK&lt;/strong&gt;, &lt;strong&gt;Gemini 3.5&lt;/strong&gt;, and a &lt;strong&gt;Deterministic AST Rule Engine&lt;/strong&gt; to verify and qualify public schemes with 0% hallucination.&lt;/p&gt;

&lt;p&gt;🔗 Live Product: &lt;a href="https://elige-alpha.vercel.app" rel="noopener noreferrer"&gt;https://elige-alpha.vercel.app&lt;/a&gt;&lt;br&gt;
📦 GitHub: &lt;a href="https://github.com/ziuus/Elige.git" rel="noopener noreferrer"&gt;https://github.com/ziuus/Elige.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built on Google Cloud Run &amp;amp; Vertex AI. #GoogleAI #AgenticAI #Gemini #GoogleCloud&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>gemini</category>
      <category>hackathon</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Agentic Loops is becoming next...</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sat, 20 Jun 2026 15:41:31 +0000</pubDate>
      <link>https://dev.to/zius/agentic-loops-is-becoming-next-44e</link>
      <guid>https://dev.to/zius/agentic-loops-is-becoming-next-44e</guid>
      <description>&lt;p&gt;Agentic loops are where AI becomes useful beyond one-shot prompting.&lt;/p&gt;

&lt;p&gt;Instead of asking once and fixing everything manually, you design a loop:&lt;/p&gt;

&lt;p&gt;Plan → Act → Review → Improve → Repeat&lt;/p&gt;

&lt;p&gt;That is how AI agents move from giving answers to completing workflows.&lt;/p&gt;

&lt;p&gt;Prompting asks for output.&lt;br&gt;
Agentic loops build progress.&lt;/p&gt;

&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%2F5mu5u0ye068f558n7okb.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%2F5mu5u0ye068f558n7okb.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Vibe Coding vs AI assisted Engineering</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Thu, 11 Jun 2026 07:12:35 +0000</pubDate>
      <link>https://dev.to/zius/vibe-coding-vs-ai-assisted-engineering-4d5b</link>
      <guid>https://dev.to/zius/vibe-coding-vs-ai-assisted-engineering-4d5b</guid>
      <description>&lt;p&gt;Vibe coding is good for speed.&lt;br&gt;
Engineer-assisted AI is good for building real products.&lt;/p&gt;

&lt;p&gt;There’s a big difference.&lt;/p&gt;

&lt;p&gt;Vibe coding is when you keep prompting until something “looks like it works.”&lt;br&gt;
It feels fast, but the codebase can become messy, fragile, and hard to maintain.&lt;/p&gt;

&lt;p&gt;Engineer-assisted AI is different.&lt;/p&gt;

&lt;p&gt;The engineer still owns the architecture, constraints, testing, security, database design, user flow, and long-term maintainability. AI becomes the accelerator, not the decision-maker.&lt;/p&gt;

&lt;p&gt;AI can generate code.&lt;br&gt;
But engineering is not just writing code.&lt;/p&gt;

&lt;p&gt;Engineering is knowing:&lt;/p&gt;

&lt;p&gt;what should be built,&lt;br&gt;
what should not be built,&lt;br&gt;
where bugs will appear,&lt;br&gt;
how systems scale,&lt;br&gt;
how users break flows,&lt;br&gt;
how to debug,&lt;br&gt;
how to ship safely.&lt;/p&gt;

&lt;p&gt;The future is not “AI replacing engineers.”&lt;br&gt;
The future is engineers who know how to command AI properly outperforming those who only use it casually.&lt;/p&gt;

&lt;p&gt;Vibe coding can create demos.&lt;br&gt;
Engineer-assisted AI can create products.&lt;/p&gt;

&lt;p&gt;That’s the difference.&lt;br&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%2Fv7mryobtggd7lxlxbs3t.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%2Fv7mryobtggd7lxlxbs3t.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Built a Desktop App That Fixes Linux Dual-Boot Folder Access in One Click</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 10 May 2026 20:17:03 +0000</pubDate>
      <link>https://dev.to/zius/i-built-a-desktop-app-that-fixes-linux-dual-boot-folder-access-in-one-click-pi7</link>
      <guid>https://dev.to/zius/i-built-a-desktop-app-that-fixes-linux-dual-boot-folder-access-in-one-click-pi7</guid>
      <description>&lt;p&gt;For years, every time I booted into Linux, I'd SSH into my own machine just to grab a file from my Windows partition. Or worse — I'd reboot, wait for Windows updates, grab the file, and reboot back. Sound familiar?&lt;/p&gt;

&lt;p&gt;Dual-booting should be the best of both worlds. In practice? It's a constant dance of "which OS has my files?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's why I built Lindy.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Every Linux dual-boot user knows this pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows NTFS partitions don't mount automatically with write access&lt;/li&gt;
&lt;li&gt;chown, chmod, fstab edits — it's 2026, why is this still manual?&lt;/li&gt;
&lt;li&gt;Every distro handles mount differently&lt;/li&gt;
&lt;li&gt;New Linux users give up and stay on Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Lindy Does
&lt;/h2&gt;

&lt;p&gt;Lindy is a &lt;strong&gt;Tauri 2 + React desktop app&lt;/strong&gt; that detects your Windows partitions, scans for user folders, and mounts them with one click. No terminal, no fstab editing, no permission headaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One click. Your Windows folders appear in your Linux home.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smart Auto-Map&lt;/strong&gt; — Detects Windows partitions (NTFS/exFAT), finds usernames, maps Desktop, Documents, Downloads, Pictures, Music, Videos automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual Auto-Map&lt;/strong&gt; — Power users can specify custom mount points and folder selections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure&lt;/strong&gt; — Proper permissions via polkit, no wild chmod 777&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built with Tauri 2 + React + Rust&lt;/strong&gt; — Lightweight, fast, native performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Side
&lt;/h2&gt;

&lt;p&gt;Built entirely in the open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tauri 2&lt;/strong&gt; for the native desktop shell (tiny bundle vs Electron)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; for the UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; backend handles partition detection and mount logic via Tauri commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; for dependency management&lt;/li&gt;
&lt;li&gt;Cargo.toml: tauri 2, serde, serde_json, tauri-plugin-opener, tauri-plugin-dialog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mount backend parses &lt;code&gt;lsblk&lt;/code&gt; output, detects NTFS/exFAT partitions, finds Windows user directories, and mounts them using system utilities with polkit elevation. All the complexity is hidden behind a clean UI.&lt;/p&gt;

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

&lt;p&gt;Lindy is open source and available now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ziuus/lindy" rel="noopener noreferrer"&gt;https://github.com/ziuus/lindy&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Installers:&lt;/strong&gt; .deb, .rpm, .AppImage available in the repo&lt;/p&gt;

&lt;p&gt;I'd love feedback, contributions, or just to hear if this solves the same problem for you that it solved for me.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you been fighting with dual-boot file access? Drop a comment — I want to hear your setup horror stories too.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>rust</category>
      <category>opensource</category>
      <category>react</category>
    </item>
    <item>
      <title>I Built a Desktop App That Fixes Linux Dual-Boot Folder Access in One Click</title>
      <dc:creator>Noel Paul</dc:creator>
      <pubDate>Sun, 10 May 2026 20:17:03 +0000</pubDate>
      <link>https://dev.to/zius/i-built-a-desktop-app-that-fixes-linux-dual-boot-folder-access-in-one-click-41i6</link>
      <guid>https://dev.to/zius/i-built-a-desktop-app-that-fixes-linux-dual-boot-folder-access-in-one-click-41i6</guid>
      <description>&lt;p&gt;For years, every time I booted into Linux, I'd SSH into my own machine just to grab a file from my Windows partition. Or worse — I'd reboot, wait for Windows updates, grab the file, and reboot back. Sound familiar?&lt;/p&gt;

&lt;p&gt;Dual-booting should be the best of both worlds. In practice? It's a constant dance of "which OS has my files?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's why I built Lindy.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Every Linux dual-boot user knows this pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows NTFS partitions don't mount automatically with write access&lt;/li&gt;
&lt;li&gt;chown, chmod, fstab edits — it's 2026, why is this still manual?&lt;/li&gt;
&lt;li&gt;Every distro handles mount differently&lt;/li&gt;
&lt;li&gt;New Linux users give up and stay on Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Lindy Does
&lt;/h2&gt;

&lt;p&gt;Lindy is a &lt;strong&gt;Tauri 2 + React desktop app&lt;/strong&gt; that detects your Windows partitions, scans for user folders, and mounts them with one click. No terminal, no fstab editing, no permission headaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One click. Your Windows folders appear in your Linux home.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smart Auto-Map&lt;/strong&gt; — Detects Windows partitions (NTFS/exFAT), finds usernames, maps Desktop, Documents, Downloads, Pictures, Music, Videos automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual Auto-Map&lt;/strong&gt; — Power users can specify custom mount points and folder selections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure&lt;/strong&gt; — Proper permissions via polkit, no wild chmod 777&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built with Tauri 2 + React + Rust&lt;/strong&gt; — Lightweight, fast, native performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Side
&lt;/h2&gt;

&lt;p&gt;Built entirely in the open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tauri 2&lt;/strong&gt; for the native desktop shell (tiny bundle vs Electron)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt; for the UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; backend handles partition detection and mount logic via Tauri commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; for dependency management&lt;/li&gt;
&lt;li&gt;Cargo.toml: tauri 2, serde, serde_json, tauri-plugin-opener, tauri-plugin-dialog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mount backend parses &lt;code&gt;lsblk&lt;/code&gt; output, detects NTFS/exFAT partitions, finds Windows user directories, and mounts them using system utilities with polkit elevation. All the complexity is hidden behind a clean UI.&lt;/p&gt;

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

&lt;p&gt;Lindy is open source and available now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ziuus/lindy" rel="noopener noreferrer"&gt;https://github.com/ziuus/lindy&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Installers:&lt;/strong&gt; .deb, .rpm, .AppImage available in the repo&lt;/p&gt;

&lt;p&gt;I'd love feedback, contributions, or just to hear if this solves the same problem for you that it solved for me.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you been fighting with dual-boot file access? Drop a comment — I want to hear your setup horror stories too.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>rust</category>
      <category>opensource</category>
      <category>react</category>
    </item>
  </channel>
</rss>
