<?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: Rehan Mazhar</title>
    <description>The latest articles on DEV Community by Rehan Mazhar (@r__1).</description>
    <link>https://dev.to/r__1</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%2F3825979%2Fe9b2ec95-be43-4094-ac2b-e2d738de67b8.webp</url>
      <title>DEV Community: Rehan Mazhar</title>
      <link>https://dev.to/r__1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/r__1"/>
    <language>en</language>
    <item>
      <title>[FIX] "Usage Limit Exceeded" on Mimo CLI / Unlocking OpenCode Free Models with Zen-Proxy</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Fri, 14 Aug 2026 21:44:37 +0000</pubDate>
      <link>https://dev.to/r__1/fix-usage-limit-exceeded-on-mimo-cli-unlocking-opencode-free-models-with-zen-proxy-40i2</link>
      <guid>https://dev.to/r__1/fix-usage-limit-exceeded-on-mimo-cli-unlocking-opencode-free-models-with-zen-proxy-40i2</guid>
      <description>&lt;h3&gt;
  
  
  💡 Fix for "Usage Limit Exceeded" Error on Alternative Coding Agents
&lt;/h3&gt;

&lt;p&gt;If you are getting a &lt;strong&gt;"Usage Limit Exceeded"&lt;/strong&gt; error on the Mimo CLI after only making one or two requests, the issue is that OpenCode has restricted their free models to only work directly within the official OpenCode TUI. They do this by checking the &lt;code&gt;User-Agent&lt;/code&gt; (UA) header in your requests.&lt;/p&gt;

&lt;p&gt;To fix this, I created an open-source proxy called &lt;strong&gt;&lt;a href="https://github.com/12errh/zen-proxy" rel="noopener noreferrer"&gt;Zen-Proxy&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  🛠️ How it works
&lt;/h4&gt;

&lt;p&gt;The proxy acts as a middleman. When you send a request from an external coding agent, Zen-Proxy intercepts it, changes your default &lt;code&gt;User-Agent&lt;/code&gt; header to the official OpenCode UA, and passes it through. This unlocks the free models for use in any coding agent.&lt;/p&gt;

&lt;h4&gt;
  
  
  🚀 Key Features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple Setup:&lt;/strong&gt; Route your OpenCode base URL to the proxy URL, and you are good to go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy Installation:&lt;/strong&gt; Installs quickly using a single &lt;code&gt;curl&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard:&lt;/strong&gt; Includes a clean, beautiful web dashboard to monitor and manage your requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this tool helps resolve your issue, please feel free to drop a ⭐ &lt;strong&gt;star on the repository&lt;/strong&gt;!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>opensource</category>
      <category>softwaredevelopment</category>
      <category>tools</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Mon, 01 Jun 2026 07:31:50 +0000</pubDate>
      <link>https://dev.to/r__1/-31j0</link>
      <guid>https://dev.to/r__1/-31j0</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5" class="crayons-story__hidden-navigation-link"&gt;How I replaced Gemini in Antigravity 2.0 with any OpenAI-compatible model&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/r__1" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3825979%2Fe9b2ec95-be43-4094-ac2b-e2d738de67b8.webp" alt="r__1 profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/r__1" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Rehan Mazhar
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Rehan Mazhar
                
              
              &lt;div id="story-author-preview-content-3789106" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/r__1" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3825979%2Fe9b2ec95-be43-4094-ac2b-e2d738de67b8.webp" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Rehan Mazhar&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 31&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5" id="article-link-3789106"&gt;
          How I replaced Gemini in Antigravity 2.0 with any OpenAI-compatible model
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How I replaced Gemini in Antigravity 2.0 with any OpenAI-compatible model</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Sun, 31 May 2026 12:41:03 +0000</pubDate>
      <link>https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5</link>
      <guid>https://dev.to/r__1/how-i-replaced-gemini-in-antigravity-20-with-any-openai-compatible-model-3ja5</guid>
      <description>&lt;p&gt;Antigravity 2.0 is Google’s agentic coding IDE. It gives AI agents filesystem access, MCP tools, subagent orchestration, and browser automation. It’s powerful — but locked to Gemini.&lt;br&gt;
I wanted to use other models. So I built a proxy.&lt;br&gt;
The problem&lt;br&gt;
Antigravity sends massive inline context with every request: 30+ skill descriptions, full plugin lists, user rules, agent frameworks — around 4000 tokens of boilerplate. External models can’t parse this effectively. And Antigravity Desktop requires specific response metadata (safetyRatings, index: 0, groundingMetadata) that OpenAI-format APIs don’t provide.&lt;br&gt;
The solution&lt;br&gt;
A TypeScript TLS proxy (~400 lines) that sits between Antigravity and your model provider:&lt;br&gt;
Antigravity → Proxy (443) → OpenAI API → NVIDIA / OpenRouter&lt;br&gt;
Key features&lt;br&gt;
Context stripping: Removes the ~4000 tokens of inline skills/plugins/rules and injects a compact reference to agent-context.md (a ~150-line runtime definition file)&lt;br&gt;
Bidirectional translation: Converts Google-format messages, tools, and streaming to OpenAI-format and back&lt;br&gt;
Desktop metadata: Adds safetyRatings, groundingMetadata, and index: 0 to every response — without these, Antigravity Desktop silently crashes&lt;br&gt;
429 retry: Exponential backoff (1s → 2s → 4s → 8s) for rate limits&lt;br&gt;
Arg sanitization: Strips Antigravity’s internal metadata fields (toolAction, toolSummary) from tool call arguments&lt;br&gt;
What works&lt;br&gt;
Everything except audio and background project sync. Chat, code gen, file operations (view_file, write_to_file, list_dir, grep_search, run_command), browser automation (Chrome DevTools MCP — open browser, screenshot, console check, JS evaluation), image generation, subagent orchestration, streaming, thinking/reasoning.&lt;br&gt;
The test&lt;br&gt;
I asked the agent to build a landing page for Antigravity 2.0. It:&lt;br&gt;
Read agent-context.md to understand the runtime&lt;br&gt;
Created index.html, styles.css, and script.js with a particle system, terminal animation, and interactive UI&lt;br&gt;
Opened the page in Chrome via the browser MCP tool&lt;br&gt;
Took a full-page screenshot&lt;br&gt;
Checked browser console for errors&lt;br&gt;
Evaluated JavaScript to verify animations and counters were running&lt;br&gt;
Reported results with visual feedback&lt;br&gt;
All through step-3.7-flash on NVIDIA NIM. Not a single Google API call.&lt;br&gt;
Setup&lt;br&gt;
git clone &lt;a href="https://github.com/12errh/antigravity-proxy" rel="noopener noreferrer"&gt;https://github.com/12errh/antigravity-proxy&lt;/a&gt;&lt;br&gt;
cd antigravity-proxy&lt;br&gt;
.\setup.ps1&lt;br&gt;
Pick NVIDIA or OpenRouter, paste your API key. The script handles admin elevation, dependencies, TLS certificates, and proxy startup.&lt;br&gt;
To change models, edit proxy/models.json:&lt;br&gt;
{&lt;br&gt;
  "claude-sonnet-4-6-thinking": "deepseek-ai/deepseek-v4-flash",&lt;br&gt;
  "default": "deepseek-ai/deepseek-v4-flash"&lt;br&gt;
}&lt;br&gt;
Supported providers&lt;br&gt;
Provider&lt;br&gt;
Models&lt;br&gt;
NVIDIA NIM&lt;br&gt;
deepseek-ai/deepseek-v4-flash, stepfun-ai/step-3.7-flash&lt;br&gt;
OpenRouter&lt;br&gt;
Any OpenAI-compatible model&lt;br&gt;
Limitations&lt;br&gt;
Audio: Not mapped yet&lt;br&gt;
Background project sync: Language Server init calls to Google need a Gemini key (sidebar file tree, etc.)&lt;br&gt;
Everything else works transparently.&lt;br&gt;
Try it&lt;br&gt;
&lt;a href="https://github.com/12errh/antigravity-proxy" rel="noopener noreferrer"&gt;https://github.com/12errh/antigravity-proxy&lt;/a&gt;&lt;br&gt;
MIT license. Contributions welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Thu, 21 May 2026 02:46:30 +0000</pubDate>
      <link>https://dev.to/r__1/-3436</link>
      <guid>https://dev.to/r__1/-3436</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/r__1/tired-of-the-frontendbackend-split-meet-zolt-full-stack-apps-in-pure-python-2ch8" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" 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%2Fan5s1u4bsdmp2dvjr6nr.png" height="418" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/r__1/tired-of-the-frontendbackend-split-meet-zolt-full-stack-apps-in-pure-python-2ch8" rel="noopener noreferrer" class="c-link"&gt;
            Tired of the Frontend/Backend split? Meet Zolt: Full-Stack Apps in Pure Python. - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Introduction: As developers, we spend half our time managing the "gap" between our Python backends...
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" 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%2F8j7kvp660rqzt99zui8e.png" width="300" height="299"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Why I’m building a Python-only UI framework (and how v1.5 will change the game)</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Sun, 26 Apr 2026 20:54:20 +0000</pubDate>
      <link>https://dev.to/r__1/why-im-building-a-python-only-ui-framework-and-how-v15-will-change-the-game-559h</link>
      <guid>https://dev.to/r__1/why-im-building-a-python-only-ui-framework-and-how-v15-will-change-the-game-559h</guid>
      <description>&lt;p&gt;The Problem:&lt;br&gt;
Building UIs in Python is fragmented. We use one library for web dashboards, another for outdated desktop apps, and a third for terminal TUIs. We’re blocked by the "Frontend Barrier"—the need to learn an entirely separate skill tree just to make our ideas look good.&lt;/p&gt;

&lt;p&gt;The Solution: Zolt v1.0&lt;br&gt;
I built Zolt to provide a single, elegant API. It uses an AST-walking compiler to build an Intermediate Representation (IR) tree, which then dispatches to specific renderers for the web, native windows, or the CLI.&lt;/p&gt;

&lt;p&gt;The Future: The "Awwwards-Quality" Roadmap (v1.5)&lt;br&gt;
V1.0 proved the concept. V1.5 is about aesthetics. I want Python devs to build sites that are indistinguishable from those made by top-tier design agencies.&lt;/p&gt;

&lt;p&gt;We are adding:&lt;/p&gt;

&lt;p&gt;A Native Animation API: Use component.animate(slide_up()) to generate professional GSAP micro-interactions.&lt;/p&gt;

&lt;p&gt;Built-in 3D: Declare Scene3D or Spline models directly in your Python class.&lt;/p&gt;

&lt;p&gt;Figma Integration: A CLI tool that maps Figma auto-layout and typography directly to Zolt components, saving 80% of development time.&lt;/p&gt;

&lt;p&gt;The Zolt UI Library: 80+ prebuilt, production-ready components—from pricing tables to full auth flows—that are dark-mode compatible and accessible out of the box.&lt;/p&gt;

&lt;p&gt;Join the Build:&lt;br&gt;
V1.0 is ready for your MVPs. V1.5 is bringing the soul. I’d love your feedback on our technical roadmap.&lt;/p&gt;

&lt;p&gt;[&lt;a href="https://github.com/12errh/Zolt" rel="noopener noreferrer"&gt;https://github.com/12errh/Zolt&lt;/a&gt;]&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tired of the Frontend/Backend split? Meet Zolt: Full-Stack Apps in Pure Python.</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Sun, 26 Apr 2026 20:47:07 +0000</pubDate>
      <link>https://dev.to/r__1/tired-of-the-frontendbackend-split-meet-zolt-full-stack-apps-in-pure-python-2ch8</link>
      <guid>https://dev.to/r__1/tired-of-the-frontendbackend-split-meet-zolt-full-stack-apps-in-pure-python-2ch8</guid>
      <description>&lt;p&gt;Introduction:&lt;br&gt;
As developers, we spend half our time managing the "gap" between our Python backends and our JS frontends. I wanted to close that gap. Today, I’m excited to share Zolt v1.&lt;/p&gt;

&lt;p&gt;What is Zolt?&lt;br&gt;
Zolt is a unified framework that allows you to build beautiful UIs and strong backends using nothing but Python. No more API boilerplate or context-switching.&lt;/p&gt;

&lt;p&gt;The Current State (v1):&lt;br&gt;
v1 is the "Foundation Release." It’s built for developers who need to ship functional, robust apps right now. It handles the logic, the routing, and the layout seamlessly.&lt;/p&gt;

&lt;p&gt;The Roadmap (v1.5):&lt;br&gt;
I’m already working on v1.5. While v1 is the solid base, v1.5 is where the magic happens. We are focusing on:&lt;/p&gt;

&lt;p&gt;Cinematic Animations: High-end motion design triggered by Python state.&lt;/p&gt;

&lt;p&gt;Production Polish: Optimizing for "award-winning" site performance.&lt;/p&gt;

&lt;p&gt;True Dark Aesthetics: Built-in support for premium, high-contrast themes.&lt;/p&gt;

&lt;p&gt;Try it out:&lt;br&gt;
[&lt;a href="https://github.com/12errh/Zolt" rel="noopener noreferrer"&gt;https://github.com/12errh/Zolt&lt;/a&gt;]&lt;br&gt;
Check out the repo, star it, and let me know what you think. Let's make Python the king of the full stack.&lt;/p&gt;

&lt;p&gt;[Link to GitHub]&lt;/p&gt;

</description>
      <category>python</category>
      <category>showdev</category>
      <category>ui</category>
      <category>webdev</category>
    </item>
    <item>
      <title>R1: A Runtime That Runs Tauri Apps in the Browser</title>
      <dc:creator>Rehan Mazhar</dc:creator>
      <pubDate>Sun, 15 Mar 2026 22:31:22 +0000</pubDate>
      <link>https://dev.to/r__1/r1-a-runtime-that-runs-tauri-apps-in-the-browser-1h64</link>
      <guid>https://dev.to/r__1/r1-a-runtime-that-runs-tauri-apps-in-the-browser-1h64</guid>
      <description>&lt;p&gt;&lt;strong&gt;Live demo&lt;/strong&gt;: &lt;a href="https://r1-todo-demo.netlify.app/" rel="noopener noreferrer"&gt;https://r1-todo-demo.netlify.app/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Source code&lt;/strong&gt;: &lt;a href="https://github.com/12errh/r1-tauriweb-runtime-v1" rel="noopener noreferrer"&gt;https://github.com/12errh/r1-tauriweb-runtime-v1&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Tauri is a fantastic framework for building desktop apps with a Rust backend and a web frontend. But sharing a Tauri app with someone still means sending them an installer, asking them to trust an executable, and waiting for them to download 50–100MB. For a lot of use cases — demos, quick tools, apps for non-technical users — that friction kills adoption.&lt;/p&gt;

&lt;p&gt;What if you could just send someone a URL?&lt;/p&gt;

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

&lt;p&gt;R1 is a browser-native runtime for Tauri. You take your existing Tauri project, add one line to your &lt;code&gt;vite.config.ts&lt;/code&gt;, run &lt;code&gt;npm run build&lt;/code&gt;, and the output is a static folder. Deploy it to Vercel, Netlify, or GitHub Pages. Anyone with a browser can now run your app instantly.&lt;/p&gt;

&lt;p&gt;No server. No backend. No installer. Just a URL.&lt;/p&gt;

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

&lt;p&gt;The browser is a sandbox — you can't run a native Rust binary inside it. R1 solves this with a layered architecture:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Rust → WASM&lt;/strong&gt;&lt;br&gt;
The R1 Vite plugin automatically compiles your &lt;code&gt;src-tauri/&lt;/code&gt; directory to WebAssembly using &lt;code&gt;wasm-pack&lt;/code&gt; during &lt;code&gt;npm run build&lt;/code&gt;. The &lt;code&gt;.wasm&lt;/code&gt; binary is bundled as a static asset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Kernel Worker&lt;/strong&gt;&lt;br&gt;
All WASM execution happens in a dedicated Web Worker — never the main thread. If your Rust code blocks for 2 seconds processing a file, the UI stays perfectly responsive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. WASI Shim&lt;/strong&gt;&lt;br&gt;
When Rust is compiled to &lt;code&gt;wasm32-wasi&lt;/code&gt;, every &lt;code&gt;std::fs&lt;/code&gt; call becomes a WASI syscall. R1 intercepts those syscalls and redirects them to the browser's Origin Private File System (OPFS). Your Rust code calls &lt;code&gt;std::fs::write("/data/todos.json", ...)&lt;/code&gt; exactly as it would on a desktop — it just happens to write to OPFS instead of a real disk. Files persist across page refreshes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. IPC Bridge&lt;/strong&gt;&lt;br&gt;
Real Tauri injects &lt;code&gt;window.__TAURI_INTERNALS__&lt;/code&gt; into your app's WebView. R1 patches the same global at boot time. Your frontend calls &lt;code&gt;invoke('add_todo', { text: 'Buy milk' })&lt;/code&gt; exactly as it always did. R1 routes that call through the Kernel Worker to your WASM backend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Event Bridge&lt;/strong&gt;&lt;br&gt;
Rust can emit events back to JS using &lt;code&gt;r1::emit("progress", payload)&lt;/code&gt;. These arrive at your &lt;code&gt;listen()&lt;/code&gt; handlers in the frontend — the same API you use in a real Tauri app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Service Worker&lt;/strong&gt;&lt;br&gt;
Asset URLs (&lt;code&gt;convertFileSrc('/app/logo.png')&lt;/code&gt;) are intercepted by a Service Worker that reads the file from OPFS and serves it with the correct MIME type.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;invoke()&lt;/code&gt; — Tauri v1 and v2 compatible&lt;/li&gt;
&lt;li&gt;✅ &lt;code&gt;std::fs&lt;/code&gt; read/write from Rust (via WASI → OPFS)&lt;/li&gt;
&lt;li&gt;✅ Rust → JS event bridge&lt;/li&gt;
&lt;li&gt;✅ Serde JSON bridge for complex data&lt;/li&gt;
&lt;li&gt;✅ WASM panic isolation&lt;/li&gt;
&lt;li&gt;✅ Tauri API plugins: &lt;code&gt;fs&lt;/code&gt;, &lt;code&gt;event&lt;/code&gt;, &lt;code&gt;store&lt;/code&gt;, &lt;code&gt;os&lt;/code&gt;, &lt;code&gt;path&lt;/code&gt;, &lt;code&gt;dialog&lt;/code&gt;, &lt;code&gt;clipboard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ Virtual Window Manager (macOS, Windows 11, Linux themes)&lt;/li&gt;
&lt;li&gt;✅ 31/31 unit tests passing&lt;/li&gt;
&lt;li&gt;✅ Live todo demo running on Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations (Being Honest)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The WASI shim covers the most common syscalls but not all of them&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shell&lt;/code&gt; execute is stubbed — you can't spawn real child processes in a browser&lt;/li&gt;
&lt;li&gt;Heavy native dependencies that can't compile to WASM won't work&lt;/li&gt;
&lt;li&gt;Best suited for simple to medium complexity Tauri apps right now&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The live demo is a real Tauri todo app — written as a standard desktop Tauri project, then compiled through R1. Add a todo, close the tab, reopen it. The data persists.&lt;/p&gt;

&lt;p&gt;If you have a simple Tauri app, I'd love for you to try running it through R1 and see what breaks. That feedback is exactly what drives the next version.&lt;/p&gt;

&lt;p&gt;The full architecture roadmap that guided the build is in the repository if you want to understand the design decisions.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>showdev</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
