Learn/pure Rust alternativeMediarusty_vp9

Pure Rust Alternative for libvpx

rusty_vp9 is the Rust alternative to libvpx for VP9 inside remade_ffmpeg_rs. The decoder matches the official vectors. The encoder still spends more bits.

Signed by Tim Almond·
Painted film reel on a kitchen table at dusk, its ribbon a thread of warm light
What is the pure Rust alternative for libvpx?

rusty_vp9 is the pure Rust alternative for libvpx on VP9. It decodes and encodes inside remade_ffmpeg_rs with no C library. The decoder matches the official libvpx vectors. The encoder is still behind on bitrate.

Related reading

Builder field note

remade_ffmpeg_rs: FFmpeg-Class Media Pipeline in Pure Rust

APIs, composition, and MATA placement for remade_ffmpeg_rs: FFmpeg-Class Media Pipeline in Pure Rust live on the field note.

A pure Rust alternative for libvpx is the VP9 question. libvpx is the C codec for VP8 and VP9. rusty_vp9 is the house VP9 decoder and encoder. It has no C, no foreign-function interface, and no runtime dependencies. It lives in remade_ffmpeg_rs at crates/rusty_vp9, version 0.1.3 in that tree.

This page tells the truth about speed. A pure Rust alternative for libvpx can be conformant and still slower. Repeating pure Rust alternative for libvpx here keeps the search phrase on rusty_vp9, and a third pure Rust alternative for libvpx is the ownership claim beside the bitrate gap. The decoder is conformant and, on the crate README's own wording, slower than libvpx on one thread. The encoder runs, and it still spends more bits than libvpx at a matched point. A pure Rust alternative for libvpx is the safety and ownership claim. It is not a claim that every number already wins.

The Rust alternative to libvpx

VP9 shows up in web video, in archives, and in pipelines that already link libvpx because that was the build that worked. The alternative keeps the bitstream and drops that library.

What libvpx still is

libvpx is the C reference the official vectors come from. Shipping it means a native build and a memory-unsafe parser on every frame. A pure Rust alternative for libvpx is rusty_vp9 on that path. VP8 is not this crate. AV1 is a different page, the pure Rust alternative for libaom. The toolkit that hosts VP9 is the pure Rust alternative for FFmpeg, and the field note is remade_ffmpeg_rs.

What conformant means here

The README says the decoder is bit-exact against all 315 official libvpx conformance vectors, profiles 0 through 3, at 8, 10, and 12 bits, with AVX2 and NEON fast paths and a scalar twin. It also says the decoder is currently slower than single-thread libvpx. The encoder has rate-distortion search, CBR and two-pass rate control, and golden and alt-ref structures. The README says its pictures are checked pixel-exact against libvpx and FFmpeg, and that bitrate is still about 36 percent higher at a matched operating point. Those are the numbers to quote. Hiding the gap would make the alternative page a brochure. The H.264 sibling is the pure Rust alternative for x264.

The worker, then the frame size

Video pages are often the PHP app. The codec and the worker are different bugs, and a buyer needs both sentences.

What PHP2Shell reaches

PHP2Shell is CVE-2026-109618 and CVE-2026-109619 in the PHP interpreter. A failed or fatal request can leave memory for the next request on the same worker. rusty_vp9 does not patch PHP. Patched PHP is 8.5.12, 8.4.27, 8.3.36, and 8.2.35. A product that decodes VP9 inside a PHP worker still has the interpreter bug. A product on this crate, in a Rust service, does not run that interpreter. The house page for that choice is the pure Rust alternative for PHP. The cloud is mata.network.

The frame size that keeps coming

The cousin of CVE-2026-109618 on a video codec is a width, a height, or a tile that sizes a buffer from the bitstream. The README says the decoder is fuzzed so malformed input does not panic. That is the crate's claim, and it is the right shape: a bad file is an error, not the next request's memory. AI tools that sample frames for a model hit the same shape when the model window, not the file, picks the allocation. NIST SSDF is the procurement hook. The house essay is the importance of Remade with Rust.

Where a builder goes next

Use rusty_vp9 when the product needs VP9 without libvpx. Expect to quote both halves: the vectors match, and the encoder is still catching up on rate.

Notes already on Learn

The engine is remade_ffmpeg_rs. The facade search page is the FFmpeg alternative. Another video parser is the x264 alternative. The band is Media on Vision. The interpreter is the PHP alternative.

How to adopt the crate

Pin the crate through the remade_ffmpeg_rs workspace. Confirm libvpx is not also on the link line. Scan with Deputy before you place the graph. A pure Rust alternative for libvpx is real when the C codec is off the hot path, and when the bitrate gap is still written down next to the conformance claim.

Write the gap down every time you repeat the claim. A pure Rust alternative for libvpx matches 315 official vectors and, on the README's wording, decodes slower than libvpx on one thread. The encoder is pixel-checked and still spends about 36 percent more bits at a matched point. Those facts can sit in the same paragraph as the safety fact: the C library is gone. A pure Rust alternative for libvpx does not patch PHP2Shell. A video site that still renders through a PHP worker inherits the interpreter bug no matter how conformant the decoder is. Send that reader to the PHP alternative. Keep this URL for VP9. AV1 remains the libaom page, so the two bitstreams do not share one exaggerated lede. When the encoder closes the bitrate gap, update the README first and this page second, and leave the old sentence in git so the improvement is visible. +++

FAQ

Quick answers for builders evaluating this technology.

Is the decoder as fast as libvpx?

The crate README says the decoder is bit-exact on all 315 official libvpx conformance vectors and, today, slower than libvpx on a single thread. Conformant comes first. Speed is the open work.

Is the encoder finished?

It encodes, with rate control and reference frames, and the README says the output is checked pixel-exact against libvpx and FFmpeg. It also says the encoder still spends roughly 36 percent more bits at a matched point. That gap is stated here on purpose.

Where does rusty_vp9 live?

Inside remade_ffmpeg_rs, at crates/rusty_vp9, version 0.1.3 in that tree. It is not a separate public repository. AV1 and the FFmpeg facade have their own Learn pages.

How does VP9 meet PHP2Shell?

rusty_vp9 does not patch the PHP interpreter. A video page that still runs PHP inherits that worker bug. The cousin on VP9 is a frame size taken from the bitstream.

Where should a builder read the pure Rust alternative for libvpx?

Read the FFmpeg alternative for the toolkit, the x264 alternative for the other video parser, and the PHP alternative for the runtime the house does not ship.