<?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: ashe</title>
    <description>The latest articles on DEV Community by ashe (@asheohto).</description>
    <link>https://dev.to/asheohto</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%2F4167705%2Ff31c2cd6-e09b-4593-8267-50c2a194ad77.jpg</url>
      <title>DEV Community: ashe</title>
      <link>https://dev.to/asheohto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asheohto"/>
    <language>en</language>
    <item>
      <title>I built Cremeplay, a YouTube Music desktop client in Rust and Tauri that uses ~60MB RAM</title>
      <dc:creator>ashe</dc:creator>
      <pubDate>Wed, 07 Oct 2026 04:19:13 +0000</pubDate>
      <link>https://dev.to/asheohto/i-built-cremeplay-a-youtube-music-desktop-client-in-rust-and-tauri-that-uses-60mb-ram-7c3</link>
      <guid>https://dev.to/asheohto/i-built-cremeplay-a-youtube-music-desktop-client-in-rust-and-tauri-that-uses-60mb-ram-7c3</guid>
      <description>&lt;p&gt;Most YouTube Music desktop apps are built on Electron or heavy web wrappers. Every time I had Pear Desktop or a browser wrapper open in the background while working or gaming, it was sitting at 500 MB to 800 MB of RAM just to play audio. On top of that, Chromium spins up video decoders, keeps huge buffer caches in memory, and leaves loose background processes scattered in Task Manager.&lt;/p&gt;

&lt;p&gt;I wanted a YouTube Music desktop client that felt native, stayed out of the way, and used as little memory as possible. So I built &lt;strong&gt;Cremeplay&lt;/strong&gt; in Rust and Tauri v2.&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://ashemarya.xyz/cremeplay" rel="noopener noreferrer"&gt;https://ashemarya.xyz/cremeplay&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/asheohto/cremeplay" rel="noopener noreferrer"&gt;https://github.com/asheohto/cremeplay&lt;/a&gt;&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%2Fu533f87g1zamfa807grr.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%2Fu533f87g1zamfa807grr.png" alt="Cremeplay Screenshot" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How low is the memory usage?
&lt;/h3&gt;

&lt;p&gt;Here is how Cremeplay compares on my machine during normal playback:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Pear Desktop (Electron)&lt;/th&gt;
&lt;th&gt;Webview Wrappers&lt;/th&gt;
&lt;th&gt;Cremeplay (Tauri v2 + Rust)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RAM (Tray / Background)&lt;/td&gt;
&lt;td&gt;~400 MB - 500 MB&lt;/td&gt;
&lt;td&gt;~180 MB - 250 MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~60 MB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM (Open Window)&lt;/td&gt;
&lt;td&gt;~600 MB - 850 MB+&lt;/td&gt;
&lt;td&gt;~250 MB - 400 MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~150 MB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process Hierarchy&lt;/td&gt;
&lt;td&gt;6-10 loose Electron processes&lt;/td&gt;
&lt;td&gt;Loose Edge WebView processes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bundled in Windows Job Object&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio Output (Volume Mixer)&lt;/td&gt;
&lt;td&gt;Scattered / Electron&lt;/td&gt;
&lt;td&gt;Unlabeled msedgewebview2.exe&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Labeled as Cremeplay with icon&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Installer Size&lt;/td&gt;
&lt;td&gt;150 MB+&lt;/td&gt;
&lt;td&gt;Loose wrapper folder&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.6 MB setup / 20 MB portable&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How I got the RAM footprint down
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct Rust Innertube client&lt;/strong&gt;: Instead of loading the bloated Google Polymer web app and all its tracking scripts, Cremeplay talks directly to YouTube Music's Innertube API from asynchronous Rust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recursive Working Set Trimming&lt;/strong&gt;: Chromium-based webviews love holding onto inactive page caches forever. Cremeplay traverses its process tree and calls &lt;code&gt;K32EmptyWorkingSet&lt;/code&gt; periodically to drop stale memory pages back to the OS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows Job Object bundling&lt;/strong&gt;: All child WebView2 processes are attached to a parent Windows Job Object (&lt;code&gt;JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE&lt;/code&gt;), so they group cleanly under Cremeplay and never leave orphan processes behind when you quit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native WASAPI audio session branding&lt;/strong&gt;: If you use EarTrumpet or the Windows Volume Mixer, WebView apps usually show up as a generic "WebView Manager" process. Cremeplay hooks into &lt;code&gt;IAudioSessionManager2&lt;/code&gt; and &lt;code&gt;IAudioSessionControl&lt;/code&gt; over COM to label the active audio stream as Cremeplay with the proper icon.&lt;/li&gt;
&lt;/ol&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%2Fapzf2iuixxhf1cmley86.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%2Fapzf2iuixxhf1cmley86.png" alt="Cremeplay Library and Lyrics" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What else is built in
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full YouTube Music discovery&lt;/strong&gt;: Home feed, Listen Again, Daily Discover, personalized community playlists based on your listening history, and automatic radio queues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SponsorBlock built in&lt;/strong&gt;: Automatically skips non-music intros, skits, and outros on music videos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discord Rich Presence&lt;/strong&gt;: Shows "Listening to [Song Title]" with the music icon, album cover, live progress bar, and direct links.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OBS Tuna local server&lt;/strong&gt;: Broadcasts track metadata on &lt;code&gt;http://127.0.0.1:1608/&lt;/code&gt; for OBS overlays and my desktop lyric overlay, &lt;a href="https://github.com/asheohto/lyricreme" rel="noopener noreferrer"&gt;Lyricreme&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is completely free and open source under the MIT license. You can grab the 4.6 MB installer or the standalone portable &lt;code&gt;.exe&lt;/code&gt; from GitHub or the website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://ashemarya.xyz/cremeplay" rel="noopener noreferrer"&gt;https://ashemarya.xyz/cremeplay&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository &amp;amp; Releases&lt;/strong&gt;: &lt;a href="https://github.com/asheohto/cremeplay" rel="noopener noreferrer"&gt;https://github.com/asheohto/cremeplay&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know what you think or if you run into any bugs.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
