<?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: xuannhat999</title>
    <description>The latest articles on DEV Community by xuannhat999 (@xuannhat999).</description>
    <link>https://dev.to/xuannhat999</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%2F3973294%2F3625ae9c-819b-4f48-8654-319a2d21d8b6.png</url>
      <title>DEV Community: xuannhat999</title>
      <link>https://dev.to/xuannhat999</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xuannhat999"/>
    <language>en</language>
    <item>
      <title>I made a minimal TUI Youtube Music client written in Rust - gytm</title>
      <dc:creator>xuannhat999</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:44:04 +0000</pubDate>
      <link>https://dev.to/xuannhat999/i-made-a-minimal-tui-youtube-music-client-written-in-rust-gytm-cp8</link>
      <guid>https://dev.to/xuannhat999/i-made-a-minimal-tui-youtube-music-client-written-in-rust-gytm-cp8</guid>
      <description>&lt;p&gt;I’ve been using Linux for over three months now, and I’ve fallen in love with TUI-based apps. I try to do almost everything inside the terminal—including listening to music.&lt;/p&gt;

&lt;p&gt;Initially, I looked for a TUI app that could stream music directly from YouTube Music, but none of them quite fit my needs. So, I decided to build one myself.&lt;/p&gt;

&lt;p&gt;Along the way, I stumbled upon some great existing alternatives like rmpc and termusic, but it was a bit too late—my project was already near completion. I decided to push through and finish it anyway, and now I’d love to share it with you all!&lt;/p&gt;

&lt;p&gt;Here is the repository link, hope yall like it: &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/xuannhat999" rel="noopener noreferrer"&gt;
        xuannhat999
      &lt;/a&gt; / &lt;a href="https://github.com/xuannhat999/gytm" rel="noopener noreferrer"&gt;
        gytm
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      TUI based Youtube Music player
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;gytm: TUI based Youtube Music player&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Stream Youtube Music from your terminal !&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Demo&lt;/h1&gt;
&lt;/div&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/204164928/604142321-f4fad48d-8a48-4bcd-95f7-0c066c8e3e93.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODA4OTA5MjIsIm5iZiI6MTc4MDg5MDYyMiwicGF0aCI6Ii8yMDQxNjQ5MjgvNjA0MTQyMzIxLWY0ZmFkNDhkLThhNDgtNGJjZC05NWY3LTBjMDY2YzhlM2U5My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDYwOFQwMzUwMjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMTRhM2IyMDE0MWU4YmJlZDE3Y2E4MTNlOGJiMWJiNDA5ZDMyNTQxMGVjMmExYjA3Zjk0NWMzNGQ5NDZmNmE4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.x-TlVI46Yi-rw9n4-4SHqgkrTxXGB__fX_b5LAS6Wf8"&gt;&lt;img width="1920" height="1080" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F204164928%2F604142321-f4fad48d-8a48-4bcd-95f7-0c066c8e3e93.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODA4OTA5MjIsIm5iZiI6MTc4MDg5MDYyMiwicGF0aCI6Ii8yMDQxNjQ5MjgvNjA0MTQyMzIxLWY0ZmFkNDhkLThhNDgtNGJjZC05NWY3LTBjMDY2YzhlM2U5My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDYwOFQwMzUwMjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMTRhM2IyMDE0MWU4YmJlZDE3Y2E4MTNlOGJiMWJiNDA5ZDMyNTQxMGVjMmExYjA3Zjk0NWMzNGQ5NDZmNmE4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.x-TlVI46Yi-rw9n4-4SHqgkrTxXGB__fX_b5LAS6Wf8" class="js-gh-image-fallback"&gt;&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/204164928/604142295-398677ae-d35f-406c-adf2-50dca21952d6.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODA4OTA5MjIsIm5iZiI6MTc4MDg5MDYyMiwicGF0aCI6Ii8yMDQxNjQ5MjgvNjA0MTQyMjk1LTM5ODY3N2FlLWQzNWYtNDA2Yy1hZGYyLTUwZGNhMjE5NTJkNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDYwOFQwMzUwMjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04YTAxYThmZmM5MjljM2I4MWZkOTNmNzZlNGZjODA5ZmE5NWFkZmVjYjIyY2UxMWZkNzQyOWFiNzFmYzIzNTFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.aTNna3t-_Zv5586x7kZfmNfBG4VXrv7FyfPgiy827qE"&gt;&lt;img width="1920" height="1080" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F204164928%2F604142295-398677ae-d35f-406c-adf2-50dca21952d6.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODA4OTA5MjIsIm5iZiI6MTc4MDg5MDYyMiwicGF0aCI6Ii8yMDQxNjQ5MjgvNjA0MTQyMjk1LTM5ODY3N2FlLWQzNWYtNDA2Yy1hZGYyLTUwZGNhMjE5NTJkNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDYwOFQwMzUwMjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04YTAxYThmZmM5MjljM2I4MWZkOTNmNzZlNGZjODA5ZmE5NWFkZmVjYjIyY2UxMWZkNzQyOWFiNzFmYzIzNTFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZwbmcifQ.aTNna3t-_Zv5586x7kZfmNfBG4VXrv7FyfPgiy827qE" class="js-gh-image-fallback"&gt;&lt;/a&gt;

  
    
    &lt;span class="m-1"&gt;2026-06-08.10-09-47_new.mp4&lt;/span&gt;
    
  

  

  



&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Features&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Personalized Content: Seamlessly fetch your private playlists/album using local cookie authentication.&lt;/li&gt;
&lt;li&gt;Play / Save / Remove albums in your Youtube Music Library&lt;/li&gt;
&lt;li&gt;Search Albums &amp;amp; Songs and stream it&lt;/li&gt;
&lt;li&gt;Add / Remove Songs in Queue&lt;/li&gt;
&lt;li&gt;When select to play a song in search result, it will automatically load list of related songs into Queue&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Supported OS&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt; (Tested on Arch Linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Build Dependencies (Only required if building from source)&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust &amp;amp; Cargo&lt;/strong&gt; (1.85 or later)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pkg-config&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;openssl&lt;/strong&gt; development headers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;yt-dlp&lt;/strong&gt;: for fetching stream URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mpv&lt;/strong&gt;   : the core media engine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sqlite&lt;/strong&gt;: local database&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Optional Dependencies&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Nerd Font&lt;/strong&gt;: for icon rendering&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Installation&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;- Build from source&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone this repository:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;git clone https://github.com/xuannhat999/gytm.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Install the binary&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;cd gytm
cargo install --bin gytm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;- From AUR (Arch User Repository)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Using yay&lt;/em&gt;&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;yay -S&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/xuannhat999/gytm" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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