<?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: Arun Brahma</title>
    <description>The latest articles on DEV Community by Arun Brahma (@arunbrahma).</description>
    <link>https://dev.to/arunbrahma</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%2F4006079%2F992f00f1-01d8-49cf-8a7c-90949aca6090.png</url>
      <title>DEV Community: Arun Brahma</title>
      <link>https://dev.to/arunbrahma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arunbrahma"/>
    <language>en</language>
    <item>
      <title>I built a free Mac dictation app that never sends your voice to a server</title>
      <dc:creator>Arun Brahma</dc:creator>
      <pubDate>Sun, 15 Nov 2026 08:51:35 +0000</pubDate>
      <link>https://dev.to/arunbrahma/i-built-a-free-mac-dictation-app-that-never-sends-your-voice-to-a-server-155h</link>
      <guid>https://dev.to/arunbrahma/i-built-a-free-mac-dictation-app-that-never-sends-your-voice-to-a-server-155h</guid>
      <description>&lt;p&gt;A few months ago my wrists started aching by mid-afternoon. I type for a living, most days for nine to twelve hours, and by evening I was closing the laptop instead of answering one more email.&lt;/p&gt;

&lt;p&gt;I tried the voice to text apps people recommend. A couple of them are good. Every one I tried wanted a monthly subscription and sent my voice to a server before the text came back, and I've written enough software to know that audio can sit on somebody else's disk for as long as they like.&lt;/p&gt;

&lt;p&gt;So I built my own, over a few weekends that turned into a few months. I wanted to see whether small open models could do the whole job on a laptop people already own. The result is &lt;a href="https://purr.arunbrahma.com/" rel="noopener noreferrer"&gt;Purr&lt;/a&gt;, a free, open-source menu bar app for macOS. You hold Right Option, talk and let go, and the words get typed into whatever text field has focus. It doesn't need an account, and nothing it hears leaves your Mac. Once the models have downloaded, it works offline.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/f5YK0at-RSw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Dictation is the main thing. If you'd rather see words appear while you talk, Smart Typing types as you speak instead of waiting for the key to come up.&lt;/p&gt;

&lt;p&gt;Voice Edit works on text you've already written. Select a paragraph, hold the Voice Edit key, say "make the second sentence shorter", and only that sentence changes.&lt;/p&gt;

&lt;p&gt;Meetings mode records your mic and your Mac's audio together, so nobody has to invite a bot to the call. It labels who said what and saves the notes as Markdown, with a summary if you want one.&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%2Fj98066og5ubn4q6ww1m0.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%2Fj98066og5ubn4q6ww1m0.png" alt="Meetings settings in Purr" width="799" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;English is the default. Switch the engine to Whisper and dictation covers about 100 languages, and meetings handle 28. You can add names and jargon in Vocabulary so Purr listens for them, and it drops the "um"s before anything reaches the text field.&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%2F42q5jx1y6dlshjnr717f.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%2F42q5jx1y6dlshjnr717f.png" alt="Vocabulary settings in Purr" width="799" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;Purr is a native Swift and SwiftUI app. Speech recognition runs on NVIDIA's Parakeet models through &lt;a href="https://github.com/FluidInference/FluidAudio" rel="noopener noreferrer"&gt;FluidAudio&lt;/a&gt; and on Whisper through &lt;a href="https://github.com/argmaxinc/WhisperKit" rel="noopener noreferrer"&gt;WhisperKit&lt;/a&gt;. Both use Core ML, so most of the work runs on Apple Silicon's Neural Engine.&lt;/p&gt;

&lt;p&gt;After each transcript, a small CTC model rescores it against your word list, which gets names and jargon right more often. Meetings use a pyannote speaker diarizer converted to Core ML, with SpeexDSP for echo cancellation. Summaries and Voice Edit run on Apple's on-device Foundation Models, or on Gemma 4 E2B through &lt;a href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;llama.cpp&lt;/a&gt; if your Mac doesn't have Apple Intelligence.&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%2F5txdsbk1cxj2rox8ub67.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%2F5txdsbk1cxj2rox8ub67.png" alt="Choosing between Parakeet and Whisper during setup" width="799" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three problems that took longer than I expected
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Echo in meetings
&lt;/h3&gt;

&lt;p&gt;If you take a call without headphones, the other person's voice comes out of your speakers and back into your mic. Purr records both sides, so their words started turning up in my transcript under "You".&lt;/p&gt;

&lt;p&gt;My first fix was a loudness cut on the mic track. It got rid of the echo and also deleted the quieter half of my own sentences. What finally worked was measuring, word by word, how much call audio the echo canceller had just removed, and comparing what was left with my normal speaking level. Echo goes, and quiet words stay.&lt;/p&gt;

&lt;h3&gt;
  
  
  Voice Edit touching things I didn't ask about
&lt;/h3&gt;

&lt;p&gt;The first version handed the selected paragraph to the model and pasted back whatever it returned. Small models have a hard time leaving text alone. Ask for one shorter sentence and you'd also find "use" turned into "utilize" two lines further down.&lt;/p&gt;

&lt;p&gt;Now the model doesn't return a paragraph at all. It names the words to replace and what to put in their place, and Purr makes those edits itself, so the rest of your text can't drift.&lt;/p&gt;

&lt;h3&gt;
  
  
  A slow first press
&lt;/h3&gt;

&lt;p&gt;Right after launch, the first hold of the key had a pause before recording started. Every press after that was instant. I assumed the model was still loading, but the delay came from macOS starting some of its audio services cold for the first app that asks. Purr now does that setup in the background at launch, before you reach for the key.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell myself at the start
&lt;/h2&gt;

&lt;p&gt;I thought I'd spend my time comparing models. Most of it went into the audio pipeline around them, deciding which sound to throw away and checking a model's answer before it touches your text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Purr needs an Apple Silicon Mac with macOS 14 or later. You can download it from &lt;a href="https://purr.arunbrahma.com/" rel="noopener noreferrer"&gt;purr.arunbrahma.com&lt;/a&gt; or build it from source on &lt;a href="https://github.com/iamarunbrahma/purr" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. It's MIT licensed, and issues and pull requests are welcome.&lt;/p&gt;

&lt;p&gt;If your wrists hurt too, give it a try.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>macos</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
