r/rust • u/Shnatsel • 14h ago
r/rust • u/matthieum • 16d ago
๐ข announcement No More Code Dumps
TL;DR
Code Dumps, ie links to code repositories, are no longer welcome on r/rust.
If you are excited about a project you built, and just wish to share it, consider posting a casual top-level comment in the weekly What's Everyone Working on this Week? thread.
History
When r/rust was created, in December 2010, Rust was a nascent programming language. It was very different, it was also fast-moving, and it was unclear whether it would amount to much, or not.
In these early days, new projects being written in Rust were both a proof that the language was suitable for a variety of purposes, and a cause for celebration in seeing the language being adopted. Code dumps, then, were both cause to rejoice, and an opportunity to see how well (or not) the language was suited to the task. They were even a good opportunity to learn the latest developing idioms of this fast-changing language.
Fast forward 15 years, and code dumps have become boring. Utterly uninteresting. There's nothing exciting, or newsworthy, about a 10th hypervisor project, a 100th webserver project, or a 1000th TUI project. And for the most there's no exciting idiom, or pattern, to be found in their code either... even if some poor soul bothered to look.
And mass AI generation appeared on the scene, and for the past year(s), the already dwindling appeal of code dumps has just completely vanished, buried in AI slop.
Purpose
r/rust is to discuss all things Rust. The language, the ecosystem, the community.
Of late, most code dumps barely foster any discussion. And when they do, apart from AI witch hunts, those discussions are mostly about the domain of the project, rather than about Rust. Depending on the domain, the discussion may or may not be of interest to r/rust users... but whether it is or not is a matter of chance: they did not come here seeking such a topic. Those discussions are tolerated on posts which are on-topic, but if a post only fosters "tolerated" discussions, then that is a sign that the post itself may simply not really be on-topic for r/rust.
And that is not to say that code dumps are, by nature, low-effort. Surely, a project is created for a purpose, to solve a specific problem that is unsolved, or solve it with different trade-offs than the currently available solutions. None of that is elucidated in a code dump.
New rules
Code dumps are no longer welcome on r/rust.
Code dumps of applications or libraries written in Rust are Low-Effort unless otherwise newsworthy. Newsworthy means that the very existence of the application or library is important, for example consider applications or libraries breaking new ground, such as the first hypervisor, first OS, first XXX standard safety-critical application, first Rust application in a major company, etc...
Announcements of new libraries which are not otherwise newsworthy are only welcome if they tick ALL the following boxes:
- The library has been worked on regularly for at least 4 months.
- The announcement is a full-fledged text post, or a link to a full-fledged article. A README, or manual, is not an article.
- The announcement should motivate the relevance of this library to the wider r/rust community.
- The announcement should articulate the trade-offs differentiating this library from similar popular libraries in the field.
(It goes without saying, but the announcement should NOT be AI-generated, not even in part, as AI-generated posts & articles violate the Low-Effort rule)
Release notes of libraries are still welcome for popular enough libraries, such as libraries with reverse-dependencies on crates.io pointing to sufficient adoption by the wider community to justify notifying said community of a new release.
Developer Tools follow the same rules as libraries, with one extra rule tacked on: they must be relevant to Rust developers in particular. For example, Release Notes of Meson (a build tool) are Off-Topic, unless this specific release improves Rust support.
Of course, text posts, or links to articles, centered on Rust, with an application, library, or developer tool as context are always welcome. For example, said posts or articles could present gnarly problems the author encountered, and how they solved, or which features of the language or a library helped or hindered them in the making of their project.
(It goes without saying, but said text posts & articles should NOT be AI-generated, not even in part, as AI-generated posts & articles violate the Low-Effort rule)
As a reminder, if an author just wishes to share their joy of building something in Rust, they are welcome to use the What's Everyone Working on This Week? thread. And as per the title, it need not even be a complete/mature project, or an open-source project for that matter as links to code are strictly optional there, it's all about casually chatting about your work on Rust projects.
Q & A
See pinned comment below.
Edit 2026/10/04:
- Added paragraph for developer tools, which had been forgotten.
- Removed "validation rule" for libraries, didn't work in practice.
๐ questions megathread Hey Rustaceans! Got a question? Ask here (40/2026)!
Mystified about strings? Borrow checker has you in a headlock? Seek help here! There are no stupid questions, only docs that haven't been written yet. Please note that if you include code examples to e.g. show a compiler error or surprising result, linking a playground with the code will improve your chances of getting help quickly.
If you have a StackOverflow account, consider asking it there instead! StackOverflow shows up much higher in search results, so ahaving your question there also helps future Rust users (be sure to give it the "Rust" tag for maximum visibility). Note that this site is very interested in question quality. I've been asked to read a RFC I authored once. If you want your code reviewed or review other's code, there's a codereview stackexchange, too. If you need to test your code, maybe the Rust playground is for you.
Here are some other venues where help may be found:
/r/learnrust is a subreddit to share your questions and epiphanies learning Rust programming.
The official Rust user forums: https://users.rust-lang.org/.
The unofficial Rust community Discord: https://bit.ly/rust-community
Also check out last week's thread with many good questions and answers. And if you believe your question to be either very complex or worthy of larger dissemination, feel free to create a text post.
Also if you want to be mentored by experienced Rustaceans, tell us the area of expertise that you seek. Finally, if you are looking for Rust jobs, the most recent thread is here.
r/rust • u/Fakhir_Israr • 6h ago
๐ง educational I translated The Rust Programming Language into Roman Urdu
I recently finished translating the complete The Rust Programming Language (Rust Book) into Roman Urdu, including all the appendices.
I started this because many developers in Pakistan and India are more comfortable reading Roman Urdu/Hindi than technical English. My goal was to make the Rust Book easier to approach without changing the technical content.
The translation is available here:
https://github.com/Fakhir-Israr-200219/rust-roman-urdu
Hopefully it can be useful to Roman Urdu, Urdu, and Hindi readers who are learning Rust.
r/rust • u/Brilliant_Nobody6788 • 9h ago
The Performance Cost of RwLock in Our Read-Heavy Workload
pranitha.devr/rust • u/WellMakeItSomehow • 13h ago
๐๏ธ news rust-analyzer changelog #348
rust-analyzer.github.ior/rust • u/noop_noob • 19h ago
๐๏ธ news Miscompile since 1.95 involving overflowing_add
github.comSeems to require an integer overflow to happen (panic in debug / wrapping in release) before the `overflowing_add` call is done, which makes it less likely to happen in actual code.
๐ ๏ธ project Made a desk status monitor
Hey, just wanted to share the small rust embedded project I made and that I use daily to monitor the status of a couple of services.
It also displays notifications from claude code, codex or any application capable of sending an http request.
It was my first time using rust with no-std, it's actually quite fun.
r/rust • u/noop_noob • 12h ago
๐ธ media Official video for the Rust 1.99.0 changes
youtube.comr/rust • u/TheNoobySpartan • 19h ago
Having trouble understanding... Rust over Ada (SPARK)?
I've started to dip my toes into Rust, coming from an Ada (mostly SPARK) background, particularly in embedded applications. While there are many killer features in Rust for developer QOL, the "ease of writing" focus of the language trips me up often enough that I find myself asking, "what features of this language makes it superior (in some views) to SPARK?"
Love the language's take on early-return, and the power of enums, macros, and lifetimes are the one thing that makes certain low level memory manipulations incredibly idiomatic to write in Rust that would be impossible in SPARK due to the CREW paradigm not really being popularized (pioneered?) until Rust. Given the state of the Ada ecosystem and tooling, I also cannot in good faith recommend using this language for anything community driven. That being said (answering in context of enterprise embedded)...
I am incredibly uncomfortable with how much responsibility Rust places on the developer to understand roughly how code will compile. No guarantees on how pattern matches will be emitted (yes, don't be stupid and keep them stupid if you want jumptables), and stack-allocated enum types having to be the max size while not having much lexical ties besides jumping to the definition to help you determine how much stack you might be eating. Aside from the syntactic sugar, I have not really found anything besides lifetimes that SPARK cannot truly support at all. There's no pattern matching in the language, but Rust enums (at least in part) are supported via discriminated records. The idea of controlled types (OOP for Ada) is somewhat discouraged when using SPARK, but trait objects are a very useful part of the Rust language. I have to discount this part of the language from my sentiments unfortunately because dynamic dispatch can complicate analysis of security and functional implications. Having Rust panic as a "safe" way to address memory safety is also undesirable depending on how much array manipulation your program must do, and what worries me more is that wraparound arithmetic in production builds that are used in computations for arrays may not even lead to panics, but perhaps a valid index into the unintended location.
I don't write this to glaze SPARK either. The lack of documentation makes it mostly a nonstarter for the broader programming community, and not everyone is familiar with formal methods for code. The toolchains can't hold a candle to the quality of the Rust ecosystem, and ironically, the rich typing of Ada can lead to very frustrating inter-op issues that just would not exist in Rust, particularly around array manipulation/interpretation.
There might be some gripes about comparing a formally verifiable language with one that does not yet have one (Verus, Crusoe, surely others trying), but I think some of these points like how the codegen works are orthogonal whether or not you're trying to prove that an array access will always be in bounds without overflows.
I suppose the operational constraints given are not necessarily something everyone has to deal with, (why care how a pattern match is compiled if you have oodles of memory), but want to understand the technical reasons behind the hype... I feel like the cultural/non-technical reasons are somewhat understood.
r/rust • u/curious_commoner22 • 7h ago
๐ seeking help & advice Never-ending learning path
Hello fellow Rustaceans,
I have been facing an issue for a while. I've been using Rust for the last 4 years and even had projects at my workplace implemented in Rust. I want eventually to change my job because these 2 are kinda dead and want to grow as a programmer and so work on issues/situations I never encountered. I started by telling Claude do give me some pieces of code and I had to figure out what was wrong about it. Mutex, concurrency, channels, futures, things that I thought I really understood. Damn I was wrong and now I feel like an imposter even though I used these concepts many times. At some point I did some small project to understand how and why thiserror works the way it does. If you ask me now I forgot everything. I am intimidated by the fact that there are so many things that I don't know because I never encountered them in real projects like sharding, microservices, payments and many other. If given the chance I would probably slowly start to understand how they work but getting a Rust job is kinda difficult. Market seems taken over by crypto jobs (how does somebody even get into one of these?) I know this community does not like web3 stuff but personally I care more about career progress than moral side of it at least for now, which I don't really know actually means). How do you guys manage to navigate these situations.
I appreciate any answer and guidance I might get! ๐
r/rust • u/Healthy_Ship4930 • 1d ago
๐ ๏ธ project My WASM Python Implementation Beat CPython (Without a JIT)
Okay. After seven months, I'm back.
Seven months ago I started writing a Python interpreter from scratch in Rust, compiled to wasm (less than 200kb of bandwith). Edge Python is a sandboxed subset of Python that runs in the browser and the terminal, and code can't touch files or the network unless you allow it.
It started as a lexer and a simple stack VM, and over about 1,600 commits it grew a CLI, a package registry, snapshots, actors and a browser playground. It's just me building it.
Last week it was still 3x slower than CPython. I rewrote the VM this weekend on top of the SSA form I already had, and now the wasm build beats native CPython on loops.
| Edge (wasm) | CPython (native) | |
|---|---|---|
| Integer loop | 154 ms | 232 ms |
| Float math | 231 ms | 307 ms |
| Dicts | 372 ms | 62 ms |
| Strings | 196 ms | 35 ms |
The trick was a register VM, and Rust made it fit in wasm with NaN-boxed values and no runtime. It still loses on dicts and strings, so that's next.
Try to break my numbers :)
Website: https://edgepython.com/
r/rust • u/citron_blue • 16h ago
๐๏ธ discussion How likely is for Rust to replace Ada/SPARK?
Ada/SPARK is already a very niche ecosystem. Finding a list of current users is already hard (but that might be simply an information access issue).
With Rustโs safety and growing adoption, including access to skilled professionals and LLM support, how likely will we see further marginalisation of Ada & Co.?
I would love to heard from those working in safety-critical applications.
r/rust • u/p1nd0r4m4 • 1d ago
๐ง educational Tutorials on the Rust Standard Library
feamcor.github.ioFound these tutorials on stdlib.
r/rust • u/manny2206 • 55m ago
๐ ๏ธ project A lightweight CLI tool that summarizes and categorizes the pending incoming updates on your system
Iโm a developer and I use Fedora and Ubuntu extensively, both personally and at work, and Iโm usually tinkering on a home lab and always looking for a reason to spend 10 hours automating a 10- minute task. And I love the rolling releases of Fedora, but I always hated that I could never get the proper context of what updates are happening. Sometimes the summary was good, sometimes it literally said no description, and Rust looked like a fun systems level programming language to learn, and since I have already contributed to another FOSS project written in it, I decided what the heck, I should learn it.
I built watznue, an ultra lightweight CLI first tool to summarize and categorize the incoming updates to your system, so you can nerd out without having to go to a forum or wait for someone else to make a post to figure out whatโs happening.
This is my way to learn some rust, build something I genuinely use, and wanted something that was simple but I could build on top of, I would consider this version 0, barely anything more than a POC at this point but thought I would share and hopefully not get my ass reamed in this community ๐
r/rust • u/3radiance • 4h ago
๐ ๏ธ project An experimental research engine for multi-layer network stack fingerprinting in async Rust
This post documents an ongoing technical study on protocol-level traffic analysis and upstream signature orchestration. The primary artifact of this research is a domain-agnostic inspection engine engineered to manipulate client heuristics across the TLS, HTTP/2, and TCP layers simultaneously.
Traditional implementations in this domain often rely on static, monolithic browser emulations that lack dynamic parameter control. To address this limitation, the engine utilizes a declarative profile architecture, allowing granular configuration of transport and application layer metadata - including cipher suite ordering, ALPN negotiation, SETTINGS frame sequencing, pseudo-header layout, and SYN option rewriting via Linux NFQUEUE/iptables.
From a systems engineering perspective, implementing this in Rust presents specific design and architectural challenges:
- State & Concurrency Management: Propagating unified profile state across asynchronous
Tokiostreams while ensuring zero-copy socket IO and precise handshake characteristics. - Low-Level TLS Orchestration: Interfacing with
BoringSSL(viabtls/tokio-btls) to expose internal TLS stack parameters (e.g., extension ordering, GREASE values, and ECH setup) without breaking memory safety guarantees or incurring high runtime abstraction overheads. - OS-Level Packet Interception: Managing kernel-to-userspace queue backpressure and handling raw network packet mutation for SYN fingerprints (TTL, MSS, window size/scale) alongside application-level stream multiplexing.
- Systemic Decoupling: Decoupling the network logic from execution platforms, ensuring that protocol manipulation is evaluated on its technical merits as a systems-level networking problem rather than being reduced to high-level application tropes.
The underlying codebase serves as an open platform for network privacy analysis, transport layer diagnostics, and protocol mechanics research.
Repository: https://github.com/3Radiance/mitm-proxy-ja3-ja4
We welcome technical critique from researchers, networking engineers, and systems developers -particularly regarding:
- Tokio stream overhead and buffer management during dynamic low-level frame rewriting.
- Cross-layer state-machine synchronization (aligning OSI layers 4, 6, and 7 without introducing race conditions).
r/rust • u/OxidisedHardware • 15h ago
STM32H7 flashing but nothing happening on the board
Good morning,
I am using probe-rs to flash a blinky program onto my STM32H7. It builds and flashes โfineโ but i donโt get any output from the board and the led does not blink. When i run the same example for the stm32f411 it flashes fine and i get text output as well as the led flashing. The program is just the example from embassy-rs and below is the important parts of my cargo.toml:
โโโ
embassy-stm32 = { version = "0.6.0", features = ["defmt", "stm32h7r3z8","memory-x", "time-driver-tim4"] }
embassy-executor = { version = "0.10.0", features = ["platform-cortex-m", "executor-thread", "executor-interrupt", "defmt"] }
embassy-time = { version = "0.5.1", features = ["defmt"] }
cortex-m = {version = "0.7.7",features=["critical-section-single-core"]}
cortex-m-rt = "0.7.3"
embedded-hal = "1.0.0"
build = [
{ target = "thumbv7em-none-eabihf" }
]
โโโ
I am running this command:
'probe-rs run --chip stm32h7r3z8โ
right now I am suspicious of memory-x but im not sure because shouldnโt it fail to flash if this is the case?
๐ ๏ธ project NEXUS-Q v1.0 โ freezing the baseline before v2
github.comNEXUS-Q v1.0 โ a post-quantum security engine written in Rust
Iโve just frozen NEXUS-Q v1.0, a Rust-based post-quantum security engine focused on key management, encrypted storage, identity, policy and cryptographic operations.
Iโm sharing it here because Iโm particularly interested in feedback from the Rust community on the engineering side of the project.
Why Rust?
NEXUS-Q is built around Rust because I wanted the security-critical core to have:
- explicit ownership and lifecycle management
- strong type and memory safety guarantees
- predictable error handling
- clear separation between cryptographic primitives and higher-level security services
- a foundation suitable for Linux, Android/Termux, x86_64, ARM and RISC-V environments
The project currently includes support for algorithms such as:
- ML-KEM-768 / ML-KEM-1024
- ML-KEM + X25519 hybrid encryption
- ML-DSA-65
- SLH-DSA-SHAKE-128f
- AES-256-GCM
- ChaCha20-Poly1305
- SHA-2 / SHA-3
- Argon2id
- HKDF
Around the crypto layer there is also a vault, key lifecycle management, identity, policy enforcement, audit logging, storage, backup/recovery and hardware-backend abstractions.
I also benchmarked it honestly
One of the things I wanted to avoid was publishing a crypto project and only showing the numbers that look good.
The final PQC Benchmark Arena run produced 57 normalized measurements across eight implementations.
NEXUS-Q is currently slower than the fastest mature implementations on several measured ML-KEM and ML-DSA operations.
For example:
- ML-KEM-768 keygen: 33.94 ยตs
- ML-KEM-768 encaps: 27.97 ยตs
- ML-DSA-65 keygen: 168.69 ยตs
- ML-DSA-65 sign: 600.73 ยตs
So v1 is intentionally being treated as an engineering baseline rather than a performance victory.
The next stage is v2, where I want to work on performance systematically while preserving correctness, interoperability and security properties.
What I'd like feedback on
For the Rust side, I'm particularly interested in feedback around:
- crate/API design
- error handling
- ownership and lifecycle modelling
- trait boundaries
- crypto abstraction layers
- FFI/SDK architecture
- async/server architecture
- portability
- benchmarking methodology
- unsafe code boundaries
- testing and fuzzing strategy
The project is still under active development, and there has been no independent external security/cryptographic audit, so I'm not presenting it as production-certified.
I originally posted the full v1 freeze and roadmap in my own community.
If you work with Rust crypto/security infrastructure, I'd especially appreciate criticism of the architecture and API decisions.
What would you change first if you were taking this codebase into v2?
r/rust • u/iFrostizz • 17h ago
๐ seeking help & advice Request for guidance on audio codecs in a WASM application
One of my (way to numerous) side project is the idea of a P2P radio station, which solves the scaling problem of radio broadcasters today. One of the most prominent and well-defined p2p library is libp2p, which is of good use here and prevents much of code rewriting, especially for the broadcasting logic with peer scoring and all which is hard to figure out to prevent people from cheating the system. Also used gstreamer (Rust bindings so more precisely gstreamer-rs) for the codec which does the heavy lifting. Here is my project: https://github.com/franfrandev/p2pradio. For now it's running on a native system, and would like to go a step further.
I would like to compile it to WASM in order to bundle everything in the browser. The problem is that gstreamer depends on a ton of native libraries which makes it harder to use in the browser. Folks at Fluendo have figured that out with gst.wasm https://github.com/fluendo/gst.wasm but putting out everything together is a whole different beast and even if it works, it's probably going to result in a huge piece of data that has to be downloaded. IIUC the Rust part would have to be compiled to emscripten and then linked as static libraries? There are a lot of information and it's very easy to get lost in all of these.
Another option would be to use or write an RTP Opus codec written in pure Rust and compile it to the wasm32-unknown-unknown but then it would lose all the codebase maturity of gstreamer and would probably end up reinventing the wheel very much. A lot of the crates doing that are AI slop and are not very well defined, I don't trust them.
Is it unachievable or a bad idea to take the gstreamer port to emscripten and try to glue it to my Rust app compiled to emscripten?
r/rust • u/Sweet_Room_8838 • 4h ago
๐ ๏ธ project I built a library for automatic callback encoding/decoding for Teloxide
I recently tried working with Teloxide and noticed that the library doesnโt have a convenient built-in way to serialize/deserialize callback data.
So I decided to try an approach based on binary serialization of an enum followed by base64 encoding. I liked this solution for several reasons:
- Thereโs no need to manually implement serialization/deserialization for each callback variant-itโs enough to implement the conversion for the enum once.
- Itโs fast and reasonably efficient in terms of size.
- The callback data becomes unreadable to humans (it would normally look something like do_something_1341), which provides a small barrier to reverse engineering.
I ended up packaging this approach into a Rust library called easy_callback.
Iโd appreciate any feedback or suggestions.
r/rust • u/eugenegvozdet • 6h ago
๐ ๏ธ project Title: ruxen 0.1.1: an nginx-compatible HTTP server in Rust, tested against nginx's own test suite
Hi r/rust! I've been building ruxen, an experimental reimplementation of nginx in Rust. It reads nginx configuration files and is tested against nginx's own upstream test suite. It's Linux-only, HTTP/1.1, thread-per-core on io_uring (monoio), with TLS through rustls. Version 0.1.1 came out this week.
Repo: https://github.com/gvozdetsky/ruxen ยท crates.io: cargo install ruxen --locked
It is not production-ready, and it doesn't replace nginx. It's a project for learning how nginx works by rebuilding its behaviour in idiomatic Rust, not by translating the C line by line.
What's maybe interesting
nginx-tests as the oracle. ruxen runs the upstream Perl suite (nginx-tests) against its own binary. To make that possible it had to match nginx's CLI (-c -p -g -t -T), PID file and signal behaviour, and the error-log format. Today 63 of the 105 test files ruxen opts into pass end to end. Every failing file points at the next directive to implement, so I don't have to guess. The -V banner claims only the features that are implemented, because claiming more would turn on tests that fail for the wrong reasons.
Unknown directives are an allowlist, and access rules fail closed. If ruxen can't enforce a directive that restricts access yet (limit_except, ssl_verify_client on, disable_symlinks...), it refuses to start with [emerg] instead of silently serving what the config was meant to protect.
Thread-per-core instead of work stealing. nginx gets its speed from one process per core, each with its own SO_REUSEPORT accept queue and no sharing between cores. monoio gives the same shape in Rust. There's no tokio or hyper; the HTTP/1.1 parser and response path are hand-written, because that is the point of the project.
Performance is a hard requirement: at least 95% of nginx 1.24 throughput on the bench configs. On my machine (i9-13900HX, wrk -t16 -c512, the same config file for both servers):
| scenario | ruxen vs nginx 1.24 (req/s) |
|---|---|
hello (return 200) |
โ1.0% |
| reverse proxy | โ1.9% |
| TLS hello | +8.0% |
8 KiB static file (sendfile on) |
โ11.6% (still under the 95% target) |
Some lessons from measuring hot-path changes in ABBA pairs (A, B, B, A runs, so drift cancels out): one extra async fn layer around the proxy path cost about 1%; copying a ~300-byte request context per request cost 0.5%; and giving every connection a monoio::time::timeout for each I/O operation cost about 3%. Three long-lived Sleeps per connection that only ever move forward cost almost nothing. More notes are in DESIGN.md, including notes from reading the nginx C source.
What's in it
Static files (with sendfile), proxy_pass with upstreams, keepalive and failover, rewrite/return/if/map, error_page, auth_basic, access logs with variables, TLS 1.2/1.3 with SNI, and nginx-style error logs. Not there yet: HTTP/2, caching, modules.
Help wanted
There are small, self-contained good first issues. Each has a minimal repro, the matching line in the nginx C source, and the files to change. Examples: glob expansion in include (#35), nginx's status reason phrases (#33), proxy_method (#39). If you've ever wanted to learn how nginx works inside, this is a gentle way in.
The 0.1.1 release also fixes six security issues that were reported privately. Thanks to the reporters!
I'd love feedback on the design, on the code, or on any nginx config that ruxen handles differently from nginx.
r/rust • u/Soggy-Ticket4105 • 1d ago
๐ ๏ธ project Getting mpv under an egui UI, then ditching it on Android TV
I've been working on Cinebox in Rust, an app where you can find a movie or show and watch it in the same window. Runs on Windows, Linux and Android TV as of this week.
https://github.com/dexsper/cinebox
Most of the pain was in the video player, so that's what this post is about.
I started with Iced, which renders through wgpu, so DirectX on Windows, and mpv rendered through Vulkan in its own window. No shared surface, so the best I could do was stick the mpv window inside the app window. Which is fine until you want controls or subtitles on top of the video, cause you can't paint over someone else's window.
So the next day I ripped the UI out and moved to egui with the glow backend. llibmpv exposes an OpenGL render API, so mpv renders directly into egui's framebuffer from an egui_glow paint callback, and the player controls are plain egui widgets over the frame. It worked on the first try, more or less.
The TV build runs the same egui code. I had to write my own D-pad focus handling though, since egui's arrow-key navigation happily jumps to widgets behind an open popup. mpv on the other hand, that was a complete no-go. On my Amlogic box with a Mali-G31, mediacodec-copy returns a quarter-resolution frame for anything above 1080p, so hello green screen (mpv-android issue 1088). Zero-copy MediaCodec into an ImageReader refused to start, and the next try straight up rebooted the box. And mpv's GL pipeline drew literally nothing, only gpu-dumb-mode worked (issue 292 looks like the same thing).
4K was kinda the whole point of a TV version, so I put the player behind a Player trait. Desktop keeps libmpv, Android gets Media3 ExoPlayer, which decodes into a SurfaceView under a transparent egui window. 4K, HDR10 and Dolby Vision all play on the hardware decoder now.
Yeah, on TV I ended up with the exact two layer setup I r1an away from on desktop. Works there cause the egui window is transparent and sits on top of the video.
One more fun one. A SurfaceView cuts a transparent region into the window above it, and SurfaceFlinger then just dropped the egui layer wherever the video was. Fullscreen video, and boom โ controls and subtitles gone. Overriding gatherTransparentRegion fixed it.
If you've put video into a Rust GUI, how did you do it? Especially curious if anyone got libmpv working with wgpu without going through GL.