| Device | Support Status |
|---|---|
| Miyoo Flip | Stable |
| Miyoo A30 | Stable |
| Trimui Smart Pro | Stable |
| Trimui Brick | Stable |
| Trimui Smart Pro S | Stable |
| Trimui Brick Pro | Stable |
| Miyoo Mini Flip | Stable |
| Miyoo Mini Plus | Stable |
| Miyoo Mini v1-4 | Stable |
| Anbernic RGXX+ series | Stable |
| Powkiddy RGB30 | In Development, testers wanted! |
| MiniLoong | Initial support, unstable |
Anbernic RGXX+ series: These devices require a BaseOS TF1 image, which you can grab here. TF2 takes a standard spruceOS installation, so your spruceOS card stays freely swappable between supported devices. If you were using the modified stock images we shared for 4.3.4 you will need to reflash TF1 with BaseOS
Powkiddy RGB30: this device needs dArkMoss on TF1, which you can grab here. TF2 takes a standard spruceOS installation, so your spruceOS card stays freely swappable between supported devices.
BaseOS and DarkMoss images can be downloaded and installed automatically using their corresponding tabs on the Spruce Installer application for Windows, Mac and Linux!
A Message from SundownerSport
OK everybody this is a fairly big release and has a ton of changes so hold on to your butts! We have been busy smashing bugs, adding features, cleaning stuff up and adding new devices. It has been a ton of work, a lot of fun, and has seen new team members join in on the project. Spruce has really grown since it began and I am just so happy to be a part of it!
Some of the bigger things I want to highlight for this release are:
- A brand new NDS emulator called DSperate (dee-yes-purr-it) by Noxwell aka @beebono ! it is a ground up emulator and NOT just another reskin or hack of DraStic. More info can be found on their GitHub page here. Huge shout out to Noxwell for putting up with our insane development strategy and flow!
- An additional system that you probably never heard of, but should try anyway is supported thanks to xroar: Tandy color computer was added by @ImCoKeMaN. More info can be found on our wiki for needed bios files etc.
- @CatalyticArkun for being such a wonderful addition to the team, your tireless efforts in debugging our codebase, friendship and not getting too mad at me for constantly sniping bugs you were in the middle of fixing.
- @ryanmsartor for being a solid rock of spruceOS for all these years, yes... YEARS! Seriously thanks so much man it is always a pleasure working with you!
- @pvaibhav for creating BaseOS and letting us piggy-back off of his work for a seamless, user friendly TF1 on the Anbernic devices.
- @christianhaitian for creating dArkOS and allowing us to spin it off into the minimal OS base dArkMoss used for the RGB30 (and more to come)!
- Incremental OTA pipeline by Arkun and Ry! This will allows a much easier OTA process from here on out, getting rid of the need to download and extract a 1.5gb release .7z for every update. It is especially useful for rapid fire Nightly updates.
As always, thanks so much for all your support and happy gaming..........
Help and Support:
Check out the wiki for info on ROM folders and apps Here
Join our Discord here!
Changelog
New device support
Anbernic RG XX line on BaseOS — SundownerSport, Ryan Sartor, arkun
spruce now runs on the H700 Anbernic handhelds: CubeXX, 35XX and 40XX variants, the RG SP and the RG28XX. The base OS goes on TF1 and the spruce card stays swappable.
- Native
ra64.h700andra32.h700RetroArch builds rather than the universal binaries, plus the 32-bit library stack spruce ships itself - A mali-fbdev SDL2, because BaseOS has no libdrm or libgbm
- One platform per pad layout, two-stick, one-stick and stickless, so every emulator gets static pad defaults instead of anything generated at launch
- PPSSPP, PICO-8 with Splore, File Manager, E-Reader, Gallery, Songo#5, AdvanceMAME and rumble all brought up individually
- Boot logo support, firstboot, spruce's own SSH on port 22, and a proper shutdown that unmounts the card
- Stock-OS compatibility gates removed once BaseOS became the only supported base
Powkiddy RGB30 on dArkMoss — SundownerSport
A Debian base rather than a vendor firmware, which meant re-deriving most of the platform layer.
- RetroArch on Vulkan, which is what works on that Mali blob today, with the GL path fixed separately
- Standalone emulators, PPSSPP with its own build, mupen64plus with a mapped pad
- Screenshots via KMS capture, game switcher thumbnails, and a 2.3 second saving by using spruce's own ffmpeg
PortMaster
SundownerSport, with Pablo Sobrado
- Bundle updated to upstream 2026.09.11-0804, the first release carrying that work
Roms/PORTSrenamed toRoms/ports, which is what every port already expected, with a one-shot migration that survives an interrupted rename and rewrites the paths held in recents, state, game-time and an installed harbourmaster config- Every PORTS-to-ports bind mount removed
- Per-device hooks moved onto the card so they never have to go upstream
- Working ports on the Anbernic XX line, including the gptokeyb path and per-port SDL2 selection
- PortMaster enabled on the RGB30
Emulators
Nintendo DS via DSperate — Noxwell, Ryan Sartor
A new optional NDS emulator, taken from v0.9.0 to v1.15.1 over this cycle.
- Per-device configurations: two-stick, one-stick, no-stick and A30, each with control schemes suited to the hardware
- Auto-resume, integer scaling, video effects and a subtle grid, exposed in the game list menu
- RetroAchievements signed in from spruce settings, with libcurl shipped for both architectures
- Boot straight to NDS firmware as a startup action
Dreamcast, NAOMI and Atomiswave — arkun
- Flycast libretro core replaced with a build from upstream v2.6, then the Vulkan renderer enabled
- Frame pacing fixed, and Kitfox's QA options adopted
- Flycast standalone at upstream v2.7, loadable on H700
- The Flycast2021 and Flycast2024 cores offered alongside the shipped one
New systems
- Atari Jaguar — Ryan Sartor, SundownerSport: virtualjaguar cores, an amped core for the A30 and Mini family, and a first pass at BigPEmu standalone
- Tandy CoCo via xroar — ImCoKeMaN
Other emulator work
- Standalone ScummVM, YabaSanshiro and mupen64plus brought to the Anbernic XX, including an overlay menu that is actually navigable there — SundownerSport
- Every RetroArch hotkey bound by name across both builds on the XX line, with reset tasks for every emulator config spruce ships — arkun
- np2kai core replaced, drastic-trngaje and Saturn on the Brick Pro, Intellivision CPU mode, IGM re-enabled for DOSBox — Ryan Sartor
- Miyoo Mini paced with the frame limiter rather than audio, roughly tripling GBA speed — SundownerSport
Updates and OTA
Ryan Sartor and arkun
Incremental updates, so a device downloads a diff rather than the whole card image.
- Release and nightly workflows produce a diff package alongside the full archive
- The downloader and updater split into full and incremental paths, with checksum and chain-base verification before anything on the card is touched
- Nightly-to-nightly diffs on top of a shared stable base
- Tracked flag files shipped in OTA packages so an incremental update re-arms first boot exactly as a full update would
- TLS certificates verified first, falling back only on a genuine TLS failure
- Gated behind developer and tester mode while it was exercised, then defaulted on where permitted
Networking
- WiFi crash on enable fixed, and network services now start and stop when their status changes rather than waiting for a reload — Mike
- Physical WiFi switch support across the TrimUI line — Mike
- Saved networks kept on the card rather than on each handheld — SundownerSport
- The clock set from network location when WiFi comes up, since a wrong clock breaks every HTTPS fetch, with a toggle in Time Settings — SundownerSport
- Automatic timezone from IP geolocation — SundownerSport
- Downloads moved to curl, because BaseOS cannot do HTTPS with its busybox wget — SundownerSport
- USB WiFi dongles supported on the TrimUI A133P line, the Miyoo Flip and the RG28XX, each through a bus-first radio contract with modules rebuilt against the right kernel — arkun, SundownerSport
- Real WiFi diagnostics in the bug report, with MAC addresses and SSIDs no longer leaked — SundownerSport
- A missing WiFi setting now means off rather than on, so a fresh install no longer joins a network against the shipped default — SundownerSport
Power, sleep and shutdown
- Lid sleep fixed on the Anbernic XX, where the clock never parsed so the device never suspended, and the sleep alarm armed on the right RTC — SundownerSport, arkun
- Card unmounted properly at shutdown on the XX line — SundownerSport
- USB Storage Mode exits through the shared shutdown path, exporting the card unmounted — arkun
- Miyoo Mini clean shutdown — nroj95
- Sleep no longer persists its mute as the user's volume on TrimUI, and boot volume is re-applied over a window rather than on one fixed delay, so a busy boot no longer loses the setting — SundownerSport
- Miyoo Flip audio reworked around the jack watchdog, the sleep mute and the codec reset on wake — arkun
- Screensaver dims the backlight — SundownerSport
- ZRAM enabled on the Smart Pro S and the TrimUI A133 devices — Ryan Sartor
- Adaptive fan control made the default — Mike
Interface
- Brightness on the home button, as its own setting — Mike, SundownerSport
- One Switch action setting for the whole TrimUI line, retiring the old Fn editor, with the Brick and Brick Pro Fn keys wired in and working — SundownerSport
- Favorites, Recents and Collections now read
gamelist.xml, and articles sort to the end of the name — SundownerSport - Global screenshot shortcut fixed, having worked on two devices out of eleven — SundownerSport
- Letter-skip on the shoulder buttons no longer crashes every game list — SundownerSport
- Video filters from OnionUI for the Miyoo Mini family, and a GBA offset filter for the Perfect Overlay setting — Ryan Sartor
- Four-icon main menu by default in the SPRUCE theme, five with Recents at 1280x720 — arkun
- Azerbaijani language pack — Jamal
- Every language file synced against the English key set — arkun
Robustness
arkun
A systematic pass over the shell and Python, roughly fifty commits. Highlights rather than a list: atomic writes for PyUI state and config, guards against empty pgrep output and missing files, quoted argv instead of eval in several launchers, POSIX tests replacing bash-only syntax in /bin/sh scripts, malformed entries contained in the gamelist and activity-log parsers, and watchdogs that replace a previous run rather than stacking on it.
Five regressions from that batch were caught and fixed, along with two genuine bugs it surfaced — SundownerSport
Installation
New Installer App
- Try the all-in-one installer app for a super easy installation!
- No need to download a release or format your card manually!
- Compatible versions for Windows, Mac and Linux!
- Lets you install Stable, Nightlies, Sprig (mini flip only) and Twig (GKD Pixel 2 only), BaseOS and dArkMoss all in one click!
| Platform | Download |
|---|---|
| Windows (x64) | spruceos-installer-windows.exe |
| macOS (Apple Silicon + Intel) | SpruceOS-Installer-macOS-Universal.zip |
| Linux x64 | spruceos-installer-linux-x64.tar.gz |
| Linux ARM64 | spruceos-installer-linux-arm64.tar.gz |
| Linux ARMv7 | spruceos-installer-linux-armv7.tar.gz |
| Linux i686 (32-bit) | spruceos-installer-linux-i686.tar.gz |
These always grab the newest installer — see all installer releases here
Manual Installation
- Download spruceV4.4.0.7z
- Extract onto your PC using 7zip
- Copy the entire contents to a blank FAT32 formatted SD card.
- Seriously, use 7zip to extract onto your PC THEN copy the files. IDK why but Windows breaks stuff if you use its built in extraction tool.