<?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.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>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>
