Ruffle is a free, open-source Flash Player emulator that runs SWF games, animations, and interactive applications. It provides native players for Windows, macOS, Linux, and Android, alongside browser extensions and a player that websites can embed. Ruffle recreates Flash execution and rendering.
SWF sources
The desktop player opens a SWF through its file chooser or accepts a file path or URL through the command line. Advanced Open adds controls for content that needs more than a location. Users can enter movie parameters as name-and-value pairs, which Ruffle passes to the movie as Flash variables. A custom base URL determines where the movie looks for relative resources.
The recent-files menu reopens previous locations. Bookmarks keep a name and content location, and the bookmark manager lets users change either value or remove the entry. A bookmark points back to the content; it does not create another copy of the movie.
Playback controls
Ruffle can suspend a running movie and resume it later. While playback pauses, Step Once advances a single frame and suspends the movie again. The volume dialog combines a slider with a mute checkbox, so users can adjust or silence playback without changing the movie itself.
Interactive controls
Interactive content receives keyboard and pointer input. Desktop command-line options can map gamepad buttons to keyboard keys, translating a controller press into a keystroke for the movie. The SWF still determines what that key does, such as moving a character or activating an on-screen control.
How the stage fits the window
A Flash movie has its own stage dimensions, which may differ from the player window. Ruffle offers several ways to handle that difference:
| Scale mode | Effect on the picture |
|---|---|
| Show All | Fits the whole stage while preserving its proportions. |
| No Border | Fills the window while preserving proportions and cropping excess content. |
| Exact Fit | Stretches the stage to the window, which can change its proportions. |
| No Scale | Keeps the original stage size, so a smaller window can crop it. |
The movie can request its own scale mode. The desktop player’s force-scaling control overrides that choice with the user’s selection. Letterboxing controls borders around the stage, while fullscreen expands the player beyond its normal window.
SharedObjects storage
Flash content can use SharedObjects to keep preferences or game progress. The desktop player’s disk backend writes that data into local SOL files and reads it when the content requests it again. Users can choose a different save directory through the command line. The memory backend keeps those values in memory instead of writing persistent files.
Ruffle Bundles
Ruffle Bundles combine a content location and player settings with optional local assets. Export Bundle lets users name the bundle and select which local files it includes. When content has a root directory, the export dialog lists files from that directory for selection. The resulting RUF file preserves the launch configuration and the local resources that the user includes.
Flash within a browser page
The extension detects legacy Flash elements on a page and replaces them with Ruffle players. It can also upgrade an older Ruffle player that the website already provides. The browser version executes through WebAssembly, keeping the movie within the page.
Browser autoplay rules can prevent immediate audio playback. Ruffle may wait for user interaction before starting playback with sound, rather than letting visuals run ahead of the audio. This behavior differs from simply muting a movie that already runs.
Website controls through JavaScript
Website authors can let Ruffle replace existing Flash object and embed elements, or create a player element directly through its JavaScript API. The load method accepts a SWF URL or movie bytes and replaces any movie that the player currently holds. Configuration can apply across the page, to one player, or to an individual load operation.
The API exposes movie dimensions, frame rate, and frame count after metadata becomes available. A website can connect its own controls to volume, fullscreen, suspend, and resume operations. Suspension stops frame processing, scripts, and sound until the page resumes the player. Browser permissions still govern whether the player can enter fullscreen.
The Android player
The native Android app accepts SWF files through a file picker or an entered URL. Touch and mouse input operate movie controls, while a physical keyboard supplies keystrokes. Android support remains at an early stage.
Flash compatibility
Compatibility depends on both ActionScript execution and the Flash APIs that a movie calls. Ruffle implements the virtual machines for ActionScript 1 and 2 separately from ActionScript 3. Neither API set covers all Flash behavior, so individual movies can show graphical differences or encounter missing functionality.






