<?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: HalalFrFr</title>
    <description>The latest articles on DEV Community by HalalFrFr (@halal_frfr).</description>
    <link>https://dev.to/halal_frfr</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%2F1793811%2F1747c120-aa6f-41ad-8486-9bb585b82909.jpg</url>
      <title>DEV Community: HalalFrFr</title>
      <link>https://dev.to/halal_frfr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/halal_frfr"/>
    <language>en</language>
    <item>
      <title>Building a Windows yt-dlp GUI with Tauri, React, and Rust</title>
      <dc:creator>HalalFrFr</dc:creator>
      <pubDate>Sun, 19 Apr 2026 10:23:09 +0000</pubDate>
      <link>https://dev.to/halal_frfr/building-a-windows-yt-dlp-gui-with-tauri-react-and-rust-3bh6</link>
      <guid>https://dev.to/halal_frfr/building-a-windows-yt-dlp-gui-with-tauri-react-and-rust-3bh6</guid>
      <description>&lt;p&gt;I built HalalDL because I wanted a Windows-first desktop workflow for yt-dlp that did not hide what yt-dlp was doing.&lt;/p&gt;

&lt;p&gt;yt-dlp is already powerful. The problem I wanted to solve was not the engine. It was the day-to-day Windows experience around it: setup, presets, ffmpeg, tool paths, logs, and installer choices.&lt;/p&gt;

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

&lt;p&gt;HalalDL is a local-first Windows desktop GUI for yt-dlp.&lt;/p&gt;

&lt;p&gt;It currently focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10/11 x64&lt;/li&gt;
&lt;li&gt;preset-driven downloads&lt;/li&gt;
&lt;li&gt;visible raw yt-dlp logs&lt;/li&gt;
&lt;li&gt;Full and Lite installers&lt;/li&gt;
&lt;li&gt;WinGet support&lt;/li&gt;
&lt;li&gt;no account system&lt;/li&gt;
&lt;li&gt;no cloud service&lt;/li&gt;
&lt;li&gt;no telemetry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo:&lt;br&gt;
&lt;a href="https://github.com/Asdmir786/HalalDL" rel="noopener noreferrer"&gt;https://github.com/Asdmir786/HalalDL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Website:&lt;br&gt;
&lt;a href="https://halaldl.vercel.app" rel="noopener noreferrer"&gt;https://halaldl.vercel.app&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.amazonaws.com%2Fuploads%2Farticles%2F6knkem89gpzs7uhmcfle.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.amazonaws.com%2Fuploads%2Farticles%2F6knkem89gpzs7uhmcfle.png" alt="HalalDL downloads screen showing URL input, preset selection, queue controls, and the main download area" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Main download queue and URL flow.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tauri
&lt;/h2&gt;

&lt;p&gt;I chose Tauri because I wanted a desktop app with a web UI, but I did not want to ship a huge runtime just to wrap a CLI workflow.&lt;/p&gt;

&lt;p&gt;The stack is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tauri v2&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frontend handles the user flow, presets, pages, and state. The Tauri/Rust side handles the local desktop integration and process/tooling boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full vs Lite builds
&lt;/h2&gt;

&lt;p&gt;One design decision was to split releases into Full and Lite builds.&lt;/p&gt;

&lt;p&gt;Full is for people who want the easiest install path.&lt;/p&gt;

&lt;p&gt;Lite is for people who already manage their own yt-dlp, ffmpeg, aria2, and related tools.&lt;/p&gt;

&lt;p&gt;That split exists because yt-dlp users are not all the same. Some want convenience. Others want control.&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.amazonaws.com%2Fuploads%2Farticles%2F5pase2feouh9p8dswftg.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.amazonaws.com%2Fuploads%2Farticles%2F5pase2feouh9p8dswftg.png" alt="HalalDL presets screen showing built-in yt-dlp download profiles for video, audio, subtitles, compatibility, and editor workflows" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Preset-driven download profiles.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why raw logs matter
&lt;/h2&gt;

&lt;p&gt;A lot of GUIs hide the backend output behind generic progress text.&lt;/p&gt;

&lt;p&gt;I wanted the opposite.&lt;/p&gt;

&lt;p&gt;If yt-dlp says something useful, the user should be able to see it. That makes bug reports better, makes troubleshooting easier, and avoids pretending the GUI knows more than the underlying tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installer trust
&lt;/h2&gt;

&lt;p&gt;One rough edge right now is code signing.&lt;/p&gt;

&lt;p&gt;HalalDL releases are not code-signed yet, so Windows SmartScreen may warn. For now, I try to make that clear instead of hiding it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source code is public&lt;/li&gt;
&lt;li&gt;release workflows are public&lt;/li&gt;
&lt;li&gt;SHA256 checksums are attached to releases&lt;/li&gt;
&lt;li&gt;downloads point to GitHub Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code signing is something I want to improve later.&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.amazonaws.com%2Fuploads%2Farticles%2Fi9nu4f5qz6kieh17jonz.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.amazonaws.com%2Fuploads%2Farticles%2Fi9nu4f5qz6kieh17jonz.png" alt="HalalDL tools screen showing status checks for yt-dlp, ffmpeg, aria2, and optional runtime support" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tool status checks for yt-dlp, ffmpeg, aria2, and optional runtime support.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The hard part was not just calling yt-dlp.&lt;/p&gt;

&lt;p&gt;The hard part was making the surrounding workflow understandable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what preset should a beginner choose?&lt;/li&gt;
&lt;li&gt;what should happen when ffmpeg is missing?&lt;/li&gt;
&lt;li&gt;how visible should advanced options be?&lt;/li&gt;
&lt;li&gt;how do you explain Full vs Lite without confusing people?&lt;/li&gt;
&lt;li&gt;how do you make an unsigned Windows app feel trustworthy?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I want feedback on
&lt;/h2&gt;

&lt;p&gt;I am still looking for feedback from real yt-dlp users and Windows users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are the default presets useful?&lt;/li&gt;
&lt;li&gt;Is Full vs Lite clear?&lt;/li&gt;
&lt;li&gt;What would make the installer feel more trustworthy?&lt;/li&gt;
&lt;li&gt;What logs or diagnostics should be easier to export?&lt;/li&gt;
&lt;li&gt;What would make this worth using over raw yt-dlp or existing GUIs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HalalDL is open source here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Asdmir786/HalalDL" rel="noopener noreferrer"&gt;https://github.com/Asdmir786/HalalDL&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>tauri</category>
      <category>opensource</category>
      <category>react</category>
    </item>
  </channel>
</rss>
