Play Flash games on your PS Vita.
A native Flash player for the PS Vita built on Ruffle — one VPK with a game library, an Explore tab to find and download games over Wi-Fi, touch controls, per-game button mapping and a pause menu.
Made by İbrahim Doğan
| Library | Explore |
|---|---|
![]() |
![]() |
| Downloading | In game |
![]() |
![]() |
| Pause menu | Button mapping |
![]() |
![]() |
| Controls | Display options |
![]() |
![]() |
Captured from RuffleVita's desktop development build, which runs the same code at the Vita's 960×544 resolution.
You need a PS Vita (or PS TV) running HENkaku / Ensō and VitaShell.
- Download
rufflevita.vpkfrom the latest release. - Copy it to your Vita and install it with VitaShell.
- Create the folder
ux0:data/FlashGames/and put your.swffiles in it. - Launch RuffleVita from the home screen.
ux0:data/FlashGames/
├── Age of War.swf ← single-file games go straight in here
├── Bubble Trouble.swf
└── Aqua Energizer/ ← subfolders are fine (up to two levels deep)
├── Aqua Energizer.swf
└── levels/ ← extra files a game loads stay next to it
├── level1.txt
└── ...
- The file name becomes the game's title in the library (underscores turn into spaces).
- Some games are split into several files, such as a loader plus the main SWF, level data or XML. Keep all of them in the same folder, as they came.
- Portal "loader" SWFs often try to download the real game from a website that no longer exists. Games can't go online, so RuffleVita looks for a file with the same name in the game's folder instead. If that file is missing, RuffleVita tells you which one.
- Added games while RuffleVita is open? Press SELECT in the library to refresh.
RuffleVita keeps its own data in ux0:data/rufflevita/: settings, per-game profiles, covers, game saves, the Explore catalog and log.txt.
Press R in the library to open Explore: about 6,000 Flash games from the Silvergames archive at files.silvergames.com/flash/. It needs Wi-Fi.
- The catalog downloads the first time you open Explore and is saved on the memory card; it refreshes once a week, or when you press SELECT.
- Press △ to search with the Vita's keyboard and ○ to clear the search. □ sorts by name, newest or smallest.
- Rest on a game for a moment and RuffleVita reads its first 16 KB to show its ActionScript version, stage size and frame rate before you download it. Only about one in six games still has cover art on Silvergames; the rest get a cover made from their name.
- ✕ downloads the game into
ux0:data/FlashGames/, where it shows up in the library. ✕ again cancels the download, and on a game you already have it starts playing. - Games over 20 MB are marked as large: some won't fit in the Vita's memory.
Version 1.0.0 was released as FlashVita. RuffleVita installs as a new app next to it. The first time it starts, it copies your settings, per-game profiles, game saves and covers from ux0:data/flashvita/, so you can pick up where you left off. After that you can delete the old FlashVita bubble and, once you're happy, the ux0:data/flashvita/ folder. Your games stay in ux0:data/FlashGames/.
Library: D-pad up/down (or the left stick) to browse, left/right to page, ✕ to play, △ for game settings, □ to sort (recent / A–Z), SELECT to refresh, L/R to switch between Library and Explore. You can also tap a game to select it and tap again to play.
Explore: the same, with △ to search, ○ to clear the search, □ to sort, ✕ to download (or cancel, or play) and SELECT to refresh the catalog.
In game (defaults, change them per game):
| Vita | Sends |
|---|---|
| D-pad / left stick | Arrow keys |
| ✕ / ○ / □ / △ | Space / X / Z / C |
| L / R | Shift / mouse click |
| START | Enter |
| SELECT | RuffleVita menu |
| Right stick | Mouse cursor |
| Front touch screen | Mouse (tap to click, drag to drag) |
| L + R + START | RuffleVita menu (always works, whatever the bindings) |
Open Game settings from the library (△) or the pause menu. There you can bind any button to any key, a mouse click or the menu. Sticks can be arrows, WASD, mouse cursor or off. You can also change how the game fits the screen, the render quality, the FPS counter, the cursor speed and the rear touchpad (as a trackpad). "Use these settings for new games" makes the current setup your default.
- Explore. Browse, search and download about 6,000 games from the Silvergames Flash archive, with each game's details read before you download it.
- Library with covers. Covers are pulled from artwork inside each SWF, replaced by a screenshot once you've played for a bit, or set manually from the pause menu. The library also shows SWF details (ActionScript version, stage size, frame rate, file size) and play history.
- Fast startup. Games are read and unpacked on a background thread while an animated loading screen shows progress. SWF analysis is cached between runs.
- Pause menu. Resume, change settings with a live preview, set a cover, restart, or quit to the library. Game saves are written to the memory card when you pause.
- Tuned for the Vita. Frame pacing that follows the game's own frame rate (no busy looping), CPU at 444 MHz and GPU at 222 MHz, and a GLES2 renderer optimised for vitaGL.
RuffleVita plays whatever Ruffle can play. Most ActionScript 1/2 games work well; ActionScript 3 support is good and improving. A few things aren't supported yet:
- Blend modes: Erase and Alpha, and the ones that need the background in a shader (overlay, difference, etc.), fall back to normal drawing.
- Filters: blur, glow and drop shadow aren't applied.
- Hardware features: Stage3D and embedded video.
A game runs slowly. The Vita's CPU is many times slower than a PC's, and Ruffle runs ActionScript without a JIT, so heavy ActionScript 3 games (physics games such as Happy Wheels) can drop to single-digit frame rates. Turn on the FPS counter in the game's settings to see where the time goes: tick is the game's own code, render and present are drawing.
A game stays on its loading screen. It is probably trying to download a file that isn't on your Vita. A message names the missing file; put it next to the game.
Something looks wrong or RuffleVita crashes. Please open an issue with the game's name and your ux0:data/rufflevita/log.txt.
Everything builds in Docker (VitaSDK, SDL2 with the vitaGL backend, vitaGL, the Rust armv7-sony-vita-newlibeabihf target):
./build.sh # → dist/rufflevita.vpkThe first build compiles all of Ruffle with full LTO and takes a while. Pushing a v* tag builds the VPK on GitHub Actions and attaches it to a release.
Desktop development build. The app also runs on macOS/Linux at 960×544, which is much faster to iterate on:
cd emulator
RUFFLEVITA_GAMES=/path/to/swfs cargo runOn the desktop build, the keyboard stands in for the Vita:
| Key | Vita |
|---|---|
| Arrow keys | D-pad |
| X or Enter | ✕ |
| C or Esc | ○ |
| Z | □ |
| V | △ |
| Q / E | L / R |
| Space | START |
| Tab | SELECT |
| Mouse | Front touch screen |
RUFFLEVITA_SCRIPT automates input for screenshots and recordings (wait, sleep, press, hold, tap, type (with _ for spaces), enter, shot, rec/stoprec, quit).
The LiveArea artwork is rendered by the app itself (RUFFLEVITA_RENDER_ASSETS=/tmp/art cargo run, then python3 tools/make_livearea.py /tmp/art). tools/vita_frame.py draws the Vita frame used in this README.
| Path | What |
|---|---|
emulator/src/main.rs |
App state machine and frame loop |
emulator/src/session.rs |
A running game: Ruffle player and input mapping |
emulator/src/screens/ |
Library, Explore, loading, pause menu, settings, key picker |
emulator/src/ui/ |
Batched 2D renderer (font atlas, SDF icons) and theme |
emulator/src/worker.rs |
Background thread: movie loading, SWF analysis, covers |
emulator/src/catalog.rs |
The Explore catalog: listing parser, search, caches |
emulator/src/fetcher.rs, net.rs |
Network threads and a small HTTP client for Explore |
emulator/src/swfinfo.rs |
Fast SWF header parsing and cover extraction |
emulator/ruffle_render_glow/ |
GLES2 Ruffle renderer tuned for vitaGL |
emulator/patches/ruffle/ |
Ruffle's core with performance and memory fixes for the Vita |
emulator/patches/jpeg-decoder/ |
Single-threaded JPEG decoding on the Vita |
- İbrahim Doğan: RuffleVita (app, UI, input mapping, library, renderer work)
- Ruffle: the Flash Player emulator at the core
- Fancy2209/ruffle4consoles: the original Ruffle-on-Vita glue this project started from
- Rinnegatamante: vitaGL and vitaShaRK
- Northfear/SDL: SDL2 with the vitaGL backend
- vita-rust: Rust toolchain for the Vita
- Lilita One by Juan Montoreano and Nunito by Vernon Adams, Cyreal and Jacques Le Bailly: UI fonts, with Inter for symbols (all SIL Open Font License)
- Silvergames: hosts the Flash archive Explore browses
Flash games shown in the media and offered in Explore belong to their respective authors; Explore downloads them from Silvergames' public archive, one at a time, the way a browser would. PlayStation and PS Vita are trademarks of Sony Interactive Entertainment. RuffleVita is an independent project and is not affiliated with Sony, the Ruffle project or Silvergames.







