Case study

Ruffle: a Rust reimplementation of Adobe Flash Player

Reimplements Adobe Flash Player in Rust so that SWF content, from ActionScript 1/2 (AVM1) to ActionScript 3 (AVM2), runs in a native desktop player or in browsers through WebAssembly, as a self-hosted script or a browser extension. Its contributor guide says behavior comes from observing Flash Player's output or from license-compatible sources such as Adobe's open avmplus code, and forbids decompiling Flash Player, Flash Professional or Animate. Regression tests run contributor-made SWFs and compare their trace output, and optionally rendered images, with captures from the official debug Flash Player.

Requirements and limitations

  • The README says Ruffle supports ActionScript 1, 2 and 3 pretty well but is not finished. At review, the website's compatibility page reported 99% of the AVM1 language and 82% of its API, and 90% of the AVM2 language and 82% of its API, and acknowledged graphical inaccuracies in AVM1 content. Release at review: v0.7.1, published 2026-10-07 and described as equivalent to v0.7.0 apart from extension-publishing fixes; nightly builds continue, and the reviewed master commit is 73 commits ahead.
  • Users supply the SWF files or the pages that embed them. Release assets cover Linux (x86_64, i686 and aarch64), macOS universal and Windows (x86 and x86_64) desktop builds, self-hosted web and browser-extension packages and a reproducible source archive; the README also points to Firefox and Chrome extensions, Flathub, npm and a separate Android project.
  • Building needs the latest stable Rust (the workspace uses the 2024 edition) and Java on PATH to compile the ActionScript 3 built-in classes; Linux builds need ALSA, udev, fontconfig, FreeType and OpenSSL development packages. Web builds also need the wasm32-unknown-unknown target, Node.js with npm 7+, wasm-bindgen-cli 0.2.127 and Binaryen. Bundled scanner and exporter tools bulk-parse SWFs and render PNG screenshots.
  • Contributors are asked to commit each test SWF with its source, and expected trace output and screenshots come from running the debug Flash Player; known failures can be marked in a test's test.toml. These tests check Ruffle's behavior on authored test files, not equivalence with Flash Player on all content; this review ran none of them.
  • Dual-licensed MIT or Apache-2.0 (GitHub reports NOASSERTION); LICENSE.md lists third-party dependency licenses, and the repository includes asc.jar from the Flex SDK to compile its ActionScript classes. SWF content keeps its own rights. The reviewed sources establish no REA or AI use.

About this entry

Type
Case study
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Targets
Game · Website

Sources reviewed

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Primary sources

  1. README.md GitHub · ruffle-rs/ruffle · Revision ea24ef7
  2. CONTRIBUTING.md#L30-L36 GitHub · ruffle-rs/ruffle · Revision ea24ef7
  3. CONTRIBUTING.md#L167-L196 GitHub · ruffle-rs/ruffle · Revision ea24ef7
  4. tests/README.md GitHub · ruffle-rs/ruffle · Revision ea24ef7
  5. web/README.md#L33-L82 GitHub · ruffle-rs/ruffle · Revision ea24ef7
  6. core/src/avm2/globals/README.md#L111-L127 GitHub · ruffle-rs/ruffle · Revision ea24ef7
  7. Cargo.toml GitHub · ruffle-rs/ruffle · Revision ea24ef7
  8. LICENSE.md GitHub · ruffle-rs/ruffle · Revision ea24ef7
  9. https://github.com/ruffle-rs/ruffle/releases/tag/v0.7.1
  10. https://ruffle.rs/compatibility