<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Rustaceans - Medium]]></title>
        <description><![CDATA[Insights and Expertise from Rustaceans - Medium]]></description>
        <link>https://medium.com/rustaceans?source=rss----d11aa42eb8ad---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Rustaceans - Medium</title>
            <link>https://medium.com/rustaceans?source=rss----d11aa42eb8ad---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 10 Nov 2026 16:15:47 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/rustaceans" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[ Systemd Finally Lets Rust In]]></title>
            <link>https://medium.com/rustaceans/systemd-finally-lets-rust-in-e5450c481118?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/e5450c481118</guid>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rustlang]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Rustaceans Editors]]></dc:creator>
            <pubDate>Mon, 09 Nov 2026 18:04:57 GMT</pubDate>
            <atom:updated>2026-11-09T18:04:57.741Z</atom:updated>
            <content:encoded><![CDATA[<h4>Today’s Issue: Rewriting Discord in Rust, Creating Strings the Wrong Way, and Giving Fortran a Rust Migration Plan.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qPEgKDD2hdKKnaWmfSHWug.png" /><figcaption>Image: systemd logo on a white background banner</figcaption></figure><p>This is a copy of our weekly Rust email newsletter.</p><p>If you’d like to receive these emails in your inbox, you can subscribe on <a href="https://weeklyrust.substack.com/">Substack</a>.</p><p>Meanwhile, you can read the article through the link down below</p><p><a href="https://weeklyrust.substack.com/p/systemd-finally-lets-rust-in?r=327yzu&amp;utm_campaign=post-expanded-share&amp;utm_medium=web">🦀 Systemd Finally Lets Rust In</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e5450c481118" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/systemd-finally-lets-rust-in-e5450c481118">🦀 Systemd Finally Lets Rust In</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Axum vs. Actix Web: I Built the Same REST API Using Both Rust Frameworks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*5RgBVDs0sxFPCPQhsX5Brg.jpeg" width="1408"></a></p><p class="medium-feed-snippet">I implemented identical API endpoints, authentication, database access, middleware, and request validation using both frameworks. I&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/axum-vs-actix-web-i-built-the-same-rest-api-using-both-rust-frameworks-f45809656456?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/f45809656456</guid>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[actix-web]]></category>
            <category><![CDATA[axum]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Mon, 09 Nov 2026 11:33:48 GMT</pubDate>
            <atom:updated>2026-11-09T11:33:46.742Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[ What Happens After a Rust Panic]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1024/1*oOqzP63T6LQR2i6jhI1T3Q.png" width="1024"></a></p><p class="medium-feed-snippet">Unwinding, landing pads, and the real price of panic=abort</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/what-happens-after-a-rust-panic-c1a2c60bd102?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/c1a2c60bd102</guid>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[systems-programming]]></category>
            <dc:creator><![CDATA[Enzo Lombardi]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 12:05:39 GMT</pubDate>
            <atom:updated>2026-11-08T12:05:40.598Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Rust is amazing, as long as I’m not the one writing it]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1672/1*Aww_u0bfLYyC-FgjbCFgOA.png" width="1672"></a></p><p class="medium-feed-snippet">The creator of Ruby on Rails says reading Rust is like &#x201C;pouring acid in my eyes.&#x201D; Yet he loves it. I wanted to understand why.</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/why-is-rust-so-popular-javascript-developer-9bba4700b4ef?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/9bba4700b4ef</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Justice Ekemezie]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 07:34:38 GMT</pubDate>
            <atom:updated>2026-11-08T07:34:37.567Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Asahi Linux’s Grind Toward the Mainline]]></title>
            <link>https://medium.com/rustaceans/asahi-linuxs-grind-toward-the-mainline-84859595ece7?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/84859595ece7</guid>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[rust-programming]]></category>
            <category><![CDATA[rustlang]]></category>
            <dc:creator><![CDATA[John Philip]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 04:23:45 GMT</pubDate>
            <atom:updated>2026-11-08T04:23:45.036Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*clqWmxLpAUJSR9an" /><figcaption>Photo by <a href="https://unsplash.com/@freezer_nico?utm_source=medium&amp;utm_medium=referral">Freezer</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Reading the Linux 6.14 progress report from the Asahi team feels like watching a group of engineers finally get room to breathe after years of carrying an entire platform on their backs.</p><p>The numbers alone tell the story: more than ninety thousand lines added across twelve hundred and fifty patches, plus the usual constellation of downstream forks for U-Boot, Mesa, virglrenderer, and Flatpak.</p><p>That is a full-time job that never ends, especially when every upstream Rust abstraction merge forces another painful rebase.</p><p>What stands out is the deliberate shift in priorities.</p><p>After the administrative dust settled from the leadership change, the team put the glamorous work on hold and focused on the unglamorous necessity of getting code accepted upstream.</p><p>The ISP driver, the Touchbar controllers, the TAS amplifier extensions, the steady stream of smaller fixes: these are the patches that actually reduce the maintenance tax.</p><p>Anyone who has maintained a long-lived out-of-tree driver knows exactly how corrosive that tax becomes.</p><p>Janne’s ongoing work keeping the patch set alive against an accelerating Rust abstraction cadence is the kind of thankless effort that decides whether a project survives or collapses under its own weight.</p><p>The microphone support is the part that feels most characteristically Asahi.</p><p>Reverse-engineering the Always-On Processor, writing a stub for the Secure Enclave, then building Triforce because three closely spaced PDM microphones are otherwise useless.</p><p>The story of wrestling with immature scientific libraries in Rust, dusting off high-school maths and university statistics, and ending up with something that actually works on the first try is pure engineering satisfaction.</p><p>It is the opposite of the polished demo. It is the messy, iterative reality of making hardware that was never designed for you behave like it belongs.</p><p>Community funding has changed the equation.</p><p>Buying the next Mac no longer means deciding between hardware and rent.</p><p>CI infrastructure that should have existed years ago is finally possible. The project can show up at conferences without financial stress.</p><p>That is the difference between a volunteer effort that burns people out and a sustainable effort that can keep shipping.</p><p>The real measure of progress is the shrinking delta between what Asahi carries and what the mainline kernel already contains.</p><p>Every accepted driver, every cleaned-up abstraction, every bit of maintenance load removed is a step toward the day when Asahi becomes just another set of well-supported Apple Silicon platforms instead of a heroic parallel tree.</p><p>That is the work that matters, and it is the work they are choosing to do first.</p><p>Reference:</p><p><a href="https://asahilinux.org/2025/03/progress-report-6-14/">Progress Report: Linux 6.14 - Asahi Linux</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=84859595ece7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/asahi-linuxs-grind-toward-the-mainline-84859595ece7">Asahi Linux’s Grind Toward the Mainline</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rust’s Supply Chain Was Targeted Through Popular Crates.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/rusts-supply-chain-was-targeted-through-popular-crates-48cf96073ddb?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*bsRXa_iiCDu2tQModHsrRA.jpeg" width="1408"></a></p><p class="medium-feed-snippet">In August 2026, malicious packages were discovered in the crates.io ecosystem, including a compromised release of the popular arrayref&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/rusts-supply-chain-was-targeted-through-popular-crates-48cf96073ddb?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/rusts-supply-chain-was-targeted-through-popular-crates-48cf96073ddb?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/48cf96073ddb</guid>
            <category><![CDATA[rust-programming-language]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust-crate]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[rust]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Sun, 08 Nov 2026 02:21:23 GMT</pubDate>
            <atom:updated>2026-11-08T02:21:21.816Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[LOESS in Rust]]></title>
            <link>https://medium.com/rustaceans/loess-in-rust-2e22f58c81d4?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/2e22f58c81d4</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[filtering]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[João Paulo Figueira]]></dc:creator>
            <pubDate>Sat, 07 Nov 2026 00:12:51 GMT</pubDate>
            <atom:updated>2026-11-08T11:11:31.629Z</atom:updated>
            <content:encoded><![CDATA[<h4>It’s time to port the Python LOESS code to Rust.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xPnPFUcgc5JCjF2X" /><figcaption>Photo by <a href="https://unsplash.com/@foxxmd?utm_source=medium&amp;utm_medium=referral">Matt Foxx</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Over five years ago, counting from this writing, I published my most successful article here on Medium. That article grew from the need to filter a particularly noisy sensor’s data from a telematics data stream. Concretely, it was a torque sensor connected to a truck’s drive shaft, and the noise needed to go. LOESS was the answer, hence that article.</p><p><a href="https://medium.com/data-science-collective/loess-373d43b03564">LOESS</a></p><p>By then, I was neck-deep in Python, and the project required Spark, so implementing the algorithm in Python was a no-brainer. Times change, though, and now I use Rust more often, so I decided to translate the old code. This article describes the porting process and the choices I made when rewriting the code. You should read the original article and the reference material to learn more about the algorithm. Here, we will focus on the intricacies of writing matrix code in Rust, replacing the earlier <a href="https://numpy.org/">NumPy</a> implementation as closely as possible.</p><h3>Rust Numerical Computing</h3><p>As a firm believer in not reinventing the wheel, I searched for recommended Rust crates to replace <a href="https://numpy.org/">NumPy</a> in the original Python code, and it didn’t take long to find <a href="https://nalgebra.org/"><strong>nalgebra</strong></a>.</p><blockquote><strong>nalgebra</strong> is meant to be a general-purpose, low-dimensional, linear algebra library, with an optimized set of tools for computer graphics and physics.</blockquote><p>Although we will not do any physics or computer graphics, it fits the low dimensionality requirement like a glove.</p><h4>Differences</h4><p>When converting the Python code to Rust, I met some difficulties that took me a while to sort out. In Python, we use all the features the language and the library provide to improve the code’s expressiveness and readability. Rust is more verbose than Python, and, at the time of this writing (version 0.33.0), the <strong>nalgebra</strong> crate still misses some features that help improve its expressiveness. Terseness is a challenge.</p><p>My first hurdle was indexing arrays using other arrays. With NumPy, you can index an array using another array of integers or booleans. In the first case, each element of the indexing array indexes into the source array, and the indexer may have a dimension equal to or smaller than the data array. With boolean indexing, the indexer must have the same size as the data, and each element must indicate whether to include the corresponding data element. This feature is handy for selecting data with boolean expressions.</p><p>Handy as it is, I used this feature throughout the Python code:</p><pre># Python<br>xx = self.n_xx[min_range]</pre><p>Here, the min_range variable in an integer array containing the subset of indices to retrieve from the self.n_xx array.</p><p>Try as I might, I couldn’t find a solution in the Rust crate that mimics NumPy indexing, so I had to implement one. After a couple of tries and benchmarks, I reached the final version. This solution was straightforward and effective.</p><pre>// Rust<br>fn select_indices(values: &amp;DVector&lt;f64&gt;,<br>                  indices: &amp;DVector&lt;usize&gt;) -&gt; DVector&lt;f64&gt; {<br>    indices.map(|i| values[i])<br>}</pre><p>The map expression is quite simple, but using the function name is more expressive, so I replaced the Python code above with the corresponding Rust one:</p><pre>// Rust<br>let xx = select_indices(&amp;self.xx, min_range);</pre><p>There is also no built-in method to create a vector from a range of integers. Although easy to do with <strong>nalgebra</strong>, the code becomes a bit long:</p><pre>// Rust<br>range = DVector::&lt;usize&gt;::from_iterator(window, 0..window);</pre><p>We can avoid much of this ceremony if we fix the vector and array sizes at compile time, but we have no such luck here because the dimensions are unknown. The corresponding Python code is more terse:</p><pre># Python<br>np.arange(0, window)</pre><p>This terseness also extends to other areas, such as when filling a matrix row-wise. In Python, we can do something like this:</p><pre># Python<br>for i in range(1, degree + 1):<br>    xm[:, i] = np.power(self.n_xx[min_range], i)</pre><p>As of this writing, I found no better way of doing the same thing with <strong>nalgebra</strong> than this:</p><pre>// Rust<br>for i in 1..=degree {<br>    for j in 0..window {<br>        xm[(j, i)] = self.xx[min_range[j]].powi(i as i32);<br>    }<br>}</pre><p>Maybe something hidden in the package is waiting to be discovered that will help here with conciseness.</p><p>Finally, I found the <strong>nalgebra</strong> documentation relatively sparse. We can expect that from a relatively young Rust crate with a lot of promise.</p><h4>The Upside</h4><p>The best comes at the end—the raw performance. I invite you to run both versions of the same code (GitHub repository links are below) and compare their performance. On my 2019 MacBook Pro 2.6 GHz 6-Core Intel Core i7, the <em>release</em> version of the Rust code runs in under 200 <em>microseconds</em>, while the Python code runs in under 5 <em>milliseconds</em>.</p><h3>Conclusion</h3><p>This project was another exciting and educational Python-to-Rust port of my old code. While converting from well-known Python control structures to Rust is getting more accessible by the day, converting NumPy to <strong>nalgebra</strong> was more of a challenge. The Rust package shows much promise but needs more documentation and online support. I would warmly welcome a more thorough user guide.</p><p>Rust is more ceremonious than Python but performs much better when properly used. I will keep using Python for daily work, prototyping, and discovery, but I will turn to Rust for performance and memory safety when moving to production. We can even mix and match both using crates like <a href="https://pyo3.rs/v0.15.1/">PyO3</a>, so it is a win-win.</p><p><em>Rust rocks!</em></p><h3>References</h3><p><a href="https://github.com/joaofig/loess-rs">joaofig/loess-rs: An implementation of the LOESS / LOWESS algorithm in Rust. (github.com)</a></p><p><a href="https://github.com/joaofig/pyloess">joaofig/pyloess: A simple implementation of the LOESS algorithm using numpy (github.com)</a></p><h3>Credits</h3><p>I used <a href="https://app.grammarly.com/">Grammarly</a> to review the writing and accepted several of its rewriting suggestions.</p><p><a href="https://www.jetbrains.com/ai/">JetBrains’ AI</a> assistant helped me write some of the code, and I also used it to learn Rust. It has become a staple of my everyday work with both Rust and Python. Unfortunately, support for <strong>nalgebra</strong> is still limited.</p><p>João Paulo Figueira is a Data Scientist from Lisbon, Portugal.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e22f58c81d4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/loess-in-rust-2e22f58c81d4">LOESS in Rust</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Built a Local-First Rust Tool That Keeps Working When Its Backend Disappears]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/i-built-a-local-first-rust-tool-that-keeps-working-when-its-backend-disappears-843b539a7594?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*TrY-xMnkxbaVMEFLru0Hzg.jpeg" width="1408"></a></p><p class="medium-feed-snippet">Embedded storage, background synchronization, conflict handling, and recoverable state produced a practical exploration of resilient&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/i-built-a-local-first-rust-tool-that-keeps-working-when-its-backend-disappears-843b539a7594?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/i-built-a-local-first-rust-tool-that-keeps-working-when-its-backend-disappears-843b539a7594?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/843b539a7594</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[rust-tools]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Fri, 06 Nov 2026 09:24:18 GMT</pubDate>
            <atom:updated>2026-11-06T09:24:16.529Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Discord is finally rewriting the client in Rust with GPUI]]></title>
            <link>https://medium.com/rustaceans/discord-is-finally-rewriting-the-client-in-rust-with-gpui-940dff5b9387?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/940dff5b9387</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rustlang]]></category>
            <category><![CDATA[rust-programming]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[rust-programming-language]]></category>
            <dc:creator><![CDATA[John Philip]]></dc:creator>
            <pubDate>Thu, 05 Nov 2026 06:22:32 GMT</pubDate>
            <atom:updated>2026-11-05T06:22:31.454Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XQJ0hWLEgfJAfRsp" /><figcaption>Photo by <a href="https://unsplash.com/@mariiaberezovsky?utm_source=medium&amp;utm_medium=referral">Mariia Berezovsky</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>I have watched Discord sit on Electron for years while the rest of the industry complained about the memory and the process sprawl.</p><p>The announcement that the entire desktop client is moving to GPUI, with React Native going away on mobile as well, feels like one of those rare moments where a large product team actually follows through on the architecture they already half-built.</p><p>Discord has used Rust since 2018 for infrastructure and voice.</p><p>Parts of the current client already lived there. The CTO called the full client rewrite the holy grail.</p><p>That language is accurate. Electron was always a pragmatic choice for shipping features fast across platforms.</p><p>It also meant every Discord window carried a Chromium instance and the associated cost.</p><p>Early numbers from the <em>Discord Phoenix</em> build show roughly 290 MB for two concurrent accounts.</p><p>The old client could idle at a gigabyte or more and occasionally climb higher. That gap is the difference between a browser and a native GPU-rendered UI.</p><p>GPUI is the interesting part of the decision. It is not Tauri.</p><p>There is no system webview for the main interface. The framework renders directly, the same approach Zed uses.</p><p>Discord is carrying its own patches and has signaled willingness to upstream what makes sense.</p><p>That is the pragmatic engineering move: take a production-proven Rust UI layer, adapt it hard, and keep the door open for the original maintainers.</p><p>Mobile keeps native UI shells while sharing the core application logic through Rust. The result is one coherent codebase instead of three separate stacks fighting each other.</p><p>I am not naive about the risk.</p><p>Full client rewrites of applications this large rarely ship on the first schedule.</p><p>Accessibility, security, and the long tail of platform quirks will still demand attention. The team has said those concerns are treated with the same priority as performance. That statement matters more than the RAM numbers.</p><p>What I appreciate most is the honesty of the trajectory.</p><p>They started with Rust where it made sense, kept the pressure on the remaining Electron surface, and eventually decided the cost of staying was higher than the cost of finishing the migration.</p><p>Most companies stop at the first convenient layer. Discord is finishing the job.</p><p>When the new client reaches wider testing, the real test will be whether the feel stays identical while the resource profile finally matches a modern native application.</p><p>I expect it will. The foundation was already there.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=940dff5b9387" width="1" height="1" alt=""><hr><p><a href="https://medium.com/rustaceans/discord-is-finally-rewriting-the-client-in-rust-with-gpui-940dff5b9387">Discord is finally rewriting the client in Rust with GPUI</a> was originally published in <a href="https://medium.com/rustaceans">Rustaceans</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Three Rust Patterns That Made My Code Easier to Read]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/rustaceans/three-rust-patterns-that-made-my-code-easier-to-read-df70a37f872a?source=rss----d11aa42eb8ad---4"><img src="https://cdn-images-1.medium.com/max/1408/1*xitw58RloEKdXajOnixX3w.jpeg" width="1408"></a></p><p class="medium-feed-snippet">Replacing unnecessary clones, using ? consistently, and matching on Option and Result can make everyday Rust code clearer without&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/rustaceans/three-rust-patterns-that-made-my-code-easier-to-read-df70a37f872a?source=rss----d11aa42eb8ad---4">Continue reading on Rustaceans »</a></p></div>]]></description>
            <link>https://medium.com/rustaceans/three-rust-patterns-that-made-my-code-easier-to-read-df70a37f872a?source=rss----d11aa42eb8ad---4</link>
            <guid isPermaLink="false">https://medium.com/p/df70a37f872a</guid>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[code]]></category>
            <category><![CDATA[rust-programming-language]]></category>
            <dc:creator><![CDATA[Dr.Michael]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 20:21:42 GMT</pubDate>
            <atom:updated>2026-11-04T20:21:40.802Z</atom:updated>
        </item>
    </channel>
</rss>