2026-04-19

Weekly open source: OxideAV, in public

First of what I'd like to keep as a weekly dispatch — a short digest of what I've been shipping in open source. If nothing notable happened in a given week, you won't see one.

OxideAV, in public

The big item this week: OxideAV — a pure-Rust media transcoding and streaming framework. It started the week as a workspace monorepo; by the 17th I had extracted it into 45+ per-format crates, one repository each, under the OxideAV/ organisation. First v0.0.3 / v0.0.4 releases went out the same day via release-plz, and the cycle has kept running since.

The scope is broad on purpose:

  • Video — H.264, H.265, AV1, VP8, VP9, MPEG-1/2, MPEG-4 ASP, H.263, Theora, ProRes, MJPEG.
  • Audio — AAC, MP1/2/3, Opus, Vorbis, FLAC, CELT, Speex, GSM, G.722 / G.723.1 / G.728 / G.729.
  • Images — PNG/APNG, GIF, WebP, JPEG, AVIF (scaffold), JPEG 2000 (scaffold), JPEG XL (scaffold).
  • Containers — MP4/MOV, Matroska/WebM, Ogg, AVI, IFF; basic formats (WAV, raw PCM, slin) share a single crate.
  • Trackers — MOD, S3M (decode-only by design).
  • Subtitles — PGS, DVB, VobSub, ASS/SSA.
  • Plumbingoxideav-core (Packet / Frame / Timestamp), oxideav-codec and oxideav-container (traits + registries), oxideav-pixfmt (conversion matrix, quantisation, dither), and oxideav-job — a JSON-driven transcode graph executed by a pipelined multithreaded runtime.

The rule: no C dependencies anywhere in the tree. No ffmpeg, no libav, no *-sys crates, direct or transitive. Every codec is implemented from the spec. There's a CLI (oxideav-cli) and a reference SDL2+TUI player (oxideplay).

It's early — v0.0.x across the board, coverage is uneven, some codecs are decode-only, others have encoders landing week by week, a few are still register-but-refuse scaffolding reserving codec ids. The intent is to build toward something you can drop into a real pipeline without pulling a gigabyte of C along with it.

H.264 got the heaviest push of the week — 134 commits closing out 4:2:2 / 4:4:4 CABAC decode, MBAFF P/B slice data, SI/SP primary slice decode, separate_colour_plane_flag=1, plus a first-pass CAVLC P-slice encoder (P_L0_16x16 + P_Skip, integer motion estimation). AAC got short-block emission with a real state machine and per-channel TNS analysis. Plenty left to do in both.

libwallet: Swap API

KarpelesLab/libwallet shipped 0.3.14 and 0.3.15. The headline is a multi-chain swap API — Jupiter Ultra and dFlow on Solana, 1inch on EVM — exposed through a single provider-abstracted surface with approval detection (the wallet tells the UI when an ERC-20 allowance is needed before a swap can run). Solana priority fees now route through proper ComputeBudget instructions, and displayed Solana balances finally exclude the rent-exempt reserve instead of double-counting it.

Also this week

  • goavif — pure-Go AVIF codec, also launched this week, same "no cgo" rule as OxideAV.
  • goro / goro-rs — PHP in Go, and a parallel Rust port. Both saw steady commits.
  • strtotime — a Go port of PHP's strtotime(): timezone-aware natural-language date parsing, RFC 2822, ISO 8601, relative dates. Landed in a single day on April 13.

Next week

Continued work on OxideAV across the board.