<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rust on ThunderBlaze's Blog</title><link>https://thunder-blaze.github.io/Blogs/tags/rust/</link><description>Recent content in Rust on ThunderBlaze's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 24 Aug 2025 00:17:05 +0530</lastBuildDate><atom:link href="https://thunder-blaze.github.io/Blogs/tags/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>Zafkiel - An Anilist Client</title><link>https://thunder-blaze.github.io/Blogs/p/zafkiel/</link><pubDate>Sun, 24 Aug 2025 00:17:05 +0530</pubDate><guid>https://thunder-blaze.github.io/Blogs/p/zafkiel/</guid><description>&lt;img src="https://thunder-blaze.github.io/Blogs/p/zafkiel/cover.jpg" alt="Featured image of post Zafkiel - An Anilist Client" />&lt;h1 id="zafkiel---building-a-native-anilist-client-with-svelte-tauri-and-rust">Zafkiel - Building a Native Anilist Client with Svelte, Tauri, and Rust
&lt;/h1>&lt;p>Over the past few months, I’ve been working on a project very close to my heart: &lt;strong>Zafkiel&lt;/strong>, a desktop anilist client built with &lt;strong>Svelte, Tauri, and Rust&lt;/strong>. The goal has always been simple yet ambitious - to create a fast, lightweight, and customizable app for browsing and tracking anime, one that feels &lt;strong>native, modern, and open to the community&lt;/strong>.&lt;/p>
&lt;p>Zafkiel is at a stage where I can reflect on why I started it, the choices I made, and the direction it’s heading.&lt;/p>
&lt;hr>
&lt;h2 id="why-zafkiel">Why Zafkiel?
&lt;/h2>&lt;p>Existing anime tracking platforms and apps are powerful, but I often found them lacking in either &lt;strong>performance, design flexibility, or openness&lt;/strong>. Many desktop clients are simply Electron wrappers, which work but can feel heavy and slow.&lt;/p>
&lt;p>I was also inspired by the creative minds behind the creation of &lt;strong>Dantotsu&lt;/strong>, an Android application for watching anime, reading manga and light novels with &lt;strong>multi-sourcing&lt;/strong>, &lt;strong>extensions&lt;/strong> for more features, etc. Sadly it was taken down recently by DMCA but many of its forks are still there. And I also came across a cross-platform Dantotsu (&lt;strong>Dartotsu&lt;/strong>) but it was still in much development and it used flutter so the app was really slow and bad in performance.&lt;/p>
&lt;p>That is why I decided to create my own client with the following features in mind:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Lightweight&lt;/strong> - fast startup and minimal resource usage.&lt;/li>
&lt;li>&lt;strong>Beautiful&lt;/strong> - a modern design with multiple themes, fully customizable.&lt;/li>
&lt;li>&lt;strong>Community Friendly&lt;/strong> - easy to modify, extend, and contribute to.&lt;/li>
&lt;li>&lt;strong>Cross-platform&lt;/strong> - consistent performance on Linux, Windows, and macOS.&lt;/li>
&lt;li>&lt;strong>Multi-Sourced&lt;/strong> - should have multiple sources and switching between them (&lt;em>I&amp;rsquo;ll expand on this further later&lt;/em>).&lt;/li>
&lt;li>&lt;strong>Extensible&lt;/strong> - should provide features like extensions which can be installed or uninstalled.&lt;/li>
&lt;/ul>
&lt;p>That vision became &lt;strong>Zafkiel&lt;/strong> - named after Kurumi Tokisaki’s angel in &lt;em>&lt;strong>Date A Live&lt;/strong>&lt;/em> (&lt;em>My favorite character btw from this Series&lt;/em>), symbolizing control over time. It felt like the right metaphor for an app meant to give users &lt;strong>control over their anime experience&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="choosing-the-stack">Choosing the Stack
&lt;/h2>&lt;h3 id="frontend-svelte--shadcn--tweakcn">Frontend: Svelte + Shadcn &amp;amp; Tweakcn
&lt;/h3>&lt;p>I chose &lt;strong>Svelte&lt;/strong> for the frontend because of its &lt;strong>speed, simplicity, reactivity, and developer experience&lt;/strong>. Unlike heavier frameworks, Svelte compiles away much of the overhead, leaving a lean and efficient app. This makes UI development &lt;strong>faster and more intuitive&lt;/strong>, letting me focus on design and user experience.&lt;/p>
&lt;p>To bring flexibility to the design, I integrated &lt;strong>Shadcn&lt;/strong> &amp;amp; &lt;strong>Tweakcn&lt;/strong> (&lt;em>Shadcn Themes&lt;/em>), using which I enabled &lt;strong>multi-theme functionality&lt;/strong> and &lt;strong>consistent design&lt;/strong>. With it, users can seamlessly switch between themes, creating a personalized experience without bloated complexity in the codebase.&lt;/p>
&lt;h3 id="backend-rust--tauri">Backend: Rust + Tauri
&lt;/h3>&lt;p>For the backend, I went with &lt;strong>Rust&lt;/strong>. Rust not only ensures &lt;strong>safety and performance&lt;/strong>, but it also makes Zafkiel highly modular. The backend is structured in a way that keeps each part of the logic isolated, easy to read, and easy to extend.&lt;/p>
&lt;p>This modularity has another major advantage: &lt;strong>contributing is accessible to others&lt;/strong>. Developers can dive into specific parts of the codebase without needing to understand everything at once. Whether it’s improving caching, adding API integrations, or refining error handling, contributions are straightforward.&lt;/p>
&lt;p>With &lt;strong>Tauri&lt;/strong> acting as the bridge between the frontend and backend, the result is a &lt;strong>native cross-platform application&lt;/strong> that consumes only a fraction of the resources of an Electron-based app, while maintaining strong security guarantees.&lt;/p>
&lt;h4 id="multi-sourced-feature">Multi Sourced Feature
&lt;/h4>&lt;p>This is yet to be implemented, I am planning to implement this along with the extensions. &lt;strong>Multi-Sourced&lt;/strong> refers to the ability to choose between the providers of Anime/Manga. You must&amp;rsquo;ve heard of websites for watching anime like &lt;em>hianime&lt;/em>, &lt;em>aniwatch&lt;/em>, etc and even &lt;em>torrents&lt;/em> too. I want to provide the user the ability to choose which source to watch from because of various factors:&lt;/p>
&lt;ul>
&lt;li>It is not necessary for the site I am using to be available in the user&amp;rsquo;s region.&lt;/li>
&lt;li>Some sites have reduced quality but lower size while other offers higher sizes but high quality.&lt;/li>
&lt;li>There&amp;rsquo;s also the thing called hard subtitles (embedded in video) and soft subtitles (embedded in the file like &lt;code>mkv&lt;/code> but not in the video).&lt;/li>
&lt;/ul>
&lt;h4 id="extensions">Extensions
&lt;/h4>&lt;p>This multi-sourcing feature is planned to be enabled using these so called extensions. I want to provide each site as optional extensions as in Dantotsu. But extensions won&amp;rsquo;t stop there, they can provide more features such as torrenting, downloading, cli integrations and much more. I&amp;rsquo;ll be keeping the repository separate though because of &lt;strong>DMCA&lt;/strong>. More and more sites can be added and easily integrated as extensions as all of them will follow the same structure and responses.&lt;/p>
&lt;hr>
&lt;h2 id="current-state">&lt;strong>Current State&lt;/strong>
&lt;/h2>&lt;p>At the moment, Zafkiel is still in &lt;strong>basic development&lt;/strong>.&lt;br>
Some core features are working, but it’s far from stable or feature-complete.&lt;/p>
&lt;p>Right now, I’m focusing on:&lt;/p>
&lt;ul>
&lt;li>Building out the &lt;strong>core UI&lt;/strong> with Svelte and Tailwind.&lt;/li>
&lt;li>Structuring the &lt;strong>Rust backend&lt;/strong> for modularity and clean APIs (&lt;em>need to rework on this&lt;/em>).&lt;/li>
&lt;li>Refining how I use &lt;strong>TanStack Query&lt;/strong> for AniList API calls.&lt;/li>
&lt;/ul>
&lt;p>It’s not something I can use daily yet, but the foundation is being laid carefully.&lt;br>
My approach is &lt;strong>slow but steady&lt;/strong> - making sure I get the architecture right before layering on more features.&lt;/p>
&lt;hr>
&lt;h2 id="looking-ahead">&lt;strong>Looking Ahead&lt;/strong>
&lt;/h2>&lt;p>The roadmap for Zafkiel includes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Polished UI/UX&lt;/strong> with multiple themes and smooth transitions (&lt;em>Yes, it needs more work&lt;/em>).&lt;/li>
&lt;li>&lt;strong>Cross-platform support&lt;/strong> to ensure consistency on Linux, Windows, and macOS (&lt;em>Even android support is coming soon&lt;/em>).&lt;/li>
&lt;li>&lt;strong>Multi-source streaming and reading support&lt;/strong> using extensions and also torrenting support.&lt;/li>
&lt;li>&lt;strong>Extensibility&lt;/strong> so contributors can add new features or integrations easily.&lt;/li>
&lt;li>&lt;strong>More components&lt;/strong> for streaming anime, reading manga, reading light novels, etc.&lt;/li>
&lt;li>&lt;strong>Documentation site&lt;/strong> (&lt;em>Yes, this is very important for contributors and even for users&lt;/em>)&lt;/li>
&lt;/ul>
&lt;p>I’m not rushing this project - the goal is to &lt;strong>build it right, not just fast&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="conclusion">&lt;strong>Conclusion&lt;/strong>
&lt;/h2>&lt;p>Zafkiel is still a work in progress and there is a long way to go before it goes into production, but it represents my vision of what an anilist client should be: &lt;strong>lightweight, customizable, and faster&lt;/strong>.&lt;/p>
&lt;p>With &lt;strong>Svelte&lt;/strong> powering the UI, &lt;strong>Tweakcn&lt;/strong> providing theming flexibility, &lt;strong>TanStack Query&lt;/strong> handling data-fetching experiments, and a &lt;strong>modular Rust backend&lt;/strong> ensuring performance and stability, Zafkiel is slowly but surely becoming the client I’ve always wanted.&lt;/p>
&lt;p>It’s not production-ready yet, but the journey has only just begun - and I’m excited to see where it goes from here.&lt;/p>
&lt;hr></description></item></channel></rss>