Lightweight Linux for the Anbernic RG DS and RG DS Plus.
A pixel-art menu, two DS emulators and a system built around your handheld's two screens and lid. Add your games, choose an emulator and start playing.
Website · Download · Install · What's new · Videos · Known issues · Move your saves · Discord
Warning
Beta 0.5.2.2. An update over Wi-Fi on top of 0.5.0: install 0.5.0 from its card image, then update in Settings › System › Update. Read the known issues under Status before installing. If something goes wrong, docs/FIRST-BOOT.md explains which logs to include in a report.
BananaOS is a complete Linux system built specifically for the RG DS and RG DS Plus. It uses Buildroot, a Linux kernel with ROCKNIX hardware support, BusyBox init and a dedicated interface for both screens. The system image is read-only; games, saves and settings live on a separate exFAT partition.
It starts directly in the menu, releases display, input and audio resources when launching a game, and pauses play when you close the lid. Updates come over Wi-Fi and install to a second system slot, so the previous version remains one restart away. The menu speaks English, Simplified Chinese (简体中文, translated by Majirefy) and Russian (Русский, translated by Vladislav (LVD) and Ruslan (Nestrahoff)). Italian (Italiano, translated by Olympicus) and Finnish (Suomi, translated by HANHITSI) arrive in 0.5.3.
9.8 s from the power button to the menu (12.0 s in 0.4.2), timed with a stopwatch by a QA tester (which handheld was not recorded); BananaDS's fast-forward throughput at 2x on an RG DS Plus, average of 9 games, against 0.4.2. From the kernel starting to the menu, 0.4.2 measured 3.9 s on the RG DS and 5.9 s on the RG DS Plus.
![]() Retro Game Corps: Custom Firmware on the Anbernic RG DS Plus. BananaOS from 15:48. |
![]() forthenext: ANBERNIC RG DS Plus, BananaOS and your games tested. |
![]() Trenton Faykus: I tested 4 firmwares on RG DS Plus. here's why BananaOS wins. |
Thank you all! Made a video about BananaOS? Tell us on Discord.
The full list: the 0.5.2.2 release notes. It brings together 0.5.1 and 0.5.2, which went to the closed beta first. Over Wi-Fi only: there is no new card image.
Important
Shut down and Restart have moved. They are no longer in Settings › System. Press START on the home screen, then Y for Power: Sleep, Restart and Shut down (press A twice). Holding the power button for 2 seconds still shuts down from anywhere.
- BananaFront, BananaOS's own player: Game Boy, Game Boy Color, GBA, Mega Drive, NES, SNES and PICO-8 start in it instead of RetroArch, with up to half the CPU work (Game Boy Color −50%, GBA −40%, Mega Drive −33% on an RG DS). Same saves, states and hotkeys; RetroArch is one setting away (Settings › Other systems › Frontend).
- New cores: BananaNES (about twice as fast, now the NES default), BananaGBA and BananaSNES.
- DS Pokémon companion (alpha) for all nine main-series DS games, Diamond to White 2: battle help with catch chances and IVs, party, team score, the area's wild Pokémon, a guide, a Dex with the game's own sprites and a journey log, behind an icon on the touch screen. BananaDS only, off by default: Settings › Nintendo DS › BananaDS › NDS Pokémon companion (alpha).
- Russian (Русский), translated by Vladislav (LVD) and Ruslan (Nestrahoff). Thank you both!
- Buttons pages: choose what L2, R2, L3 and R3 do. New DS defaults: L2 swaps the screens, F + R saves, F + L loads.
- A tidier Settings: a page per emulator, and subpages such as System › Updates and Network › Bluetooth.
- BananaDS: faster at 3x and 4x, and a per-game "Fast, DSi CPU" timing (Pokémon HeartGold: Origin at 60 fps).
- Files and sharing: games from a NAS or a computer (SMB, SFTP, FTP), archives unpacked on the handheld, and Bshare for LocalSend in the App Store.
Note
Coming in 0.5.3: Italian and Finnish, a journey log and a Nuzlocke-style challenge in the GBA Pokémon companion, and GBA DS in the App Store. Poketool and PortMaster move to the Store: they no longer come with BananaOS, and your bank and your ports stay on the card.
The full list, with every fix: the 0.5.0 release notes.
Nintendo DS
- BananaDS is 12.6% faster and runs 5 °C cooler. A full-speed game needs about a quarter less CPU (HeartGold: Origin, ~126% → ~94% of a core). Numbers per game: docs/PERFORMANCE-0.5.0.md.
- 3x and 4x resolution (experimental) in BananaDS: Settings › Nintendo DS › Resolution, or per game. 4x is the RG DS Plus's native screen size; Mario Kart DS's demo races at 55–59 fps. Heavy 3D games heat the handheld at 4x; 2x stays the default.
- Low latency, fixed (experimental): in BananaDS a press shows about two refreshes sooner (17–23 ms from a frame's start to the screen, against 48–60 ms), now without the pitch dip and with far fewer skipped frames. SuperDrastic's low latency no longer stutters on the RG DS.
- F + SELECT swaps the two screens (touch follows), kept per game. Save slots show both screens, and the redesigned pause menu has save/load with pictures, quick settings, hotkeys and Restart.
- DS cartridges on the home row, with box art or the game's own icon, and Power off after sleeping: asleep on the battery for a while, the game saves itself and the handheld turns off; press power and you are back in the game.
Bluetooth
- Headphones and speakers with aptX, aptX HD, LDAC and FastStream (Low latency or Best quality), and controllers in the menu and the emulators. Wi-Fi keeps working while Bluetooth plays.
Updates and your library
- Updates over Wi-Fi (Settings › System › Update), checked, downloaded and verified on the handheld.
- Home server sync with BananaOS's own Romhost or with RomM: games, box art and saves kept in step with a server on your network. A conflict keeps both saves.
- Delete a game from its page; its saves stay on the card.
Companions on the second screen
- Pokémon companion, redesigned for the whole bottom screen (inspired by PokeDaisy by Lidor Itzhari): party, summary, battles with types and move effectiveness, Map, Bag, Dex and Guide. Ruby, Sapphire, Emerald, FireRed, LeafGreen and Pokémon Unbound.
- Game companions for the Game Boy Advance (off by default): status, items, bosses, map and progress for 500+ games. Some are still unverified: tell us when a number is wrong.
Look and feel
- Ten layout themes, built in: a theme file can now draw the whole menu, and ten come with the system, made with the Banana Theme Studio. Pick one in Settings › Display & sound › Theme. The theme engine got 2–4x faster on the RG DS without changing a pixel.
- A new first boot: an arrival animation, then a step-by-step setup (language, Wi-Fi with a connection test, time zone, the DS's name, RetroAchievements, box art). Run it again from Settings › System › First-time setup.
- Credits (Settings › System › Credits), and the UX team's review: brightness kept across restarts, box art in a fixed frame, accent colours, L/R page jumps, stick navigation, a Power menu, Shown systems and a Hotkeys page.
Other systems and speed
- N64, much faster: rendered at the N64's native resolution, Banjo-Kazooie run unthrottled went from 64 to 126 frames a second on the RG DS Plus, and Bomberman 64 from 70% to 99% speed on the RG DS. PlayStation: no more stutter or crackle (Silent Hill on the RG DS Plus: 20–41 late frames and 3–6 sound dropouts per 30 s → 0). GBA games with RetroAchievements start in a quarter of a second instead of up to 26 s. An emulator choice per system and a screen border.
- Boot 12.0 s → 9.8 s from the power button to the menu (a QA tester's stopwatch; handheld not recorded); deep sleep works again where it got stuck in a lighter sleep.
- Simplified Chinese (简体中文): Majirefy's 0.5.0 translation, 610 new lines and 344 revised ones. Thank you, Majirefy! RetroArch's own menu and messages now follow the language too.
Flashing erases the selected card. Back up anything on it you want to keep, and check the selected drive before you start.
The easiest route is the BananaLinux Flasher by jesussaves-ai: choose your handheld, choose your microSD card, then download and flash. It fetches the newest BananaOS image, checks it against the release's SHA-256 and refuses your computer's own disks.
- Windows: download
BananaLinuxFlasher.exefrom its releases and run it as administrator. It is an unsigned community build, so SmartScreen may ask: More info > Run anyway. - Linux and macOS: run it from source with Python 3 and Tkinter (
python3 flash_banana.py).
Or flash by hand: download the image for your handheld from the 0.5.0 release and open it in Raspberry Pi Imager (Choose OS > Use custom image) without unzipping it. Avoid balenaEtcher: several people have found it writes the card incorrectly, and the handheld then fails to boot.
| Handheld | Image | Update package |
|---|---|---|
| RG DS Plus | banana-rgds-plus.img.gz | banana-rgds-plus-0.5.0.update.tar |
| RG DS | banana-rgds.img.gz | banana-rgds-0.5.0.update.tar |
Insert the card and power on. The first boot prepares your data partition, plays its arrival animation, then guides you through setup step by step: language, Wi-Fi with a connection test, time zone, your DS's name, a RetroAchievements account and box art. Skip any step with B, or the whole setup with START. To add games, open the BANANA drive on your computer and copy them into roms/nds, roms/gba and the other system folders, or copy them over Wi-Fi. banana/README.txt on the card lists the folders.
- From 0.4.x: put
banana-rgds-plus-0.5.0.update.tar(RG DS Plus) orbanana-rgds-0.5.0.update.tar(RG DS) inbanana/updateson the card, then Settings › System › Update, A on the package and A again. It installs to the card's other system slot and runs from the next restart; the version you had stays one restart away (Settings › System › Previous version). Games, saves and settings stay. - From a 0.5.0 beta: Settings › System › Update finds 0.5.0 over Wi-Fi. Beta testers: switch Beta channel off there to follow the releases from now on.
- From 0.5.0 on, updates come over Wi-Fi: Settings › System › Update (Settings › System › Updates from 0.5.2.2 on) checks the releases, downloads the package for your handheld and checks it before installing. On 0.5.0 or 0.5.0.1 it finds 0.5.2.2. If a package ever says it is damaged, download it again and compare its SHA-256 with the release's
SHA256SUMS-<handheld>.txtfile.
The first start after the update runs the new first-time setup once, prefilled with what your card already has.
Coming from GammaOS or ROCKNIX? The Save Mover backs up your saves, converts them and places them in the card's folders, all in your browser. A ROCKNIX .dsv next to a game is used as its save the first time.
A look around BananaOS, captured on an RG DS Plus running 0.4.2. For 0.5.0's layout themes, see Themes.
The boot animation.
Both put each DS screen on its own display and include an in-game menu for save states, shaders and quick settings. Choose a default in Settings > Nintendo DS, or press X in the library to choose one for a game.
| SuperDrastic | BananaDS | |
|---|---|---|
| Core | DraStic by Exophase, adapted for the RG DS and RG DS Plus | The melonDS core on BananaOS's display path and menu |
| 3D | Gengis Engine at 2x, threaded | Gengis Engine at 2x, threaded; 3x and 4x (experimental) |
| Low latency (experimental) | Yes | Yes: a press shows about two refreshes sooner |
| CPU clocks | Per-game tuning | Steps down only when the heaviest frames still fit |
| RetroAchievements | No | Softcore, with the account from setup |
| Online play | No | Nintendo WFC through Kaeru |
| Microphone | A "blow" key | The real microphone |
| Extras | Shaders, save slots with both screens as their picture | Cheats for 4,000+ games, fast-forward (R2), FPS counter, screenshots (F + L2), save slots with both screens as their picture |
Press F for the in-game menu; the Anbernic button also opens it. In DS games, both emulators: F + R saves a state and F + L loads it, L2 (or F + SELECT) swaps the two screens, R2 fast-forwards and L3 blows on the mic (Settings › Nintendo DS › Buttons changes L2, R2, L3 and R3). More in docs/EMULATORS.md, the contract between the menu and any emulator.
- Other systems: Game Boy, Game Boy Color, GBA, Mega Drive, NES, SNES and PICO-8 in BananaFront, BananaOS's own player; Commodore 64 and ZX Spectrum through it too, with a touch keyboard on the second screen (or F + B over the game); PlayStation and N64 in RetroArch; each on one screen. The other screen holds touch tiles for save, load, menu, fast-forward and quit, or a game companion. Shaders and a screen border are included (Settings > Other systems), and each system can use its own emulator. R2 fast-forwards in the 2D systems' games, and Settings › Other systems › Buttons gives L2, R2, L3 and R3 other jobs.
- Companions on the second screen: the Pokémon companion for Ruby, Sapphire, Emerald, FireRed, LeafGreen and Pokémon Unbound, game companions for 500+ GBA games (off by default), and the DS Pokémon companion (alpha) for Diamond, Pearl, Platinum, HeartGold, SoulSilver, Black, White, Black 2 and White 2 in BananaDS (off by default). More in docs/COMPANIONS.md.
- Ports and PICO-8: PortMaster (from the App Store) with its ports, as on ROCKNIX; PICO-8 through fake-08, or the official PICO-8 when it is on the card.
- App Store: install and update Döda Kvarter, Poketool (a Pokémon bank and save editor), PortMaster and eReaderDS from the menu.
- Search and artwork: search names, genres or years across every system (Select), Recently played and Favorites shelves, box art from libretro or TwilightBoxart, and games on a second SD card on the RG DS Plus.
- Your library on a home server: sync games, box art and saves with BananaOS's own Romhost or with RomM (Settings › Network › Home server).
- Files: copy, move, rename and delete files and folders, and make folders, on the card and the RG DS Plus's second SD card, from a tile on the home screen (it stays open while it copies; Y twice stops). It also gets games from a NAS or a computer over SMB, SFTP or FTP(S): into the folder their type says, or any folder chosen (or made) on either card, or pasted where you want them. A cut download resumes where it stopped, whatever the protocol; zip, 7z and RAR archives are unpacked (multi-volume and password-protected ones as well), and archives already on a card too. Close the lid and the download finishes before the handheld sleeps.
- File sharing: over Wi-Fi the card is
\\<address>\banana(log in asbanana/linux). Copied games show up in the menu.
| System | Core (first is the default; RetroArch 1.22's cores, built for the RK3566's Cortex-A55) |
|---|---|
| GBA | gpSP, mGBA or BananaGBA |
| Game Boy, Game Boy Color | Gambatte |
| NES | BananaNES (a FCEUmm fork) or FCEUmm |
| SNES | Snes9x or BananaSNES |
| Mega Drive | PicoDrive |
| PICO-8 | fake-08 |
| Commodore 64 | VICE |
| ZX Spectrum | Fuse |
| PlayStation | PCSX ReARMed |
| N64 | Mupen64Plus-Next |
In 0.5.0 a theme file can draw the whole menu: where everything is, how it looks and how it moves. Ten layout themes come built in: pick one in Settings › Display & sound › Theme (A opens a gallery with previews). They were made with the Banana Theme Studio, the theme editor that runs in your browser.
Each theme's home screen, top over bottom, as the Banana Theme Studio draws it.
- Make your own, or edit one of these: open the Banana Theme Studio. Nothing to install, and nothing you make leaves your computer.
- Put your theme in
banana/themes/on the card (over file sharing, or with the card in a computer), then pick it in Settings. A file there with the same name as a built-in theme replaces it. Pick Dark to go straight back to the normal look. - The guide: docs/MAKE-A-THEME.md. The file format: docs/THEMES.md.
- Suspend and resume: close the lid and the game pauses, the card is flushed and the handheld sleeps. Open it and the game carries on. Woken in a bag, it goes back to sleep. With Power off after sleeping, a long sleep on the battery saves the game and turns the handheld off; press power and you are back in it.
- Sound without setup: the speakers or headphones switch the moment headphones are plugged in, during a game too. Bluetooth headphones and speakers work as well, with aptX, aptX HD, LDAC and FastStream.
- Battery care: while asleep it checks the battery and shuts down cleanly before it runs flat. The LEDs work as on ROCKNIX: green, red at 20%, blinking red at 5%, amber while charging.
Hardware details
- Both 640x480 (RG DS) or 1024x768 (RG DS Plus) screens are driven directly, with no compositor.
- The RG DS's screens are retuned from 60.10 Hz to 60.0013 Hz in the device tree; on the RG DS Plus,
banana-panel-tunereads the real pixel clock on the first boot and retunes both screens to 59.999 Hz. - No sound server: audio goes to the RG DS Plus's AW88166 amplifiers or the headphones directly; the microphone records from the rk817 at full level.
BananaOS is a beta. The QA team tested 0.5.0 on both handhelds through 0.5.0-beta.1 to beta.12 (a 36-item test plan), with every confirmed report fixed or listed below. Both its update packages were installed over earlier builds through Settings › System › Update and over Wi-Fi from the beta channel, and every speed claim was measured on the handhelds' own screens. 0.5.2.2 was tested on both handhelds, with the DS companion checked game by game. These are checks of those releases, not a compatibility guarantee.
Known issues in 0.5.2.2:
- The DS Pokémon companion is an alpha: BananaDS only (a game set to SuperDrastic in its own options shows no icon); Black 2 / White 2's season isn't read from the game yet (pick it on the Here page); games whose intro needs a touch were not all tested with it on.
- Translations: lines added since the Chinese and Russian translations (the DS companion, the reorganised Settings) show in English or as machine drafts. In Russian, the home screen's START chip and Settings' power-button chip are a little too long.
Known issues from 0.5.0:
- DSi games and DSiWare (.dsi, .cia; unpack a .7z first) run on BananaDS with the BIOS dumped from your own DSi: put
dsi_bios9.binanddsi_bios7.bin(64 KB each; a dump'sDSI_bios9.binnames and aDSi BIOSfolder inside it work too) inbios/on the card. Your DSi's NAND (dsi_nand.bin, optional) goes there too; without it BananaDS keeps DSiWare saves on a NAND of its own. Without the BIOS they stop at a white screen. DSi-enhanced DS games (Pokémon Black 2 / White 2) run as DS games. - SuperDrastic's low latency on the RG DS Plus is a little rougher than with it off. BananaDS's low latency is smooth on both.
- The heaviest themes (Neon Arcade, Vinyl Lounge, Oak Bookshelf) can still drop frames while scrolling the home row.
- Chinese: lines added after Majirefy's 0.5.0 translation (the first-time setup's slides, the new low-latency help texts, a few Credits lines) still show in English or as a draft, for the next round.
- RetroAchievements shows "Achievement Unlocked: Unsupported Game Version" for a game it doesn't recognise; nothing is unlocked.
- 4x resolution heats the handheld in heavy 3D games; use 2x for long sessions.
- A DS game can freeze after a very long sleep (reported after 2 hours with the lid shut): the in-game menu still works and quitting is fine. Being investigated.
- Bluetooth headphones were tested with a SteelSeries headset (and AirPods on an earlier beta); tell us how others do.
Not available yet:
- One card image for both handhelds: each has its own image for now.
What's next: docs/ROADMAP.md. Every release's notes: Releases.
On Linux (Debian/Ubuntu: build-essential bc bison flex libssl-dev libelf-dev unzip rsync cpio python3-dev swig libgnutls28-dev). The latest release is the tag v0.5.2.2:
make rgds # output/rgds/images/banana-rgds.img.gz
make rgds-plus # output/rgds-plus/images/banana-rgds-plus.img.gzThe first build fetches Buildroot and everything it builds, and takes an hour or more. The whole image boots in QEMU with no handheld (tools/qemu-boot.sh, also the CI's boot job): the first boot, the menu on two virtual panels, a game started from the library, a shutdown from the settings.
No handheld needed:
make ui # ui/banana-ui for this computer
make test # renders the menu from a test library into ui/tests/out| Path | What |
|---|---|
ui/ |
banana-ui: the KMS host (src/), ROCKNIXDS Pixel's engine (rnds/), its assets, the headless tests |
system/bananad/ |
bananad (sleep, lid, power button, LEDs, sound routing, volume and brightness, battery guard) and banana-panel-tune |
system/rootfs/ |
init, first boot, banana-perf, sleep hooks, the game launchers, default settings |
buildroot/ |
defconfigs, Banana's packages, the RG DS board (kernel patches, device trees, drivers, U-Boot, image layout) |
store/ |
the App Store's catalogue |
tools/ |
the menu engine's import, ROCKNIX's hardware sync, the pixel bunch, the logo, the boot animation, the Banana Theme Studio (theme-studio/), this page's pictures (make-readme-art.py) |
web/ |
the website on GitHub Pages: the Save Mover, with the Banana Theme Studio (tools/theme-studio/) published next to it |
docs/ |
ARCHITECTURE.md, EMULATORS.md, FIRST-BOOT.md, COMPANIONS.md, MAKE-A-THEME.md, THEMES.md, THEME-EDITOR.md, PERFORMANCE-0.5.0.md, ROADMAP.md |
The people who make BananaOS (also in Settings › System › Credits):
- Development: JorreFog (maintainer) · jesussaves-ai · marlupatrocinio
- Translation: Majirefy (简体中文, Simplified Chinese) · Vladislav (LVD) and Ruslan (Nestrahoff) (Русский, Russian) · Olympicus (Italiano, Italian) · HANHITSI (Suomi, Finnish)
- QA: Duncan · Majirefy · Smizzle · nigel777 · v (QA and mod)
- UI/UX: Numberjerry
Thanks to:
- Vladislav (LVD) and Ruslan (Nestrahoff) for the Russian (Русский) translation.
- Olympicus for the Italian (Italiano) translation.
- HANHITSI for the Finnish (Suomi) translation.
- Majirefy for the Simplified Chinese (简体中文) translation. The characters are drawn with Fusion Pixel Font (缝合像素字体) by TakWolf. To translate BananaOS into your language, ask for the translation document;
tools/lang-from-docx.pyturns a filled-in one intoui/assets/lang/<language>.tsv. - jesussaves-ai: the BananaLinux Flasher, the card writer for Windows, Linux and macOS, and in BananaOS the PS1 game panel, the game panel's idle dimming, the microphone routing and the Reset rows.
- casualducko: the zero-copy panel patch for LÖVE apps on both panels (eReaderDS).
- swouapiy: the shutdown animation (the boot animation backwards).
- The Pokémon companion is inspired by PokeDaisy by Lidor Itzhari (lidor30), the companion app for Android handhelds with two screens. BananaOS's is its own code, written from the games' documented data.
- The menu is ROCKNIXDS Pixel, from ROCKNIXDS, where BananaOS started. Banana's mark is the bunch of BananaUI, redrawn as pixel art.
- The RG DS's kernel support, device trees and drivers come from ROCKNIX. DS emulation is DraStic by Exophase (through SuperDrastic) and melonDS's core (BananaDS).
- Retro Game Corps, forthenext and Trenton Faykus for showing BananaOS to a lot of people, and GammaOS for all the inspiration.
Much of the code, tests and documentation was developed with Claude as a coding assistant. The maintainer directs, reviews and tests the work on real hardware. Bug reports and contributions are welcome.
BananaOS is MIT licensed (LICENSE); bundled components keep their own licenses, listed in THIRD_PARTY.md. BananaOS contains no games, ROMs or BIOS files.
































