2019-06-27 01:14:52 +00:00
< p align = "center" >
2024-01-08 05:39:38 +00:00
< a href = "https://ruffle.rs" > < img alt = "Ruffle" src = "https://ruffle.rs/logo.svg" / > < / a >
2019-06-27 01:14:52 +00:00
< / p >
< p align = "center" >
2023-11-20 08:47:01 +00:00
< a href = "https://github.com/ruffle-rs/ruffle/actions" > < img alt = "Rust Build Status" src = "https://img.shields.io/github/actions/workflow/status/ruffle-rs/ruffle/test_rust.yml?label=Rust%20Build&logo=github&branch=master" / > < / a >
< a href = "https://github.com/ruffle-rs/ruffle/actions/workflows/test_web.yml" > < img alt = "Web Build Status" src = "https://img.shields.io/github/actions/workflow/status/ruffle-rs/ruffle/test_web.yml?label=Web%20Build&logo=github&branch=master" / > < / a >
< a href = "https://www.npmjs.com/package/@ruffle-rs/ruffle" > < img alt = "Ruffle npm" src = "https://img.shields.io/npm/v/@ruffle-rs/ruffle?color=007acc&logo=npm" / > < / a >
< a href = "https://aur.archlinux.org/packages/ruffle-nightly-bin" > < img alt = "Ruffle AUR" src = "https://img.shields.io/aur/version/ruffle-nightly-bin?logo=archlinux" / > < / a >
< a href = "https://discord.gg/ruffle" > < img alt = "Ruffle Discord" src = "https://img.shields.io/discord/610531541889581066?label=&color=7389d8&labelColor=6a7ec2&logoColor=ffffff&logo=discord" / > < / a >
< a href = "https://crowdin.com/project/ruffle" > < img alt = "Ruffle translations" src = "https://badges.crowdin.net/ruffle/localized.svg" / > < / a >
2022-01-28 15:00:10 +00:00
< br / >
2020-10-10 06:29:29 +00:00
< strong > < a href = "https://ruffle.rs" > website< / a > | < a href = "https://ruffle.rs/demo" > demo< / a > | < a href = "https://github.com/ruffle-rs/ruffle/releases" > nightly builds< / a > | < a href = "https://github.com/ruffle-rs/ruffle/wiki" > wiki< / a > < / strong >
2019-06-27 01:14:52 +00:00
< / p >
2019-04-25 17:52:22 +00:00
2019-08-15 12:57:26 +00:00
# Ruffle
Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both the desktop and the web using WebAssembly.
2023-06-12 00:38:34 +00:00
## Table of Contents
2024-02-07 18:49:01 +00:00
* [Project status ](#project-status )
2023-06-12 00:38:34 +00:00
* [Using Ruffle ](#using-ruffle )
* [Building from source ](#building-from-source )
2024-04-02 14:08:43 +00:00
* [Prerequisites ](#prerequisites )
* [Linux prerequisites ](#linux-prerequisites )
2023-06-12 00:38:34 +00:00
* [Desktop ](#desktop )
2024-04-02 14:08:43 +00:00
* [Build ](#build )
* [macOS ](#macos )
2023-06-12 00:38:34 +00:00
* [Web or Extension ](#web-or-extension )
2024-04-02 14:08:43 +00:00
* [Android ](#android )
2023-06-12 00:38:34 +00:00
* [Scanner ](#scanner )
* [Exporter ](#exporter )
* [Structure ](#structure )
* [Sponsors ](#sponsors )
* [License ](#license )
* [Contributing ](#contributing )
2019-08-15 12:57:26 +00:00
## Project status
2023-11-13 20:22:59 +00:00
Ruffle supports ActionScript 1, 2 and 3 pretty well, but it's still not finished by any means. Please report any issues in the [Issue Tracker ](https://github.com/ruffle-rs/ruffle/issues ).
2019-04-25 17:52:22 +00:00
2020-12-29 11:10:12 +00:00
## Using Ruffle
2020-02-17 23:34:46 +00:00
2024-04-02 14:08:43 +00:00
The easiest way to try out Ruffle is to visit the [web demo page ](https://ruffle.rs/demo/ ), then click the "Select File" button to load a SWF file of your choice.
2020-12-29 11:10:12 +00:00
2024-04-02 14:08:43 +00:00
[Nightly builds ](https://ruffle.rs/downloads#nightly-releases ) of Ruffle are available for desktop and web platforms.
2020-02-17 23:34:46 +00:00
2020-12-29 11:10:12 +00:00
For more detailed instructions, see our [wiki page ](https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle ).
2019-09-14 08:13:18 +00:00
## Building from source
2020-02-17 23:10:31 +00:00
2024-04-02 14:08:43 +00:00
### Prerequisites
2019-05-16 17:10:32 +00:00
2024-04-02 14:08:43 +00:00
* Latest stable channel of [Rust ](https://www.rust-lang.org/tools/install )
* Java, available on your PATH as `java` (required for building the library containing the builtin Flash classes for ActionScript 3)
2022-06-15 19:00:17 +00:00
2024-04-02 14:08:43 +00:00
### Linux prerequisites
2019-05-16 17:10:32 +00:00
2024-04-02 14:08:43 +00:00
The following are typical dependencies for Linux:
2022-10-18 04:38:55 +00:00
2022-10-25 17:04:59 +00:00
* libasound2-dev
* libxcb-shape0-dev
* libxcb-xfixes0-dev
2022-10-18 04:38:55 +00:00
* libgtk-3-dev
2024-01-01 20:16:27 +00:00
* libudev-dev
2022-10-25 17:04:59 +00:00
* libxcb-xinput-dev
* libxcb-xkb-dev
* libxcb-cursor-dev
* default-jre-headless
2022-10-18 04:38:55 +00:00
* cmake
* g++
2024-04-02 14:08:43 +00:00
### Desktop
#### Build
2022-03-25 09:22:54 +00:00
2022-06-22 05:45:22 +00:00
Use the following command to build and run the desktop app:
`cargo run --release --package=ruffle_desktop`
To run a specific SWF file, pass the SWF path as an argument:
`cargo run --release --package=ruffle_desktop -- test.swf`
To build in debug mode, simply omit `--release` from the command.
2019-05-16 17:10:32 +00:00
2024-04-02 14:08:43 +00:00
#### macOS
2022-04-26 04:24:42 +00:00
2024-04-02 14:08:43 +00:00
Ruffle desktop can be built from our [Homebrew Tap ](https://github.com/ruffle-rs/homebrew-ruffle/ ):
2022-04-26 04:24:42 +00:00
2022-06-22 05:45:22 +00:00
`brew install --HEAD ruffle-rs/ruffle/ruffle`
2022-04-26 04:24:42 +00:00
_Note: because it is HEAD-only, you'll need to run `brew upgrade --fetch-HEAD ruffle` each time you want to update._
2020-05-26 13:57:28 +00:00
### Web or Extension
2020-07-18 03:34:44 +00:00
2020-05-26 13:57:28 +00:00
Follow [the instructions in the web directory ](web/README.md#building-from-source ) for building
either the web or browser extension version of Ruffle.
2020-05-10 10:29:05 +00:00
2023-12-12 19:21:20 +00:00
This project is tested with BrowserStack.
2024-04-02 14:08:43 +00:00
### Android
Follow the [instructions ](https://github.com/ruffle-rs/ruffle-android/blob/main/CONTRIBUTING.md#building-from-source ) in the `ruffle-android` project for building the Android application of Ruffle.
2019-10-11 14:19:18 +00:00
### Scanner
If you have a collection of "real world" SWFs to test against, the scanner may be used to benchmark
ruffle's parsing capabilities. Provided with a folder and an output filename, it will attempt to read
2024-04-02 14:08:43 +00:00
all of the Flash files and report on the success of such a task.
2019-10-11 14:19:18 +00:00
2024-05-06 09:20:38 +00:00
`cargo run --release --package=ruffle_scanner -- scan folder/with/swfs/ results.csv`
2019-10-11 14:19:18 +00:00
2020-05-05 13:27:10 +00:00
### Exporter
2024-04-02 14:08:43 +00:00
If you have a SWF file and would like to capture an image of it, you may use the exporter tool.
2020-05-05 13:27:10 +00:00
This currently requires hardware acceleration, but can be run headless (with no window).
2022-01-30 17:23:08 +00:00
- `cargo run --release --package=exporter -- path/to/file.swf`
- `cargo run --release --package=exporter -- path/to/file.swf path/to/screenshots --frames 5`
2020-05-05 13:27:10 +00:00
2019-04-28 06:26:04 +00:00
## Structure
2019-04-25 17:52:22 +00:00
2024-04-02 14:08:43 +00:00
- `core` - core emulator and common code
- `swf` - SWF and ActionScript parser
- `desktop` - desktop client (uses `wgpu-rs` )
- `web` - web client and browser extension (uses `wasm-bindgen` )
- `render` - various rendering backends for both desktop and web
- `video` - video decoding backends
- `flv` - Flash Video decoder
- `wstr` - a Flash-compatible implementation of strings
- `scanner` - a utility to bulk parse SWF files
- `exporter` - a utility to generate PNG screenshots of a SWF file
2019-04-25 17:52:22 +00:00
2019-12-11 01:59:15 +00:00
## Sponsors
2020-11-22 00:57:56 +00:00
You can support the development of Ruffle via [GitHub Sponsors ](https://github.com/sponsors/ruffle-rs ). Your sponsorship will help to ensure the accessibility of Flash content for the future. Thank you!
2019-12-11 01:59:15 +00:00
Sincere thanks to the diamond level sponsors of Ruffle:
< p align = "center" >
2024-07-02 21:58:34 +00:00
< a href = "https://www.newgrounds.com" > < img src = "https://ruffle.rs/sponsors/newgrounds.png" alt = "Newgrounds.com" > < / a >
< a href = "https://www.cpmstar.com" > < img src = "https://ruffle.rs/sponsors/cpmstar.png" alt = "CPMStar" > < / a >
< a href = "https://deepnight.net" > < img src = "https://ruffle.rs/sponsors/deepnight.png" alt = "Sébastien Bénard" > < / a >
< a href = "https://www.crazygames.com" > < img src = "https://ruffle.rs/sponsors/crazygames.png" alt = "Crazy Games" > < / a >
< a href = "https://www.coolmathgames.com" > < img src = "https://ruffle.rs/sponsors/coolmathgames.png" alt = "Cool Math Games" > < / a >
< a href = "https://www.nytimes.com/" > < img src = "https://ruffle.rs/sponsors/nyt.png" alt = "The New York Times" > < / a >
< a href = "https://www.armorgames.com/" > < img src = "https://ruffle.rs/sponsors/armorgames.png" alt = "Armor Games" > < / a >
< a href = "https://www.ondaeduca.com/" > < img src = "https://ruffle.rs/sponsors/ondaeduca.png" alt = "Onda Educa" > < / a >
< a href = "https://www.twoplayergames.org/" > < img src = "https://ruffle.rs/sponsors/twoplayergames.png" alt = "TwoPlayerGames.org" > < / a >
< a href = "https://www.wowgame.jp/" > < img src = "https://ruffle.rs/sponsors/wowgame.png" alt = "wowgame.jp" > < / a >
< a href = "http://kupogames.com/" > < img src = "https://ruffle.rs/sponsors/mattroszak.png" alt = "Matt Roszak" > < / a >
< a href = "https://www.dolldivine.com/" > < img src = "https://ruffle.rs/sponsors/dolldivine.png" alt = "Doll Divine" > < / a >
< a href = "https://movavi.com/" > < img src = "https://ruffle.rs/sponsors/movavi.svg" alt = "Movavi" > < / a >
< a href = "https://www.kongregate.com/" > < img src = "https://ruffle.rs/sponsors/kongregate.svg" alt = "Kongregate" > < / a >
< a href = "https://www.bubbleshooter.net/" > < img src = "https://ruffle.rs/sponsors/bubble-shooter.png" alt = "Bubble Shooter" > < / a >
< a href = "https://www.neopets.com/" > < img src = "https://ruffle.rs/sponsors/neopets.png" alt = "Neopets" > < / a >
2020-05-26 13:57:28 +00:00
< / p >
2019-12-11 01:59:15 +00:00
2019-04-28 06:26:04 +00:00
## License
2019-04-25 17:52:22 +00:00
2021-02-07 01:31:06 +00:00
Ruffle is licensed under either of
2020-07-18 03:34:44 +00:00
2021-02-07 01:31:06 +00:00
- Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (http://opensource.org/licenses/MIT)
2021-01-04 20:25:20 +00:00
at your option.
2019-04-25 17:52:22 +00:00
2021-02-07 01:31:06 +00:00
Ruffle depends on third-party libraries under compatible licenses. See [LICENSE.md ](LICENSE.md ) for full information.
2023-06-12 00:38:34 +00:00
### Contributing
2019-04-25 17:52:22 +00:00
2021-02-07 01:31:06 +00:00
Ruffle welcomes contribution from everyone. See [CONTRIBUTING.md ](CONTRIBUTING.md ) for help getting started.
2020-07-18 03:43:22 +00:00
2019-04-28 06:26:04 +00:00
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be dual licensed as above, without any
2019-05-01 16:36:43 +00:00
additional terms or conditions.
2020-07-18 03:43:22 +00:00
The entire Ruffle community, including the chat room and GitHub project, is expected to abide by the [Code of Conduct ](https://www.rust-lang.org/policies/code-of-conduct ) that the Rust project itself follows.