<?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>Forem: Kris (with a K)</title>
    <description>The latest articles on Forem by Kris (with a K) (@kristof).</description>
    <link>https://forem.com/kristof</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%2F3656473%2F9f1e399d-bc1c-49b9-8851-d0bbcef1f1b5.jpg</url>
      <title>Forem: Kris (with a K)</title>
      <link>https://forem.com/kristof</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kristof"/>
    <language>en</language>
    <item>
      <title>Raffi: a modern Stremio‑compatible streaming client I built at 16</title>
      <dc:creator>Kris (with a K)</dc:creator>
      <pubDate>Thu, 11 Dec 2025 04:27:19 +0000</pubDate>
      <link>https://forem.com/kristof/raffi-a-modern-stremio-compatible-streaming-client-i-built-at-16-223p</link>
      <guid>https://forem.com/kristof/raffi-a-modern-stremio-compatible-streaming-client-i-built-at-16-223p</guid>
      <description>&lt;p&gt;I watch a lot of shows and used Stremio for years, but the UX and tech stack started to annoy me. So I spent the last 3 weeks building Raffi — a modern Stremio‑compatible streaming client with a Netflix‑style UI, Go backend for torrents/transcoding, and some extra stuff like watch parties and Discord RPC.&lt;/p&gt;

&lt;p&gt;What I’m most excited about with Raffi is that it’s basically a full media stack (like a mini VLC + Jellyfin hybrid) built out of web pieces. The player UI is 100% Svelte running in Electron, while a Go sidecar + ffmpeg handle torrents, HLS, and cursed codecs like EAC3. It’s not a web wrapper around an OS player – the whole experience is custom, from stream picking to time‑remaining‑based progress. I haven’t really seen a desktop media player that leans this hard on Svelte/Electron on the front and Go/ffmpeg on the back, while still speaking Stremio’s addon language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Raffi is&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desktop app (Electron + Svelte)&lt;/li&gt;
&lt;li&gt;Uses Stremio addons (Real‑Debrid / torrentio), but doesn’t reuse Stremio’s code — it just speaks the same addon protocol.&lt;/li&gt;
&lt;li&gt;Go sidecar backend handles:

&lt;ul&gt;
&lt;li&gt;torrents (anacrolix)&lt;/li&gt;
&lt;li&gt;HLS generation&lt;/li&gt;
&lt;li&gt;EAC3 → AAC audio transcoding with ffmpeg&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features right now&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home screen with continue watching, popular rows, Netflix‑style hero.&lt;/li&gt;
&lt;li&gt;Show/episode pages with progress, seasons, IMDb, etc.&lt;/li&gt;
&lt;li&gt;Custom player based on time remaining, however you can switch between the Raffi style seekbar and the normal one.&lt;/li&gt;
&lt;li&gt;Stream picker dialog that actually explains quality/codec/size instead of filenames.&lt;/li&gt;
&lt;li&gt;Watch parties (synced playback), Discord Rich Presence.&lt;/li&gt;
&lt;li&gt;Play local files + magnet links (You can use it as a replacement for the Windows Media Player)&lt;/li&gt;
&lt;li&gt;Early experiments with clipping funny moments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tech nerd bits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack: Electron, Svelte, Go, ffmpeg, anacrolix.&lt;/li&gt;
&lt;li&gt;Distribution is via GitHub releases.&lt;/li&gt;
&lt;li&gt;Using Supabase for the backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s fully usable for me day‑to‑day, but it’s still early:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;some edge‑case bugs&lt;/li&gt;
&lt;li&gt;only Windows / Linux for now (no macOS yet / signing pain)&lt;/li&gt;
&lt;li&gt;docs are minimal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to try it&lt;/strong&gt;&lt;br&gt;
Link the website: &lt;a href="https://raffi.al" rel="noopener noreferrer"&gt;https://raffi.al&lt;/a&gt;&lt;br&gt;
GitHub repo: &lt;a href="https://github.com/kaleidal/raffi" rel="noopener noreferrer"&gt;https://github.com/kaleidal/raffi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to contribute&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mention open issues and that you’re happy to label “good first issue”.​&lt;/li&gt;
&lt;li&gt;List useful areas:

&lt;ul&gt;
&lt;li&gt;macOS support / packaging&lt;/li&gt;
&lt;li&gt;more robust HLS/transcoding edge cases&lt;/li&gt;
&lt;li&gt;UI polishing and accessibility&lt;/li&gt;
&lt;li&gt;docs + examples&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If you’re into media players, Electron, Go, or just hate bad streaming UX, I’d love feedback, bug reports, or PRs.&lt;/p&gt;

&lt;p&gt;For the end, here's some screenshots!&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%2F481lbzb5fu4i9jj5dzda.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%2F481lbzb5fu4i9jj5dzda.png" alt=" " width="800" height="452"&gt;&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%2Fm25qf5pjf6lnjx6cc3s0.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%2Fm25qf5pjf6lnjx6cc3s0.png" alt=" " width="800" height="451"&gt;&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%2Fyky9u9e0m9m0n4vh2zqu.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%2Fyky9u9e0m9m0n4vh2zqu.png" alt=" " width="800" height="448"&gt;&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%2Fh79r6qp2609n8pfhyipx.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%2Fh79r6qp2609n8pfhyipx.png" alt=" " width="800" height="448"&gt;&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%2Fkatorb9mf7ex7bx61fvt.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%2Fkatorb9mf7ex7bx61fvt.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>svelte</category>
      <category>go</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
