2026-07-26

Weekly open source: libwallet goes all-Rust, the AV1 encoder fills in, and Claude Code runs in nixvm

In some weeks the stack's layers show up as separate repos. This week they show up inside one product. libwallet, the multi-chain wallet library behind TibaneApp, dropped its Go implementation, and the Rust port that replaces it runs on the project's own crates: rsurl for HTTP, purecrypto for cryptography, graphitesql for storage. Elsewhere, the AV1 encoder worked through the rest of the spec's coding tools, and nixvm, the syscall-level sandbox, got a real MMU and ran Claude Code.

libwallet: Rust is now the only backend

libwallet is the TSS-based multi-chain mobile wallet library (Ethereum, Bitcoin, Solana) that TibaneApp is built on. For several weeks, a Rust port had been growing next to the original Go code, aiming at matching behaviour. Most of this week's commits end with "(match Go)": wallet backup shapes, built-in network seeding, Solana SPL-token sends, and the OKX swap flow (settlement confirmation, native-SOL wrapping, broadcasting through OKX's API). Then came the commit "Remove the Go implementation; Rust is now the sole backend."

What followed shows the new backend's dependencies. HTTP moved from ureq to rsurl, which drops rustls and ring. The database layer went to graphitesql 0.1.6. Then the whole library was ported to WebAssembly layer by layer: the DB (single-threaded, in-memory), the environment, the models and TSS, and the request dispatch. purecrypto 0.6.28 supplies the cryptography with host entropy. The week ended with "real backend runs in the browser": a client-side wallet web app on GitHub Pages, running the same request API the mobile app uses.

oxideav-av1: the rest of the toolbox

The oxideav-av1 encoder had the most commits of the week (74). It kept adding coding tools, again with a self-encoded conformance stream for each, and the corpus grew from 64 to 112 streams:

  • Motion: OBMC and warped-causal motion modes, frame-level global motion estimation, and eighth-pel high-precision motion vectors.
  • In-loop filters: frame-level and per-64×64 CDEF strengths, and loop restoration (Wiener and self-guided) per unit.
  • Rate control: a "rate twin" that prices every RD decision with exact fractional-bit accounting, per-superblock delta-q, and temporal segmentation maps.
  • GOP structure: deep, recursive B-pyramids with an adaptive mini-GOP. Against the previous two-level structure, the measured result is −4.11% (deep) and −2.85% at +0.16 dB (adaptive).
  • Format coverage: every chroma-format and bit-depth pairing in the spec now encodes (a 22-stream matrix). Also added: mixed lossless segments inside lossy frames, temporally scalable operating points, large-scale tile lists, and the Annex B bitstream format.

v0.1.16 was released during the week.

nixvm: a real MMU, and Claude Code runs

nixvm replaced its flat identity memory model with a real MMU: a physical RAM pool with a 4 KiB frame allocator, real x86-64 page tables per process, demand paging, and TLB shootdowns when the host edits page tables (fork, CoW, munmap, mprotect). The commit that landed demand paging notes that it "runs the full JSC engine", WebKit's JavaScriptCore, alongside last week's V8.

Then a new workload. Once guest virtual space was decoupled from the RAM pool, a commit reads "claude runs". Getting Claude Code to finish a real request took more fixes: serializing runs of a shared address space under SMP, O_NONBLOCK through fcntl, edge-triggered epoll, and polling host I/O while a connection is live instead of declaring deadlock. The kernel's single big lock was also split into separate locks for networking, pipes and the poll objects. Clock reads now go through a vDSO, so clock_gettime makes no syscall. And there is now a pseudo-terminal: /dev/ptmx, /dev/pts/N, and ^C/^Z delivered to the foreground process group.

graphitesql: a C library with every release

graphitesql put out v0.1.4 through v0.1.6. The C-API and wasm bindings, previously sibling crates, were folded into the main crate as opt-in features. The release workflow now ships the libsqlite3-compatible C library alongside the CLI. Inserts got faster: UNIQUE and primary key conflicts are found by seeking instead of scanning, and WITHOUT ROWID secondary indexes are maintained incrementally, so WITHOUT ROWID inserts are now O(n·log n). Cross-process work honours PRAGMA busy_timeout and takes the write lock before DML or DDL touches the b-tree. The remaining commits are SQLite-exactness fixes for foreign keys, triggers, window functions and JSON subtypes.

Also this week

  • kataan picked up intlrs 0.5.1 for Dangi and Umm al-Qura calendars and interval formatting. It also fixed regex lookbehind captures, per-iteration let, and yield/await in computed keys.
  • oxideav-huffyuv went through performance rounds. Package-merge length computation dropped from 577.7 µs to 20.7 µs, and paired-symbol lookup tables and a 64-bit bit writer were added. Interlaced fields now decode and encode in parallel on two workers (1.33–1.47× decode, 1.72–1.99× encode at 720p).
  • spotlib-rs, the Rust Spot messaging client, now runs on wasm32 and has a browser demo. purecrypto gained wasm support with modular TLS, and a demo site with an X.509 analyzer.
  • fullrust, a patched Rust toolchain whose standard library calls the Linux kernel directly instead of going through libc, gained getrandom and socket2 raw-syscall backends and a Docker image for building any project into a libc-free static binary.
  • teamclaude added session-aware routing, pooled upstream HTTP/1.1 connections, and a model blocklist (1.1.8, 1.1.9).

Next week

With libwallet in the browser, the next step is a web wallet that works for real users. The AV1 encoder moves from covering the spec toward tuning. nixvm keeps working on real workloads, now with a proper MMU and a terminal.