<?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: Theo Slater</title>
    <description>The latest articles on DEV Community by Theo Slater (@theoslater).</description>
    <link>https://dev.to/theoslater</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%2F3873857%2Fab0e0846-ac43-45ff-969e-bf672db0db09.jpeg</url>
      <title>DEV Community: Theo Slater</title>
      <link>https://dev.to/theoslater</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theoslater"/>
    <language>en</language>
    <item>
      <title>I Built a Desktop Chat App for Running Local LLMs Offline</title>
      <dc:creator>Theo Slater</dc:creator>
      <pubDate>Wed, 20 May 2026 15:16:48 +0000</pubDate>
      <link>https://dev.to/theoslater/i-built-a-desktop-chat-app-for-running-local-llms-offline-6im</link>
      <guid>https://dev.to/theoslater/i-built-a-desktop-chat-app-for-running-local-llms-offline-6im</guid>
      <description>&lt;p&gt;A few months ago I got tired of bouncing between ChatGPT, Claude, and a dozen other AI chat UIs every time I wanted to test a different model. It felt like productivity, if productivity involved tab overload and constant context switching.&lt;/p&gt;

&lt;p&gt;I also wanted to run everything locally without sending data off to someone else’s server just to ask a question about JSON formatting.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Openbench AI&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;OpenBench is a desktop chat app that connects to Ollama and lets you talk to local LLMs without the usual ritual of Docker, Python environments, or “why is this port not working again” debugging sessions.&lt;/p&gt;

&lt;p&gt;You install it. You open it. You chat.&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Multi-model chat (side by side comparison)
&lt;/h3&gt;

&lt;p&gt;You can run multiple models at once and watch them respond in real time to the same prompt.&lt;/p&gt;

&lt;p&gt;Instead of guessing which model is best, you can just compare them directly under identical conditions like a mildly scientific experiment that occasionally exposes how inconsistent models can be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown + LaTeX support
&lt;/h3&gt;

&lt;p&gt;Full rendering via KaTeX.&lt;/p&gt;

&lt;p&gt;So when a model writes equations or structured explanations, it actually looks like something a human might willingly read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guest mode
&lt;/h3&gt;

&lt;p&gt;Temporary chats that disappear when you close the app.&lt;/p&gt;

&lt;p&gt;No storage. No accounts. No memory overhead.&lt;/p&gt;

&lt;p&gt;Just quick experiments without commitment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama model management
&lt;/h3&gt;

&lt;p&gt;You can install models directly inside the app instead of juggling terminal commands and hoping you typed everything correctly the first time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversation tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Archive chats&lt;/li&gt;
&lt;li&gt;System prompt presets&lt;/li&gt;
&lt;li&gt;CUstom system prompt&lt;/li&gt;
&lt;li&gt;Clean interface without unnecessary clutter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tauri&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;MUI&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;ollama-rs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What i would change
&lt;/h2&gt;

&lt;p&gt;If I rebuilt it, I’d add OpenAI-compatible API support from day one.&lt;/p&gt;

&lt;p&gt;Right now it only works with Ollama, though the architecture already supports additional providers. I just haven’t wired them in yet because priorities are a fictional concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;The project is open source, and release builds are available if you want to try it without compiling anything yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/monolabsdev/openbench-ai" rel="noopener noreferrer"&gt;Openbench GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing note
&lt;/h2&gt;

&lt;p&gt;Somewhere between building multi-model streaming and debugging Rust event bridges, I learned that the world did not strictly need another chat UI.&lt;/p&gt;

&lt;p&gt;So I made one anyway.&lt;/p&gt;

&lt;p&gt;For what it’s worth, it behaves better than most tools that have significantly more funding and optimism.&lt;/p&gt;

&lt;p&gt;And yes, it works just fine for a gay developer trying to wrangle multiple AI models without losing their mind to tool fragmentation.&lt;/p&gt;

&lt;p&gt;Which is probably more honesty than most software documentation is legally allowed to contain.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>ollama</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a Desktop Chat App for Running Local LLMs Offline</title>
      <dc:creator>Theo Slater</dc:creator>
      <pubDate>Wed, 20 May 2026 15:16:48 +0000</pubDate>
      <link>https://dev.to/theoslater/i-built-a-desktop-chat-app-for-running-local-llms-offline-21cm</link>
      <guid>https://dev.to/theoslater/i-built-a-desktop-chat-app-for-running-local-llms-offline-21cm</guid>
      <description>&lt;p&gt;A few months ago I got tired of bouncing between ChatGPT, Claude, and a dozen other AI chat UIs every time I wanted to test a different model. It felt like productivity, if productivity involved tab overload and constant context switching.&lt;/p&gt;

&lt;p&gt;I also wanted to run everything locally without sending data off to someone else’s server just to ask a question about JSON formatting.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Openbench AI&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;OpenBench is a desktop chat app that connects to Ollama and lets you talk to local LLMs without the usual ritual of Docker, Python environments, or “why is this port not working again” debugging sessions.&lt;/p&gt;

&lt;p&gt;You install it. You open it. You chat.&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Multi-model chat (side by side comparison)
&lt;/h3&gt;

&lt;p&gt;You can run multiple models at once and watch them respond in real time to the same prompt.&lt;/p&gt;

&lt;p&gt;Instead of guessing which model is best, you can just compare them directly under identical conditions like a mildly scientific experiment that occasionally exposes how inconsistent models can be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown + LaTeX support
&lt;/h3&gt;

&lt;p&gt;Full rendering via KaTeX.&lt;/p&gt;

&lt;p&gt;So when a model writes equations or structured explanations, it actually looks like something a human might willingly read.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guest mode
&lt;/h3&gt;

&lt;p&gt;Temporary chats that disappear when you close the app.&lt;/p&gt;

&lt;p&gt;No storage. No accounts. No memory overhead.&lt;/p&gt;

&lt;p&gt;Just quick experiments without commitment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama model management
&lt;/h3&gt;

&lt;p&gt;You can install models directly inside the app instead of juggling terminal commands and hoping you typed everything correctly the first time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversation tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Archive chats&lt;/li&gt;
&lt;li&gt;System prompt presets&lt;/li&gt;
&lt;li&gt;CUstom system prompt&lt;/li&gt;
&lt;li&gt;Clean interface without unnecessary clutter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tauri&lt;/li&gt;
&lt;li&gt;Zustand&lt;/li&gt;
&lt;li&gt;MUI&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;ollama-rs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What i would change
&lt;/h2&gt;

&lt;p&gt;If I rebuilt it, I’d add OpenAI-compatible API support from day one.&lt;/p&gt;

&lt;p&gt;Right now it only works with Ollama, though the architecture already supports additional providers. I just haven’t wired them in yet because priorities are a fictional concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;The project is open source, and release builds are available if you want to try it without compiling anything yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/monolabsdev/openbench-ai" rel="noopener noreferrer"&gt;Openbench GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing note
&lt;/h2&gt;

&lt;p&gt;Somewhere between building multi-model streaming and debugging Rust event bridges, I learned that the world did not strictly need another chat UI.&lt;/p&gt;

&lt;p&gt;So I made one anyway.&lt;/p&gt;

&lt;p&gt;For what it’s worth, it behaves better than most tools that have significantly more funding and optimism.&lt;/p&gt;

&lt;p&gt;And yes, it works just fine for a gay developer trying to wrangle multiple AI models without losing their mind to tool fragmentation.&lt;/p&gt;

&lt;p&gt;Which is probably more honesty than most software documentation is legally allowed to contain.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>ollama</category>
      <category>opensource</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Theo Slater</dc:creator>
      <pubDate>Sat, 11 Apr 2026 17:26:05 +0000</pubDate>
      <link>https://dev.to/theoslater/-3d73</link>
      <guid>https://dev.to/theoslater/-3d73</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/peixotomdb/i-got-tired-of-using-10-different-dev-tools-so-i-built-my-own-2gl4" class="crayons-story__hidden-navigation-link"&gt;I got tired of using 10 different dev tools, so I built my own&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="/peixotomdb" 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%2F1019001%2Fac7ddfda-b0b5-4608-9f04-9a4155383488.jpeg" alt="peixotomdb profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/peixotomdb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Peixoto
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Peixoto
                
              
              &lt;div id="story-author-preview-content-3487106" 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="/peixotomdb" 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%2F1019001%2Fac7ddfda-b0b5-4608-9f04-9a4155383488.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Peixoto&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/peixotomdb/i-got-tired-of-using-10-different-dev-tools-so-i-built-my-own-2gl4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 11&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/peixotomdb/i-got-tired-of-using-10-different-dev-tools-so-i-built-my-own-2gl4" id="article-link-3487106"&gt;
          I got tired of using 10 different dev tools, so I built my own
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&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;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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/peixotomdb/i-got-tired-of-using-10-different-dev-tools-so-i-built-my-own-2gl4" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/peixotomdb/i-got-tired-of-using-10-different-dev-tools-so-i-built-my-own-2gl4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&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;
            5 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>
  </channel>
</rss>
