Weekly open source: libwallet's last mile, OxideAV's document stack
Two-track week: libwallet finishing the last fraction of a percent before going live, and OxideAV continuing to fill out a long-term vision.
libwallet: the last mile
libwallet is 99.9% ready to go live. The fixes shipping now are the kind you only find by actually using the wallet against real chains — edge cases in the field, not features designed at a desk. v0.4.5 → v0.4.15 over the week.
Bitcoin got the heaviest pass:
- In-memory UTXO tracker so back-to-back sends don't double-spend while a previous tx is still propagating.
- Filter spent txos before coin selection — fixes a flow that was picking already-spent outputs.
- Dry-run preview for unsigned bitcoin transfers
(
wlttx/simulate), used by the UI to show "what would this cost" before asking the user to sign. Account:listUTXOs+ a Dartutxosfield for manual UTXO selection, plus per-input vsize accounting.- Spend across both
m/0andm/1derivation branches, not just receiving. xpub queries route throughmodchain_lookupTxoBIP32.
EVM — SignAndSend now auto-validates, so fees / nonce / gas
parameters land correctly without the caller filling in the right
shape upfront.
Account — Account:addressFormats exposes a multi-shape address
picker (legacy / segwit / native segwit on Bitcoin, taproot, etc.).
FindAccount falls back to the current-network derived address when
the input doesn't match any indexed record.
The pattern across all of these: not new abstractions, just the right behaviour at the boundaries real users hit.
OxideAV: the long-term vision
The goal of OxideAV is to merge ffmpeg and ImageMagick into a single pure-Rust process that's safe to run on untrusted input.
The case for one project covering both is technical, not just ergonomic: modern image formats are essentially video codecs applied to single frames. WebP is a VP8 intra-frame in a RIFF container. HEIC / HEIF are HEVC intra-frames in ISOBMFF. AVIF is AV1 intra-frames the same way. The distance between "image" and "video" has shrunk to the point where splitting them across two separate projects — each with its own decade-deep pile of CVEs and C dependencies — is the legacy choice, not the inevitable one.
Beyond absorbing the existing use cases, OxideAV is building toward things neither tool does well today. Vector PDF → vector SVG conversion is one example, where paths and gradients stay as paths and gradients across the round-trip instead of being flattened to raster. There's more in that direction.
That's the goal. Today, OxideAV is not yet usable — v0.0.x / v0.1.x across the board, the kind of multi-year build that doesn't pay back until late.
This week's progress, by area.
Document stack
The scene model from W17 was scaffolded for PDF / livestream / NLE but had no real building blocks. This week they landed:
- oxideav-ttf — TrueType parser, with COLR/CPAL vector colour-emoji layer stacks (v0 + v1), Apple-style sbix PNG/JPEG bitmap colour glyphs, and TTC collection sub-fonts.
- oxideav-otf — OpenType / CFF parser (sfnt + CFF + Type 2 charstrings, cubic-Bezier outlines).
- oxideav-scribe — font rasterizer + shaper + layout. Refactored mid-week to vector- only; the pixel pipeline got dropped because the rest of the document stack wants vectors all the way down.
- oxideav-raster — vector → raster rendering kernel, with Lanczos2 (4×4 windowed sinc) image resampling.
- oxideav-pdf — PDF reader and writer where vectors stay vectors. Paths stay paths, gradients stay gradients, no rasterisation along the way. Bytes → Scene round-trip in the top-level walker.
- oxideav-svg — SVG
reader and writer.
<text>/<tspan>through scribe's vector-first API.<mask>/<clipPath>with multi-shape clip and SoftMask compositing.<filter>passes through gracefully.
Plus image-format coverage: oxideav-tiff (TIFF 6.0) and oxideav-pbm (Netpbm — PBM/PGM/PPM/PNM/PAM).
Lossless sweep
Seven new lossless decoders for archival and editing workflows: TTA (True Audio), Ut Video, Shorten, HuffYUV / FFVHuff, Lagarith, MagicYUV, and WavPack.
Long tail + modern niches
Legacy: Cinepak (CVID), Indeo 2 (RT21/IV20), SVQ1 (Sorenson), Cook (RealAudio), WMA, Musepack, aptX (classic + HD Bluetooth), MIDI (with a SoundFont 2 / SFZ / DLS soft-synth scaffold).
Modern: EVC (MPEG-5), JPEG XS (low-latency for production / IP video), DTS (Core + EXSS / XCH / XXCH / X96 / XLL extensions).
Synthetic media
oxideav-generator —
sine waves, gradients, fractals, test patterns. Usable as a
generate:// URI source or as a zero-input filter. Plus label —
text-to-image via scribe.
Also this week
Mostly background:
- goro (PHP in Go) — in
optimization stage. Cached literal
*ZValat compile time, wrapper-freeZVal.SetValfast path, fewer allocs inoperatorMath. - goro-rs (PHP in Rust) — substantial PCRE regex engine rewrite. Currently around 50% on the PHP test suite.
- cterm — streaming input RPC with batched fallback for low-latency typing.
- klbslog + rest — twin fix to reset request body on retry / token-renewal retry.
Next week
A VM lands in goro. libwallet's go-live work continues.