
0.6.0 / 07-09-2026
Performance
Features
Ruffle
Accuracy
Ruffle is a Flash Player emulator written in Rust. Ruffle runs natively on all modern operating systems as a standalone application, and on all modern browsers through the use of WebAssembly and has extensive content compatibility in ActionScript; the language that powers interactivity in games and applications made with Flash.
Users or website owners may install the web version of Ruffle and existing flash content will "just work", with no extra configuration required. It will also detect all existing Flash content and this is an entirely open source project maintained by volunteers.
--
Installing on a website you own
Use an official Ruffle CDN, or download the 'standalone' version of Ruffle from our downloads, and include the following JavaScript on any page with Flash content:
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
OR
<script src="path/to/ruffle/ruffle.js"></script>
If you're using a local installation, you'll need to make sure your web server is configured to serve .wasm files correctly, so please visit our wiki if you need help with that.
For advanced usage, consult their documentation for JavaScript API and installation options.
Downloading
Ruffle is directly available as an extension in the Chrome Web Store and on addons.mozilla.org:
- Safari: 14+ is required...
Most Recent Changes
--0.6.0--
chore: Bump ip-address from 10.2.0 to 10.4.0 in /web by @dependabot[bot] in #24365
chore: Bump fast-uri from 3.1.4 to 3.1.5 in /web by @dependabot[bot] in #24368
chore: Bump undici from 6.27.0 to 6.28.0 in /web by @dependabot[bot] in #24369
chore: Bump postcss from 8.5.22 to 8.5.25 in /web by @dependabot[bot] in #24367
chore: Bump the npm-minor group across 1 directory with 13 updates by @dependabot[bot] in #24370
video: Add support for NV12 pixel format by @X1nto in #24335
core: Migrate ruffle_macros to syn 3 by @torokati44 in #24378
chore: Run cargo +nightly fmt --all by @danielhjacobs in #24376
avm2: Implement some of the
flash.automationclasses by @ChrisCPI in #24390avm2: Reimplement Matrix3D.recompose() as a native method by @kjarosh in #24404
avm2: Reimplement Matrix3D.decompose() as a native method by @kjarosh in #24405
avm2: Implement TextBlock.releaseLines and TextBlock.lastLine by @Lord-McSweeney in #24399
tests: Add coverage for a
TextBlock.releaseLinesedge case by @Lord-McSweeney in #24416avm2: Implement Matrix3D.append()/prepend() as native by @kjarosh in #24406
core: Make
DisplayObject::ptr_eqtake any TDisplayObject parameter by @Lord-McSweeney in #24417avm2: Implement Matrix3D.copyColumn*() as native methods by @kjarosh in #24407
avm2: Make Matrix3D.determinant/invert() native by @kjarosh in #24408
avm2: Implement Matrix3D.position as a native property by @kjarosh in #24409
avm2: Implement Matrix3D.transpose() as native method by @kjarosh in #24410
avm2: Implement Matrix3D.copyRow*() as native methods by @kjarosh in #24411
chore: Bump js-yaml from 4.3.0 to 4.3.1 in /web by @dependabot[bot] in #24426
chore: Bump
lruandspindependencies by @torokati44 in #24435chore: Bump the cargo-minor group across 1 directory with 3 updates by @dependabot[bot] in #24423
ci: Sync bumped package versions into package-lock.json upon release by @torokati44 in #24379
avm2: Make Matrix3D.transformVector() native by @kjarosh in #24412
avm2: Make Matrix3D.appendRotation() a native method by @kjarosh in #24413
avm2: Make Matrix3D.identity()/appendTranslation() native by @kjarosh in #24414
avm2: Implement Matrix3D.copyRawDataFrom() properly by @kjarosh in #24437
Fte/textline composition by @doombubbles in #24371
render/swf: Allow Rgb15 format for
DefineBitsLossless2by @ChrisCPI in #24439avm2: Implement Matrix3D.copyRawDataTo() properly by @kjarosh in #24443
avm2: Improve the behavior of
TextBlock.releaseLinesby @Lord-McSweeney in #24425core: Make
Matrix3D.determinantmore accurate by @kjarosh in #24454core: Move
TDisplayObject::instantiateonto each enum variant that needs it by @Lord-McSweeney in #24446avm1: Improve behavior of
SoundwhenloadSound()has been called by @ChrisCPI in #23975avm2: Improve FP's buggy behavior in Vector3d.nearEquals() by @kjarosh in #24463
avm2: Improve accuracy of Number to String coercion by @kjarosh in #24459
desktop: Implement FreeType device font renderer by @kjarosh in #24418
avm2: Make remaining Matrix3D methods native and clean up code by @kjarosh in #24465
avm2: Use restargs instead of passing arguments as an array in Date methods by @Lord-McSweeney in #24466
avm2: Implement Matrix3D.interpolate and interpolateTo by @SulivanM in #24450
desktop: Gate FreeType behind a feature by @kjarosh in #24470
avm2: Use f64 sign methods in f64_to_string by @kjarosh in #24471
debug_ui/avm2: Move Class information into its own window by @Lord-McSweeney in #24456
tests: Add FreeType variants to more tests by @kjarosh in #24479
avm2: Add a method to ParametersExt to allow slicing it by @Lord-McSweeney in #24477
core: Split font.rs into multiple files by @kjarosh in #24482
swf: Support incorrect uncompressed lengths in LZMA SWFs by @kjarosh in #24487
avm1: Dynamically resolve builtin classes (1/N: preliminaries) by @moulins in #24327
video: Reduce allocations/copies when decoding frames by @moulins in #24135
avm2: Include attribute and element name in XML parser error 1104 by @evilpie in #24352
chore: Resolve clippy beta lints by @torokati44 in #24502
avm2: Refactor DisplayObjectContainer.stopAllMovieClips implementation by @Lord-McSweeney in #24506
desktop: Remove the wgpu-report-to-tracy-plot feature by @Dinnerbone in #24474
avm1: Dynamically resolve builtin classes (2/N:
Function,BitmapFilterss, display objects) by @moulins in #24500chore: Update translations from Crowdin by @kjarosh in #24517
avm2: In Sound constructor, call Sound.load from Actionscript by @Lord-McSweeney in #24512
avm1: Track activations in Tracy with
tracy_avmfeature by @Dinnerbone in #24511Update webbrowser to 1.2.4 due to RUSTSEC-2026-0257 by @Dinnerbone in #24488
core: Blit copyPixels rows through slices by @1bugproof in #24490
avm2: Use
ParametersExtfor ruffle stub methods by @Lord-McSweeney in #24523core: Don't degrade alpha for opaque alphaBitmapData pixels in copyPixels by @1bugproof in #24492
core: Replace the "deterministic" feature with LocaleBackend by @kjarosh in #24478
chore: Update translations from Crowdin by @kjarosh in #24528
chore: Drop clippy::float_cmp lint attributes by @kjarosh in #24526
tests: Expand test coverage for AVM2 primitive keys by @Lord-McSweeney in #24527
avm2: Match avmplus's index parsing logic more closely by @Lord-McSweeney in #24529
swf/avm2: Add
read_vec_with_leninternal helper by @moulins in #24531avm2: Make native methods take
FunctionArgsinstead of a slice by @Lord-McSweeney in #24534chore: Update translations from Crowdin by @kjarosh in #24538
Update to wgpu 30.0.1, egui 0.36.1, wasm-bindgen 0.2.127 by @Dinnerbone in #24520
avm2: Implement TextLine.getAtomIndexAtCharIndex by @doombubbles in #24497
desktop: Submit frame images to Tracy by @Dinnerbone in #18904
core: Make it possible to lay out text during render by @kjarosh in #24539
desktop: Profile wgpu into Tracy by @Dinnerbone in #24510
tests: Add test for caching callee object of AVM2 instance init method by @Lord-McSweeney in #24554
avm2: Have
MovieClip.addFrameScript()throw error 2001 for an odd number of args by @ChrisCPI in #24557wgpu: Pass UV(T) to shaders, rather than always calculating via a uniform by @Dinnerbone in #24555
desktop: Fix crashes resulting from handling egui texture deltas by @kjarosh in #24559
chore: Revert lazy blends, again by @Dinnerbone in #24564
render: Implement bitmap region rendering for wgpu by @kjarosh in #24525
avm2: Implement
flash.ui.Mouse.cursorby @ChrisCPI in #24578chore: Bump mocha to 12 by @torokati44 in #24584
build(deps-dev): bump replace-in-file from 8.4.0 to 9.0.0 in /web by @dependabot[bot] in #24422
avm2: Implement "unload" event on LoaderInfo by @kjarosh in #24579
avm1: Implement MovieClip.hitArea (part of #21569) by @FIM43-Redeye in #24227
avm2: Support default superclass object for callstatic op by @Lord-McSweeney in #24558
chore: Bump WebdriverIO package family to 9.31 by @torokati44 in #24583
build(deps): bump the npm-minor group across 1 directory with 14 updates by @dependabot[bot] in #24589
docs: Update CONTRIBUTING.md and add AI tool use policy by @kjarosh in #24571
chore: Update translations from Crowdin by @kjarosh in #24592
build(deps-dev): bump fast-uri from 3.1.5 to 3.1.7 in /web by @dependabot[bot] in #24593
chore: Bump gc-arena to 0.7.0, hashbrown to 0.17.1 by @torokati44 in #24588
chore: Update translations from Crowdin by @kjarosh in #24597
avm2: Expand the stubs for
Mouse.registerCursor()/unregisterCursor()by @ChrisCPI in #24586debug_ui: Add "Preview" tab to Display Objects by @kjarosh in #24522
build(deps): bump the cargo-minor group across 1 directory with 9 updates by @dependabot[bot] in #24598
chore: Run
npm audit fixin web/ by @torokati44 in #24603desktop: Implement font atlases and use them for FreeType by @kjarosh in #24568
render: Fix panic when calling
Context3D.drawTriangles()with no bound texture by @ChrisCPI in #24545core: Implement glyph cache eviction for font renderers by @kjarosh in #24608
web: Use font atlases in CanvasFontRenderer by @kjarosh in #24609
web: Allow variable bitmap glyph height by @kjarosh in #24610
wgpu: Mark profiler end-of-frame, fixes #24605 by @Dinnerbone in #24612
tests: Add avm2/bitmapdata_draw_cab_quality test by @kjarosh in #24613
core: Move font color to EvalParameters by @kjarosh in #24614
core: Store LayoutContext on LayoutBuilder by @kjarosh in #24616
chore: Update rascal to 0.3.5 by @Dinnerbone in #24623
tests: Add test coverage for the XML special case in indexOf methods by @Lord-McSweeney in #24618
--0.5.0--
chore: Bump actions/setup-node from 6 to 7 by @dependabot[bot] in #24256
chore: Bump actions/setup-python from 6 to 7 by @dependabot[bot] in #24255
chore: Bump KSXGitHub/github-actions-deploy-aur from 4.1.3 to 4.2.0 by @dependabot[bot] in #24257
chore: Bump fast-uri from 3.1.2 to 3.1.4 in /web by @dependabot[bot] in #24271
chore: Bump tar from 7.5.16 to 7.5.21 in /web by @dependabot[bot] in #24273
chore: Bump shell-quote from 1.8.4 to 1.10.0 in /web by @dependabot[bot] in #24270
chore: Bump svgo from 4.0.1 to 4.0.2 in /web by @dependabot[bot] in #24274
chore: Bump fast-xml-parser from 5.9.3 to 5.10.1 in /web by @dependabot[bot] in #24272
chore: Bump webdriverio and some @wdio packages to 9.30 in web/ by @torokati44 in #24276
chore: Run
npm audit fixin web/ by @torokati44 in #24277chore: Bump the npm-minor group across 1 directory with 10 updates by @dependabot[bot] in #24278
chore: Bump the cargo-minor group with 13 updates by @dependabot[bot] in #24260
avm2: Getters should always be listed after slots in JSON.stringify by @Lord-McSweeney in #24249
tests: Add coverage for calling methods on duplicate ClassObjects by @Lord-McSweeney in #24288
tests: Add assertions for current mouse cursor by @ChrisCPI in #24284
avm1: Serialize top-level objects with class definitions as appropriate by @danielhjacobs in #24155
avm1: Recursively serialize constructed objects as typed objects by @danielhjacobs in #24161
avm2: Correctly implement
DisplayObject.getRectby @Lord-McSweeney in #24253avm2: Clean up some FTE logic, add validation by @Lord-McSweeney in #24304
avm2: Handle shrinking underlying content in TextBlock.createTextLine by @evilpie in #24303
avm2: Handle null
elementFormatcorrectly when creating text line by @Lord-McSweeney in #24307tests: Expand the
avm2/avm1_roottest by @ChrisCPI in #24164video/webcodecs: Pass in whole Access Units to VideoDecoder by @torokati44 in #24098
chore: Bump the cargo-minor group with 4 updates by @dependabot[bot] in #24318
tests: Add failing test for AVM1 using attachMovie in a frame before ExportAssets by @evilpie in #24292
Polyfilled plugin properties remain configurable by @mincerafter42 in #24312
avm2: Clear parent when deleting element/attribute from XMLList by @evilpie in #24324
avm2: Implement XML.children using get_property_local by @evilpie in #24330
swf: Add dedicated error types
Avm1ParseErrorandUnexpectedEofby @moulins in #24334avm2: TLF improvements, implement TextBlock.recreateTextLine by @Lord-McSweeney in #24313
avm2: Implement XML.attribute(s) using get_property_local by @evilpie in #24340
avm2: Store content of
ContentElementsubclasses as native data by @Lord-McSweeney in #24338avm2: Implement more of XMLList using get_property_local by @evilpie in #24343
avm2: Only set
TextBlock.firstLinewhen creating the first line by @Lord-McSweeney in #24346avm2: Create a FormatSpans for the text block's content element in createTextLine by @Lord-McSweeney in #24351
swf: Return
AbcParseErroron error for AVM2 bytecode parsing. by @moulins in #24357avm2: Have
AVM1Movie.call/addCallbackthrow error 2014 by @ChrisCPI in #24358avm2: Implement several of the AV classes by @ChrisCPI in #24350
avm2: Emit
native_table.rsin a deterministic order by @bmwiedemann in #24360avm2: Partially implement the rest of
flash.trace.Traceby @ChrisCPI in #24344avm2: Minor FTE improvements by @Lord-McSweeney in #24354
--0.4.1--
ci: Fix version4 to respect extension manifest limit
--0.4.0--
Please refer to here.
--0.3.0--
Please refer to here.
--
Please refer to here for their almost daily consolidated update logs.
None to add for the moment...