Skip to content
tarikbcPublic

About

A fast, light firmware for the GKD Pixel 2 that plays your whole retro library: forty systems, PortMaster ports, and your music, audiobooks and videos.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

ZyperOS: Zyper, a miniature schnauzer with his head cocked and his tongue out, beside the name

A fast, light firmware for the GKD Pixel 2 that plays your whole retro library.

On in about 2 seconds. The stock firmware takes 30 to 40.
Turn it off mid-game; turn it on, and 2 seconds later you're back where you were.
Forty systems with their box art, PortMaster ports, RetroAchievements, and your music and videos. Free and open source.

Download the latest release of ZyperOS   Install in three steps   Join the ZyperOS Discord   Downloads of every ZyperOS release

zyperos.com  ·  Why ZyperOS  ·  From the stock OS  ·  Features  ·  Compare  ·  Systems  ·  Controls  ·  FAQ  ·  Discord

The Nintendo 64 shelf: Super Mario 64's box large in the middle, Mario Kart 64 and Ocarina of Time beside it, a play mark on each cover for its video snap

Why ZyperOS

  • Your library looks the part. Every game shows its real box art, found on the handheld itself from libretro, ScreenScraper and SteamGridDB, and a few seconds of video when you rest on it.
  • On in about 2 seconds. The stock firmware takes 30 to 40 (my test, on my Pixel 2). Turn it off mid-game, and the next start puts you back where you were, 2 seconds later. Games start the moment you press A.
  • Plays more, smoothly. Forty systems and PortMaster's ports. Mario Kart DS keeps 60 frames a second and Super Mario 64 its 30, on the Pixel 2.
  • No more taking the card out. Add games, music and saves from any browser over Wi-Fi or the USB cable, and update ZyperOS the same way.
  • Made to be picked up. A first start that teaches every button, eight languages, light and dark, and a menu that never makes you wait.
  • Free and open source, under GPL-3.0, with nothing locked behind a payment.

Coming from the stock OS?

In my test on my Pixel 2, the stock firmware takes over 30 seconds to start, usually close to 40. ZyperOS is on in about 2, and POWER in a game saves it, so the next start puts you back in that game. Beyond that, ZyperOS has what the stock column of the comparison doesn't show:

  • Box art on the handheld, from three sources, with no computer and no Skraper
  • RetroAchievements, signed in on the device
  • Games over the USB cable or from any browser, not only Samba
  • System updates over Wi-Fi or the cable, with roll back
  • Charge limit, battery time left and a charging screen while it's off
  • A first-start tutorial for every button
  • Eight languages and menu music
  • Storage, by part and by game, and side lights for the battery, volume and more

Keep the stock card as your way back: ZyperOS goes on a second card, and swapping cards switches systems (keeping the stock card safe). Your games come over as files, each into its console's folder under Roms/ (the folders).

Install in three steps

  1. Download ZyperOS Installer for macOS, Windows or Linux from the latest release.
  2. Write the card. Put the microSD card in the computer, pick the GKD Pixel 2, the latest release and the card, and choose Fresh install.
  3. Play. Put the card in the Pixel 2 and turn it on. The first start sets the card up in about a minute, then shows you each button.

Then add games over Wi-Fi, the USB cable or the card itself. The full install covers the card image, updates and the Wi-Fi adapter.

Questions, ideas, or want to help build it? Come say hi on the ZyperOS Discord.

Watch the ZyperOS tour: a green GKD Pixel 2 showing a shelf of PlayStation covers, beside the ZyperOS name
The tour, 105 seconds on zyperos.com

Screens

The PlayStation shelf: Metal Gear Solid's box large, Crash Bandicoot and Spyro the Dragon beside it, a heart before the focused game's name
Your games, cover by cover
Favorites: Sonic The Hedgehog 2 between Metroid Fusion and Super Mario 64, Genesis under its name
Favorites from every system
The SNES shelf: Super Mario World's box between Donkey Kong Country and Super Metroid
Box art the handheld finds itself
The Spotlight home: PlayStation's console large, the other systems in a row below
Every system, in pixel art
The Gallery home: PlayStation's console centered between its neighbors
Or the Gallery home
Metal Gear Solid's Cover and Video page: its cover now, the boxes, title screen and screenshots the sources offer, and its video
Pick a cover, and see it first
An achievement's unlock notice: its badge, 'Unlocked · 10 points' over its name, and Zyper at the right
RetroAchievements, and Zyper cheers
The in-game menu over a paused Spyro the Dragon, on its Quick Slot row
A quick slot for each system
Controls: Hotkeys. SELECT with R1 and L1 quick save and load, with R2 and L2 faster and slower
SELECT with a shoulder: the hotkeys
Install PortMaster: its crane icon, PortMaster's version, what it is, and the download's bar at 9.8 of 24 MB
PortMaster with one press
MENU > Storage: the card in one bar by part, two recommendations, then every system by size
What fills the card
MENU > Battery Icon set to Time Left: the corner reads 3 h 25 min beside the battery
The battery, as time left
MP4's shelf of an album, a film and a book, each marked with what it is
Your albums, books and films, in MP4
Metal Gear Solid's details: Synopsis, Year, Genre, Achievements, Favorite, Cover and Video
A game's details, one button away
The ZyperOS menu, Search Games at the top
The device's settings in one menu

The shots show real box art to show what the Scraper does. The games and their art belong to their owners: ZyperOS comes with no games and no art.

Features

  • Forty systems, from the Atari 2600 to PlayStation, Nintendo 64, Nintendo DS, Dreamcast and Saturn, with Arcade, MAME, Neo Geo, NAOMI and Atomiswave, ScummVM, PICO-8, OpenBOR and J2ME (the full list).
  • Ports: the Ports shelf installs the official PortMaster with one press and runs its games, such as Stardew Valley and Celeste. MENU over any port, and over PortMaster itself, pauses it under ZyperOS's in-game menu, with Controls for that port (how).
  • Nintendo DS your way: DSperate inside the emulator, with three screen layouts and a d-pad stylus. A Mario Kart DS race keeps 60 frames a second on the Pixel 2. Game Language in the DS shelf's menu picks the language a game speaks: Auto, the language of MENU > Language where the DS has it (English, Español, Français, Deutsch, Italiano, 日本語) and English where it doesn't, or any of them outright, whatever firmware.bin says. A game left in another language starts fresh in the new one, with its battery save.
  • Nintendo 64 at full speed: ParallelN64 with Glide64, as ROGUE OS ran it. Super Mario 64 and a Mario Kart 64 race hold their 30 frames a second on the Pixel 2, and the d-pad is the N64's stick. Mupen64Plus-Next is the second choice on the shelf's Core row, for a game Glide64 draws badly. A game left on the other core starts fresh, with its battery save.
  • Dreamcast on flycast2021, the 2021 libretro Flycast, drawn on the GPU inside the emulator, with saves, states and resume like any other system. Standalone Flycast is the second choice if you add it.
  • A home screen in pixel art: every system as its animated console, on a Spotlight or a Gallery home, and your games as a row of covers. The systems go A to Z, or by release date in MENU > System Order. Light or dark, as you like.
  • Eight languages: English, 简体中文, Español, Português (Brasil), Français, Deutsch, 日本語 and Italiano, chosen on the first start or in MENU > Language. Every word follows it: the menus, the in-game menu, the charging and low battery screens, the boot screen's line while ZyperOS is copied onto the card, and the File Transfer page. Chinese and Japanese each have a face of their own, so they read as clearly as the rest, and switching languages costs no speed (below).
  • A first start that asks: Zyper says hello in each language until you pick yours, teaches each button and shows where it is on the Pixel 2, then asks for the theme, the home screen, the button sounds and the menu music (below).
  • An empty card that says what to do: with no games yet, the home shows the two ways to add them, one button each, and Zyper cheers when the first ones arrive.
  • Search Games and Random Game: MENU > Search Games finds any game by a few letters of its name, on any system. Random Game picks one and starts it, from every system in MENU or from one shelf in that system's menu.
  • RetroAchievements: sign in on the device, under MENU > Achievements. A game's achievements download once and then work offline, and anything you unlock offline is sent later. Each one has its badge in the list and in the pop-up when you unlock it, a trophy standing in until the badge is on the card, Zyper cheers from the pop-up, and a count like "5 / 10" pops up as you get closer.
  • Box art the device finds itself, in MENU > Scraper: from libretro's collection with no account; from ScreenScraper with a free account, which brings each game's name, year, genre and synopsis too, in a build made with ScreenScraper's developer pair (the page says not in this build otherwise); and from SteamGridDB, with your own free key typed or pasted, for what neither has. Renamed ROM packs are matched by checksum, and each game shows under its proper name with its file left as it is. Or add your own. To change one game's cover, X on it opens Cover and Video: every cover, 3D box, title screen and screenshot the three sources offer, each named with where it comes from, a big look before it is used, and the one it replaced kept to put back (below).
  • Delete a game from the handheld: press X on a game and choose Delete Game. It asks first, naming the game, with the cursor on Cancel. The game's file or files go (a disc set's folder, a .cue with its tracks, an arcade set), with its saves, save states, cover, video snap, cached achievements, details and play time, and the shelf moves on to the next game. A file another game still uses stays, and so does a BIOS set like neogeo.zip.
  • Storage, as a phone shows it: MENU > Storage shows what fills the card in one bar, games, saves, art, media and ZyperOS, then every system and folder by size. A system's page lists its games largest first, each with the room Delete Game would give back; Music, Videos and Audiobooks open their albums, films and books the same way, and A deletes one. X sorts any of these lists by size, A to Z or last played. Two recommendations clear the covers and video snaps of games no longer on the card, and the save states of games you have not played for a year (the saves stay). It opens at once: the sizes are measured in the background and kept on the card (below).
  • Video snaps: rest on a game for a second, while a bar under its cover fills, and the cover turns into a few seconds of the game itself, from ScreenScraper. A play mark on a cover says its game has one. MENU > Scraper > Video Snaps turns them on, per console, and their sound starts muted.
  • Wi-Fi File Transfer: move games, music, audiobooks, videos, saves and covers on and off the card from any browser on your Wi-Fi, behind a PIN, on a page made for it, on a computer or a phone. With no Wi-Fi network around, the handheld makes its own, for a phone that scans the QR code on the screen. Or use the USB cable, with no Wi-Fi at all, as USB File Transfer. A transfer keeps going while you go back to the shelf, with a mark in the corner; B asks before it stops one halfway; the page shows the time left, checks the room on the card first, and its Settings page updates ZyperOS over the cable.
  • USB that only charges until you say so: plug in a computer and the Pixel 2 asks whether it should charge, open USB File Transfer, or (on development images) bring up SSH. Developer mode brings SSH up on a release image.
  • System Update: over Wi-Fi, only what changed, signed, with Roll Back. Without Wi-Fi, the File Transfer page brings it over the USB cable.
  • Autosave and resume, plus six save slots for when you want a checkpoint.
  • Quick save and quick load, without opening a menu: hold SELECT and press R1 to save a state, L1 to load it back. A pop-up names the slot. Quick Slot in the in-game menu picks which of the six slots the two use, for each system, and the card remembers it. SELECT is still each game's own button: pressed alone, it reaches the game as you let go of it; only SELECT with a shoulder is a hotkey.
  • A QWERTY keyboard that keeps up with the d-pad.
  • Clocks per system: 8-bit and handheld systems run the CPU, memory and GPU under lower ceilings, measured to keep every frame, and so does the 16-bit generation a step higher. Lower clocks run at lower voltage, which saves battery. At the first frame that comes late, a game goes back to full clocks for the rest of the session.
  • Turbo buttons: X and Y press A and B for you, on the nine consoles whose controllers had two face buttons. On Game Boy Advance, L2 and R2 do the same for L and R.
  • Faster and slower: hold SELECT and press R2 to run a game at 1.5x, 2x or 3x, and L2 to step back down to normal speed. A pop-up says the speed.
  • Every control, in the game: Controls in the in-game menu shows what each button does in the game you are playing: its system's own buttons as its emulator reads them (the PlayStation's as their cross, circle, triangle and square), the turbo buttons, the hotkeys, the Nintendo 64's A and B on the A and B buttons, its stick on the d-pad (its own D-pad is SELECT with the d-pad), its C buttons (SELECT with X, A, B or Y) and Rumble Pak, the PICO-8's arrows, O, X and pause menu, and the DS's screens and stylus. Over a port it shows what the port documents: the controls in its README, the key each button types for it, and what to copy where before it runs.
  • Rumble on the Pixel 2: Dreamcast games, PlayStation games (as a DualShock) and Game Boy Color rumble cartridges shake the handheld, and Nintendo 64 games get a Rumble Pak. A game that saves to the Controller Pak, the N64's memory card, takes it instead in the in-game menu's Pak row, which keeps the choice for that game. The motor stops while the in-game menu is open.
  • A USB-C headphone adapter on the Pixel 2: plug one in and the sound goes there, ahead of the headphone jack, in games and in MP4. It's a choice of its own in Audio Output.
  • Bluetooth headphones on the Brick, paired on the device, with its volume buttons reaching them and their own buttons playing and skipping in MP4. Plug in wired ones and they take over.
  • Mono audio: the Pixel 2 has one speaker, so Audio Channels starts on Auto, mono on the speaker and stereo on headphones, mixed so it never clips. For anyone who hears with one ear, it plays games and MP4 in mono everywhere, or in mono in just the left or right ear on headphones.
  • MP4, a media player for music, audiobooks and videos: your albums, books and films on one shelf of their own covers, mixed, each with a small mark in its corner for an album, a book or a video, or one kind at a time with MENU > Show; every book and every video picks up where you left it, and Shuffle All plays every song on the card in a random order. SELECT opens MP4 from anywhere, even the in-game menu, and it keeps playing when you close it. While it plays, the game is silent. X, or SELECT + START together, locks it: the screen goes dark and every button but volume stops working, POWER included, until you hold SELECT + START for two seconds. Any other press shows how to unlock for a moment, a volume press lights the screen just long enough to show the volume bar, and a video stays in sight.
  • Menu music: ten free 8-bit tracks play behind the shelf and the menus, never over a game, and MENU > Menu Music shuffles them, plays one over and over or turns them off. Put your own MP3 or Ogg files in Roms/BGM and those play instead. On the shelf, L2 and R2 go to the song before or the next, and Zyper pops up with each new song's name, read from its tags. While MP4 plays behind the shelf, L2 and R2 skip its tracks (or a book's chapters) instead.
  • The top bar: the clock, Wi-Fi, headphones in the jack and the battery at the top of the home screen, every MP4 screen and the in-game menu, and the song that plays, with its note. MENU > Clock chooses 12-hour or 24-hour, and MENU > Battery Icon shows the battery as bars alone, with its percentage, or with the time left. Time Left counts down to where ZyperOS saves and powers off. It starts from the charge and current the battery gauge reports, so a time appears at once, and moves over to how fast the battery has been falling as that proves itself; for the moment before the first number it shows three dots filling in turn. On the cable it shows the time to full, or to the Charge Limit, then "On hold" when the Charge Limit is holding the charge and "Charged" when the battery is full.
  • The Pixel 2's side lights show the battery charging and running low, the volume or brightness as you change it, a climb when files or covers finish, and a sparkle for an achievement; MENU > Side Lights turns each on or off. On the charger, the shelf's screen goes dark after the Auto Off time, and any button lights it again.
  • Battery care: a battery too low to start says so and charges first; a charger plugged in while the Pixel 2 is off shows the charge and the time to full (hold POWER to start); Getting hot warns before the handheld slows down to cool, over a game or a port; and MENU > Charge Limit stops charging at 80, 85 or 90% to keep the battery young, and holds it within 2 points of the limit on the cable (78 to 80% at 80%).
  • About, besides the version and the card, tells the story of the name beside a photo of Zyper, and thanks the projects ZyperOS is built on.
  • Play Time: how long you've played each game or console, today, this week, this month, this year or ever.
  • A way out of anything: hold MENU + START for a second and whatever runs ends, a stuck game or port included, and the home comes back. After a crash, the Pixel 2 starts on the home rather than back in the game. In the in-game menu, X quits from any row.
  • Continue or from the start, favorites and sorting: A continues a game where you left it and Y starts it from the start; Y on a game's details (X) favorites it, and a heart before its name says so on its console's shelf; each console sorts by name, play time, last played or recently added.

The name

Zyper, a grey miniature schnauzer, sitting on the grass with his tongue out

ZyperOS is named after Zyper, my dog, who passed away. He was quick, light on his feet and full of energy, and that is what this system tries to be.

The name is also two words in one: zippy and hyper. Games start the moment you press A, the menus never make you wait, and the whole system is small enough to come up in about two seconds.

How it compares

The GKD Pixel 2 has several operating systems to choose from. This is ZyperOS beside the one it comes with and four others, from what each one's own pages, code and releases say in November 2026. ROGUE OS set the bar for this handheld, and ZyperOS set out to match it.

ZyperOS Stock1 ROGUE OS TortOS ROCKNIX plumOS Pixel2
Source, license GPL-3.0 — Its changed files, no license named GPL-3.0 GPL-2.0 for its own code MIT for its own code
Install, latest Card image or ZyperOS Installer, v1.0.2 (Nov 2026) On the card it comes with Card image, then v1.22's files (Aug 2025) Card image or TortOS Installer, v2.1.1 (Oct 2026) Card image, 20261101 (Nov 2026) Card image, v0.1.4 (Aug 2026), in testing
Systems 40, and Ports Over 100 folders 1172 11 1202 862
Games without taking the card out Wi-Fi or USB web page, its own hotspot, SSH Samba USB cable, SSH Wi-Fi or USB web page Samba, SFTP, USB cable Samba, SFTP, FTP
Box art on the device libretro, ScreenScraper3, SteamGridDB On a computer (Skraper) ScreenScraper libretro, ScreenScraper ScreenScraper libretro
RetroAchievements Yes — — Yes Yes —
System updates Over Wi-Fi or the USB cable, A/B with roll back — Copy the new files TortOS Installer, on a computer Over the air, or a file A file you copy, A/B with roll back
First-start tutorial Yes — — — — —
Themes Light and dark EmulationStation themes 13 launcher skins 2 card art styles Yes, with a downloader Your own themes
Languages 8: English, 简体中文, Español, Português (Brasil), Français, Deutsch, 日本語, Italiano — 21, in its launcher English 36 6
Menu music 10 free tracks, or yours — — — Yes —
Media player Music, audiobooks, video — Music, video Music, audiobooks Music, video Music
PortMaster Yes, installed from the Ports shelf with one press, with the in-game menu over every port Yes Yes — Yes Yes
Rumble Yes — Yes No Yes —
Side lights Battery, volume and brightness, finished transfers, achievements: each on or off — — Battery Battery —
Storage by part and by game Yes, with recommendations and media pages — — — — —
Pick a game's cover on the device From three sources, a big look first, the old one kept to put back — — — — —
Video previews on the shelf Yes — — — — —
Charge limit 80, 85 or 90% — — — — —
Battery time left Time left, or time to full on the cable — — — — —
A DS game's language Picked per game, whatever firmware.bin says — — — — —
Charging screen when off Yes — — — — —
Boot time 1.6 s4, about 2 s from power on5 30 to 40 s from power on5 — 2.2 s4 — —

— means none of the sources below says either way. The Pixel 2 has no Wi-Fi of its own, so on every system a Wi-Fi feature needs a USB Wi-Fi adapter. Knulli, muOS, twigUI (spruceOS) and a MinUI port run on the Pixel 2 too.

  1. GameKiddy publishes no documentation for the stock firmware. Its column is from Retro Game Corps' review of February 2025, and the firmware may have changed since.
  2. No count is published, so this is the systems in its own list, counted without tools, media players and ports. Hacks and regions can be entries of their own.
  3. In builds made with ScreenScraper's developer key.
  4. Each project's own number, and not measured the same way: ZyperOS's from the kernel's start to the home screen, on the Pixel 2 (mean of 10 starts), and TortOS's from power on to its shelf.
  5. My own count on my Pixel 2, from power on until it can be used, with the stock card it came with and with ZyperOS: the stock firmware takes over 30 seconds, usually close to 40; ZyperOS about 2.
Sources

Light and dark

ZyperOS has two themes, Beard in light and Salt & Pepper in dark. MENU > Appearance chooses Light, Dark or Auto, which is light from 7:00 to 19:00 by the clock, and the first start asks too. Every screen follows it. The File Transfer page follows the phone or computer it is open on instead.

Light (Beard) Dark (Salt & Pepper)
The Nintendo 64 shelf in the light theme, Super Mario 64's box in the middle The Nintendo 64 shelf in the dark theme, Super Mario 64's box in the middle
The Spotlight home in the light theme The Spotlight home in the dark theme
A game's Cover and Video page in the light theme A game's Cover and Video page in the dark theme

Supported systems

Console Put games in File types Core
Atari 2600 Roms/Atari 2600 .a26 .bin .zip Stella 2014
Game & Watch Roms/Game & Watch .mgw Game & Watch
Atari 5200 Roms/Atari 5200 .a52 .bin .zip a5200
Vectrex Roms/Vectrex .vec .bin .zip vecx
NES Roms/NES .nes .fds .unf .unif .zip FCEUmm
MSX2 Roms/MSX2 .rom .mx1 .mx2 .dsk .cas .zip blueMSX
Atari 7800 Roms/Atari 7800 .a78 .bin .zip ProSystem
Master System Roms/Master System .sms .zip Genesis Plus GX
Game Boy Roms/Game Boy .gb .dmg .zip mGBA
Genesis Roms/Genesis .md .gen .bin .smd .zip Genesis Plus GX
TurboGrafx-16 and CD Roms/TurboGrafx-16 .pce .sgx .cue .ccd .chd .toc .m3u .zip Beetle PCE Fast
Atari Lynx Roms/Atari Lynx .lnx .o .zip Handy
Game Gear Roms/Game Gear .gg .zip Genesis Plus GX
Neo Geo Roms/Neo Geo .zip .7z FinalBurn Neo
SNES Roms/SNES .sfc .smc .zip Snes9x 2010
Sega CD Roms/Sega CD .chd .cue .iso .m3u PicoDrive
3DO Roms/3DO .iso .chd .cue Opera
32X Roms/32X .32x .zip PicoDrive
Saturn Roms/Saturn .cue .chd .iso .ccd .mds YabaSanshiro
Virtual Boy Roms/Virtual Boy .vb .vboy .zip Beetle VB
PlayStation Roms/PlayStation .cue .chd .pbp .m3u .ccd .toc .iso .mdf .cbn .exe PCSX ReARMed
Neo Geo CD Roms/Neo Geo CD .chd .cue NeoCD
Nintendo 64 Roms/Nintendo 64 .n64 .z64 .v64 .zip ParallelN64, or Mupen64Plus-Next
Neo Geo Pocket Roms/Neo Geo Pocket .ngp .ngc .ngpc .npc .zip Beetle NeoPop
Game Boy Color Roms/Game Boy Color .gbc .cgb .zip mGBA
WonderSwan Roms/WonderSwan .ws .wsc .zip Beetle WonderSwan
Neo Geo Pocket Color Roms/Neo Geo Pocket Color .ngp .ngc .ngpc .npc .zip Beetle NeoPop
Dreamcast Roms/Dreamcast .chd .cdi .gdi .cue flycast2021, or Flycast if you add it
WonderSwan Color Roms/WonderSwan Color .ws .wsc .zip Beetle WonderSwan
J2ME Roms/J2ME .jar .kjx FreeJ2ME-Plus
Game Boy Advance Roms/Game Boy Advance .gba .agb .zip mGBA
ScummVM Roms/ScummVM a folder per game ScummVM
Pokémon Mini Roms/Pokemon Mini .min .zip PokeMini
OpenBOR Roms/OpenBOR .pak OpenBOR
Nintendo DS Roms/Nintendo DS .nds .zip DSperate
PICO-8 Roms/PICO-8 .p8 .png FAKE-08
Arcade Roms/Arcade .zip .7z FinalBurn Neo
MAME Roms/MAME .zip MAME 2003-Plus
NAOMI Roms/NAOMI .zip .7z flycast2021
Atomiswave Roms/Atomiswave .zip .7z flycast2021
Ports Roms/Ports .sh, with the port's folder beside it PortMaster

BIOS files go loose in Bios/. TurboGrafx-CD games need syscard3.pce and PlayStation games scph5501.bin. Sega CD games need bios_CD_U.bin, and a European or Japanese disc bios_CD_E.bin or bios_CD_J.bin as well. Neo Geo CD games need the Neo Geo CD BIOS in a folder of its own, Bios/neocd/neocd.bin. The 32X needs no BIOS. A multi-disc PlayStation game goes in a folder of its own with an .m3u listing its discs. Game Boy Advance runs without its BIOS; add gba_bios.bin if you want the original boot animation. The Atari 7800 runs without one too; add 7800 BIOS (U).rom for the Atari logo at start. The Dreamcast, NAOMI and Atomiswave need their BIOS in Bios/dc/: dc_boot.bin, naomi.zip and awbios.zip. The 3DO needs panafz10.bin and the Lynx lynxboot.img; the Atari 5200 and the Pokémon Mini run without theirs (5200.rom, bios.min). MSX2 games need blueMSX's Machines and Databases folders in Bios/. Saturn games need the Saturn's BIOS, saturn_bios.bin (or sega_101.bin or mpr-17933.bin).

Nintendo DS runs on DSperate, which ZyperOS ships, with ZyperOS's own in-game menu. A game starts with the top screen alone. While it runs, DSperate gives its threads a core each, as its own frontend does, and the CPU stays at its top clock: a Mario Kart DS race keeps 60 frames a second on the Pixel 2. L1 and R1 are the DS's L and R. L2 shows the other screen. R2 shows the bottom screen and turns the stylus on: the d-pad moves a cursor and A touches. R2 again turns the stylus off and goes back. The in-game menu also has Screens (Single, Stacked or Top Focus), Swap Screens and Stylus. A DraStic save (Saves/<game>.dsv, from ROGUE OS or another system) is taken over the first time a game runs on DSperate. Encrypted ROM dumps need bios7.bin, bios9.bin and firmware.bin in Bios/. A DS game reads its language from the firmware, and a firmware.bin carries the language of the console it was dumped from, so ZyperOS tells DSperate which language to use with each game and leaves the file alone. Game Language in the console's menu, under Core, is Auto to start with (the language of MENU > Language where the DS has it, English where it doesn't, as Português (Brasil) and 简体中文 are not on a DS) or one of English, Español, Français, Deutsch, Italiano, 日本語 and 简体中文 outright; 简体中文 is for the iQue DS's games, which are the only ones that have it. A game resumes where you left it only in the language it was left in: after a change of Game Language it starts fresh, in the new one, with a note that says why, and its battery save keeps your progress. A save state you load yourself keeps the language it was saved in, and Reset in the in-game menu starts the game again in the row's language.

Arcade games are ROM sets, one .zip per game, named the way FinalBurn Neo names it (ssf2.zip is Super Street Fighter II). Keep the name and keep the zip whole: the name says which game it is, and the core checks every chip inside. Vertical games such as 1941 are turned upright on their own. Neo Geo games are FinalBurn Neo sets too (mslug.zip is Metal Slug), and every one needs neogeo.zip, the Neo Geo's own BIOS set, in Bios/ or beside the game.

The ScummVM shelf: freeware games, each a folder, as cards

ScummVM games are folders: copy each game's folder, as it came, into Roms/ScummVM, and the shelf shows it under the folder's name. ScummVM works out which game it is from the files. A .scummvm file in the folder, holding the game's ScummVM ID (sky for Beneath a Steel Sky, queen for Flight of the Amazon Queen), names it for certain, for the rare folder ScummVM reads as more than one game. A clicks, B right-clicks and the d-pad moves the pointer (R1 or R2 held makes it slow); Y skips a cutscene, START opens ScummVM's menu, where the game saves and loads, and SELECT a keyboard. ScummVM has no save states, so save from that menu before you quit.


J2ME games are the .jar files of the Java phones. They run on FreeJ2ME-Plus, which brings its own Java: the first J2ME game you start unpacks it into Bios/ (about 60 MB), which takes a little while once. A phone's keys are on the pad: the d-pad is its arrows, A its OK key, SELECT and START the left and right soft keys, X 0, B 7, Y 9, L1 1, R1 3, L2 * and R2 #.

The in-game menu over a paused OpenBOR game: Continue, Controls and Quit

OpenBOR games are modules, one .pak file each, run by OpenBOR itself rather than a libretro core. A attacks, B jumps, X is the second attack, Y the special, L1 and R1 the third and fourth, START pauses into OpenBOR's own menu and SELECT saves a screenshot. MENU pauses the game under ZyperOS's in-game menu, as in any other game: Continue, Controls, which lists those buttons, and Quit, back to the shelf (X quits from any row). OpenBOR keeps its own saves and has no save states, so the menu has no Save, Load or Reset. The volume and brightness bars work over it, and POWER ends the game and turns the handheld off. A module that came as a folder has to be packed into a .pak first. The Pixel 2 only.


Saturn games run on YabaSanshiro and need the Saturn's BIOS in Bios/ (above). The Saturn is the most a Pixel 2 is asked to run: it runs some games, and not at full speed. Flicky's Flock, a homebrew game, ran at about 37 frames a second of 60.

PICO-8 carts are .p8 files or .p8.png images and run on FAKE-08, an open reimplementation: you don't need Lexaloffle's PICO-8.

Install

ZyperOS 1.0.2 is out for the GKD Pixel 2, released in November 2026. The latest release on GitHub has the card image and ZyperOS Installer for macOS, Windows and Linux. The TrimUI Brick's image comes later.

  1. Write the card. Download ZyperOS Installer for your computer from the latest release: the .zip for macOS, the .exe for Windows, the .deb or .rpm for Linux. Put the microSD card in the computer, pick the GKD Pixel 2, the latest release and the card, then choose Fresh install, which erases the card. Or download the card image, ZyperOS-v<version>-pixel2.img.xz, and write it with any program that writes disk images, like Raspberry Pi Imager.
  2. Put the card in the Pixel 2 and turn it on. The first start sets the card up in about a minute, turning the rest of it into space for games, music and saves. Every boot after that comes straight up, and the first one ends with the tutorial.
  3. Set the time zone under MENU > Date & Time. Wi-Fi sets the time whenever it connects; without it, set the time there too, and it keeps it.
  4. Add games to the folders in Roms/. Put the card back in the computer, where it shows up as ZYPEROS, or send them over, with Wi-Fi or the USB cable: a card with no games shows both ways.
  5. Add the extras you want. PortMaster installs from the Ports shelf over Wi-Fi. Copy Flycast to Emulators/Flycast. A shelf with nothing in it stays hidden, except Ports, which holds PortMaster's entry until you install it.

New versions come to the handheld with System Update over Wi-Fi, or over the USB cable from the File Transfer page. On a computer, the installer's Update puts a new version on a card that has ZyperOS and keeps its games, music and saves. To build the card image yourself instead, see For developers.

The Pixel 2 has no radio of its own. A USB Wi-Fi adapter in its USB-C port gives it Wi-Fi while it's plugged in, and with it box art, RetroAchievements and Wi-Fi File Transfer: one whose Realtek chip ZyperOS has a driver for, like the TP-Link TL-WN725N on a USB-C adapter. Without one, USB File Transfer (below) moves files over the USB cable. There's no Bluetooth.

Languages

ZyperOS speaks English, 简体中文, Español, Português (Brasil), Français, Deutsch, 日本語 and Italiano. The first start asks for yours before anything else, and MENU > Language changes it at once, with no restart. Every screen follows it, down to the charging screen and the boot screen's line, and the File Transfer page follows the handheld. Chinese and Japanese each have a face of their own. Text is never cut to fit: where a language's words run long, that place gets a short form of its own.

The first start: Zyper says 你好! beside the eight languages, each in its own words, 简体中文 chosen
Your language first
The ZyperOS menu in Portuguese, Idioma: Português (Brasil) chosen
MENU in Português
The ZyperOS menu in Japanese
MENU in 日本語

The first start

The first time ZyperOS starts, Zyper says hello in each of its eight languages in turn, each named in its own words: UP and DOWN look, the screen speaks the one you are on, and A keeps it (MENU > Language changes it later). Then he teaches the buttons one at a time, with a picture of the Pixel 2 turned to show where each one is; the shoulder keys light up beside the D-pad (L1/R1 jump) and SELECT (L2/R2 change the song). Then he asks four things, each shown as you look at it: the theme, the home screen, the button sounds (Wood, Glass, Bubble or Off) and, on a card with tracks, the menu music, which plays while On is chosen. LEFT and RIGHT look, A keeps it, and START skips the rest. Each choice is a MENU row later, and MENU > Show Tutorial runs the tutorial again.

The tutorial asks: Light or dark? The home screen shown in both themes
Light or dark?
The tutorial asks for the home screen: Spotlight or Gallery
Your home screen
The tutorial asks for the button sounds: Wood, Glass, Bubble or Off
Button sounds
The tutorial asks for the menu music: On or Off
Menu music

A card with no games

No games yet: USB File Transfer on A, Wi-Fi File Transfer on Y, dimmed until the Wi-Fi adapter is in

A card with no games opens on No games yet and the two ways to add them: A starts USB File Transfer and Y Wi-Fi File Transfer. On the Pixel 2 the cable and the Wi-Fi adapter use the same port, so the way that can't start now is dimmed and says why, and it lights up as you plug in or unplug. When the first games arrive, by either way or any other, the home shows them and Zyper cheers.


Adding games over Wi-Fi

Wi-Fi File Transfer, with a browser connected

  1. Join a network under MENU > Wi-Fi.
  2. Open MENU > Wi-Fi File Transfer. It shows an address and a PIN.
  3. Open that address in a browser on your phone or computer, and type the PIN. The page opens on ROMs.
  4. Drag games into their console's folder, albums into Music, books into Audiobooks or films into Videos. They're on the shelf when you leave the screen.

The PIN is new every time you open Wi-Fi File Transfer.


No Wi-Fi network around?

Wi-Fi File Transfer as the handheld's own network: a QR code, the network's name, its password and the PIN

On the Pixel 2 with the adapter in and no network joined, Wi-Fi File Transfer makes the handheld its own Wi-Fi network for as long as the screen is open, and its row says hotspot.

  1. Open MENU > Wi-Fi File Transfer. It shows a QR code, the network's name and password, and the PIN.
  2. Scan the code with the phone's camera and join the network. A laptop joins with the name and the password.
  3. The phone opens the transfer page by itself, at 10.42.1.1. Type the PIN.

Close the screen and the network goes, and Wi-Fi is as it was. The phone's sign-in sheet is a small browser: on an iPhone it uploads but can't save a download, and on Android it downloads but can't upload. The page says how to open it in the real browser.


Adding games over the USB cable

Computer Connected: Charge Only, File Transfer or Developer (SSH)

The same thing over a cable, with no Wi-Fi, called USB File Transfer. It works with a Mac, Linux, or Windows 11; Windows 10 has no driver for this kind of connection.

On the Pixel 2 the USB port only charges until you say otherwise, so a computer sees nothing at first. When one is plugged in, the shelf asks once, Computer Connected: Charge Only (where it starts, and what B means), File Transfer, or, on development images, Developer (SSH). A wall charger is never asked about.

  1. Plug the device into the computer with a USB cable, and choose File Transfer. Or open MENU > USB File Transfer, which takes Wi-Fi File Transfer's place while a computer is on the cable. It shows an address and a PIN.
  2. Open that address in a browser on that computer, http://10.55.0.2 on the Brick or http://10.42.0.1 on the Pixel 2, and type the PIN.
  3. Drag games into their console's folder, albums into Music, books into Audiobooks or films into Videos. They're on the shelf when you leave the screen, or, with the transfer behind the shelf, a moment after they arrive.

While USB File Transfer is open on the Pixel 2, the computer can also open a shell on it: ssh root@10.42.0.1, with the PIN as the password. ssh-copy-id root@10.42.0.1 saves your key on the card, so later logins skip the PIN. Closing File Transfer ends every session.

Leaving the transfer screen

B closes File Transfer when nothing is moving. While files move, it asks first, with three choices:

  • Keep going: the screen goes, and the files keep moving behind the shelf while you use ZyperOS. A mark beside the clock says File Transfer is on, with a ring that fills as a file arrives, and MENU > USB File Transfer (or Wi-Fi File Transfer) opens the screen again with the same PIN.
  • Stop after this file: the file on its way finishes, then File Transfer closes. The page says which files stayed on the computer.
  • Cancel now: File Transfer closes at once. The file that was half written is deleted, so it never shows on the shelf as a broken game.

A game can't run while files move, because the game takes what moves them: starting one asks Not now, Play after this file or Cancel and play. With nothing moving, File Transfer closes for the game.

The File Transfer page

The page that opens in the browser is the same for Wi-Fi File Transfer, the handheld's own network and USB File Transfer, on a computer or a phone. It needs no app and no account, only the PIN on the handheld's screen.

The File Transfer page on a computer: the card's folders down the left with their pixel art, an NES folder open, and an upload under the folders with the time left
On a computer: the folders at the left, an upload under them
The File Transfer page on a phone, asking for the PIN in four boxes, with Zyper above them
The PIN
The File Transfer page on a phone: the folders as chips, ROMs open with a folder per console, each with its pixel art, and the Upload button
On a phone
  • The PIN goes in four boxes, and the page opens when the fourth digit lands; a paste fills all four. Zyper shuts his eyes while you type. Five wrong PINs and the page waits 30 seconds.
  • The card's seven folders: ROMs, Music, Audiobooks, Videos, BIOS, Saves and Save States. Every folder wears ZyperOS's pixel art: each console's folder its own picture from the home screen, on a tile in its color, and the others a cartridge, a cassette, a memory card and so on. Hidden folders such as .media stay out of the lists.
  • Upload by dropping files anywhere on the page, into the folder that is open, or onto a folder's row. A dropped folder keeps the folders inside it, and a console's .media folder of covers too. Upload and Upload folder use the file picker instead. The uploads under the folders say how much is left and about how long it takes, and each file shows its progress.
  • The card's free space is under the folders. Files that don't fit are caught before anything is sent, and the page offers to send the ones that fit.
  • Each file and folder has a ⋯ (or a right-click on a computer) for Download, Rename and Delete. Delete always asks first. New folder makes one. In an album or a book, Tidy names renames its files and the folder to the names MP4 shows, and lists each rename before it makes any.
  • On a phone the folders are a row of chips, Upload is a button under your thumb, and the rest is behind the ⋯ at the top.
  • Settings, at the foot of the folders (behind the ⋯ on a phone), holds the rest:
    • Update ZyperOS over the USB cable, where the handheld has no internet: the page finds the newest release on GitHub and downloads its files to the computer, you drop them on the page, and the handheld checks the release's signature and every file, then installs it as System Update does.
    • Box art and album covers over the USB cable use the computer's internet: the page fetches the missing covers from libretro's collection and the Cover Art Archive, and the handheld matches each one to its game or album.
    • The SteamGridDB key, pasted in, which beats typing 32 characters on the handheld. The page never shows it again, only its last four characters.
    • Show hidden folders, for the covers in .media.
    • Download logs gets the handheld's logs for a bug report (below).
  • On the handheld's own network the page opens by itself in the phone's sign-in sheet, with a note on what that small browser can't do.

The page is light or dark as the phone or computer is. When File Transfer closes, the handheld reads the card again, so what arrived is on the shelf.

System Update

MENU > System Update: 0.1.0 to 0.1.1, System and ZyperOS, A Download, B Back

MENU > System Update keeps ZyperOS up to date over Wi-Fi. It looks once a day, and its row in MENU says when there is something new. Its page shows the two versions and what downloads; A downloads, checks and installs it, and Restart Now starts the new version. Only the files that changed download, each one checked against a list signed with ZyperOS's key. It needs 25% battery, or the charger.

A new version starts on trial: if it doesn't start, the handheld goes back to the one before by itself. Y rolls back one version by hand. A card installed with two 512 MB system slots, which new installs have, updates the system itself too, written to the slot that isn't running. A card from before the slots, or with smaller ones, gets updates of ZyperOS, and a new system for it comes with a fresh install from the ZyperOS Installer.

Without Wi-Fi, Update ZyperOS on the File Transfer page installs a new version over the USB cable, with the same checks.


PortMaster

Install PortMaster: its crane icon, PortMaster's version, what it is, and the download's bar at 9.8 of 24 MB

PortMaster is the port store Linux handhelds share: PC games made to run on them, such as Stardew Valley and Celeste, each with what it needs. ZyperOS installs the official PortMaster app, as muOS, Knulli and ROCKNIX use it.

On the Ports shelf, PortMaster's entry has a cover of its own, drawn for ZyperOS in its pixel style for the light and dark themes: a dock crane lowering a game cartridge onto a stack of shipping containers. It is the same cover before and after the install, on Favorites too. The entry says Install until PortMaster is on the card. A opens its page, and Install downloads PortMaster's latest stable release from its GitHub over Wi-Fi (a USB Wi-Fi adapter on the Pixel 2), about 24 MB. ZyperOS checks it against the size and checksums PortMaster and GitHub publish, then unpacks it into Roms/Ports. Nothing goes in place until all of it checks out, so a cut-off download leaves no half-installed PortMaster. Then A opens it, from the page or the shelf, like any port, and PortMaster updates itself from then on.

Its first start unpacks its own files and downloads its catalog of ports, which takes a few minutes. Pick the ports you want in PortMaster; they are on the Ports shelf when you leave it. Many ports of commercial games need the game's own files from a copy you own, and PortMaster says which and where they go: the File Transfer page sends them from a computer to the port's folder, under ROMs > Ports, over Wi-Fi or the USB cable. Ports copied from another system's ports folder run too.

When a port runs, ZyperOS steps aside to give it the memory, puts its own PortMaster settings for the Pixel 2 in place, and keeps the volume keys and POWER working. PortMaster is not part of ZyperOS: it comes from the PortMaster team, under the MIT license.

Controls over a port: the d-pad, A, B, X, L1/R1 and START+SELECT as its README says them

MENU over a port, or over PortMaster, pauses it under the in-game menu: Continue, Controls and Quit, back to the Ports shelf. X quits from any row, as in every in-game menu. The game stops where it is and nothing you press in the menu reaches it. Controls reads the port's own files: what its README says each button does, the keyboard key each button types for it (its gptokeyb keymap), the buttons that work in every port (MENU, MENU then X to quit, the volume keys, MENU + VOL for brightness, SELECT + START, PortMaster's own way to end a port, and POWER), and, last, what its PortMaster entry says to copy where. Over PortMaster it lists PortMaster's own buttons: Up/Down move, L1/R1 a page, A chooses, B goes back, X filters the list, Y uninstalls a port. Quit ends the port, its helpers and the runtime it mounted, then the shelf comes back.


Removing ZyperOS

Take the card out, and the Brick starts its own system again, unchanged. On the Pixel 2 the system lives on the card, so a card with another system takes its place.

Everything ZyperOS keeps is on the card, Wi-Fi passwords and Bluetooth pairings included, so reformat it before you give it away.

Controls

Button What it does
A / B Choose and back
MENU Settings for whatever you're looking at. In a game: save, load, quit and more
X in the in-game menu Quit, from any row: the Quit row shows the X button
SELECT MP4, the music, audiobook and video player, from anywhere. In MP4, X or SELECT + START locks the screen and holding SELECT + START unlocks it
Up / Down In a menu, move the cursor; it stops at the first and the last row and does not wrap. On a shelf, jump to the next or previous letter. On the home, jump a letter with MENU > System Order on A to Z, three systems with it on release date
L1 / R1 Jump three systems on the home, a screenful of games on a shelf
L2 / R2 The previous and next song on the home and a shelf: MP4's while it plays, else the menu music's
SELECT + R1 / L1 In a game, quick save and quick load, to the in-game menu's Quick Slot
SELECT + R2 / L2 In a game, faster (1.5x, 2x, 3x) and slower, back to normal speed
X / Y In a game, turbo A and B. On the shelf, X opens a game's details (Favorite, with Y, and Delete Game) and Y starts a game from the start
POWER Save and turn off. Over a port, it ends the port first. The next start continues the game; after a crash or a power cut it starts on the home
MENU + START, held a second The way out: ends whatever runs, a stuck game or port included, and brings back the home
MENU over a port The in-game menu over it: Continue, Controls, Quit (or X)

The device lists every button under MENU > Controls, and in a game, Controls in the in-game menu lists what each button does in that game. The guide covers every control, menu and setting in detail.

FAQ

My games don't show up.

Check the folder name against the table above, spelled exactly, and that the file type is listed for that console. A console with nothing in its folder is hidden. Games sent over Wi-Fi File Transfer appear when you leave its screen. Games copied any other way while the device is on appear after Rescan Folder in that console's menu, or after a restart. The log names every file a console's folder left out, and the file types it takes.

A game has no box art.

MENU > Scraper > Fetch Missing Art fetches every missing cover over Wi-Fi. Link a free ScreenScraper account on its page in Scraper and it asks there first, and brings each game's name, year, genre and synopsis for its details screen. ScreenScraper also needs the developer pair ZyperOS is built with: a build without it says not in this build on that page. Without an account, or for a game ScreenScraper doesn't have, it uses libretro's thumbnail collection, looking a game up by its file name and, for zipped games, by checksum.

For what neither has, like homebrew, hacks and ports, give it a free SteamGridDB API key (steamgriddb.com, Preferences, API) on its page in MENU > Scraper, or paste the key on the File Transfer page, which beats typing 32 characters. Box Art then asks SteamGridDB last, for a portrait cover by the game's name. The key stays on the card's settings and shows only its last four characters.

Some games aren't in any collection, like fan translations. Add your own: a PNG named exactly like the game file, in Roms/<console>/.media/. Black Castle.gb wants Black Castle.png. Around 512 pixels on the long side is plenty.

Covers go over USB or Wi-Fi File Transfer too: drag a console's .media folder onto that console's folder on the page, and its covers land in the card's .media (Cmd-Shift-. shows hidden folders in Finder). Safari leaves hidden folders out of a folder it sends, so a whole console's folder sent from Safari arrives without its covers: send its .media folder on its own. The litter a Mac leaves, .DS_Store and ._ files, always stays behind.

Don't like a cover? Press X on the game and choose Cover and Video. The cover on the shelf is at the left and what libretro, ScreenScraper and SteamGridDB offer is at the right, each named (box front, 3D box, title screen, screenshot, fan cover) with where it comes from. A shows one big beside the one you have, and A again uses it. The cover it replaced stays as Before, and A on it puts it back. The same page shows the game's video snap: watch it with sound, download or replace it, or delete it.

A game's Cover and Video page: Now at the left, the pictures found at the right with the focused one named Box Front, USA, from ScreenScraper, and the game's video with Watch, Replace and Delete
What the sources offer, beside the cover you have
Look Closer: one picture big beside the cover on the shelf, with Back and Use as Cover
A look before anything changes

With ScreenScraper linked, MENU > Scraper > Video Snaps can fetch each game's video snap with its cover. Rest on a game for three seconds and its cover turns into the snap. They take room, a megabyte or three a game: the page shows how much for each console, turns each one on or off, and deletes them all. Their sound is muted to start.

What fills my card?

MENU > Storage, just above System Update. The bar shows the card by part: games, saves and save states, art (covers and video snaps), media (music, videos, audiobooks), ZyperOS itself, and the rest. Under it, every system and folder by size; A on a system opens its page, with its games largest first. A on a game there asks Delete Game's question. A on Music, Videos or Audiobooks opens its albums, films and books by size, with your own menu music and the covers and playlists beside them; A on one asks before it goes, with the room it gives back. X changes the order of the list you are on: by size, A to Z, or last played (not on Music, Videos and Audiobooks, where nothing records what was played). Each list keeps its order. The first time, Zyper measures the card while you wait; after that the page opens at once and updates itself.

MENU > Storage: 120.5 GB used and 7.4 GB free of 128 GB, a bar by part, two recommendations, then PlayStation, Videos and Sega CD by size
The card by part, then by size
PlayStation's page: 3.8 GB in six games, its bar of games, saves and art, Delete Video Snaps, then its games largest first
A system's games, largest first
Music's page: 5.2 GB in 318 songs, then its albums largest first, and X beside the list for the order
Music's albums; X changes the order

Unused Art deletes the covers and video snaps of games that are no longer on the card; a fetch in MENU > Scraper can bring them back. Old Save States deletes the save states of games none of whose states was written in a year and that you have not played in one. Your saves stay. Each asks first, with the room it gives back, and the cursor on Cancel.

How do I delete a game?

Press X on the game, choose Delete Game at the bottom of its details, and answer Delete. The cursor starts on Cancel, and B is Cancel too. It works from Favorites as well, and on Ports: a port goes with the folders its PortMaster port.json names, its saves in them, and PortMaster itself always stays.

A game's details, the cursor on Delete Game
Delete Game, the last row of a game's details
Delete Game's question: Delete Metal Gear Solid? Its saves and states, cover and video go too. This cannot be undone. Delete, and Cancel under the cursor
It asks first, on Cancel

What goes, and nothing else:

  • The game: its file, or its folder for a game in a folder of its own (a multi-disc set with its .m3u, a ScummVM game). A .cue, .gdi or .toc at the top of the folder takes the track files it names, and a .cue its .sbi. An arcade set is its .zip, and on NAOMI and Atomiswave the folder of its name that holds its CHD.
  • Its saves: Saves/<game>.srm, .sav and DraStic's .dsv, and the arcade cores' own, in Saves/fbneo/, Saves/mame2003-plus/ and Saves/reicast/.
  • Its save states: the six slots and the autosave, with their pictures.
  • Its cover and video snap in .media/, and its cached achievement set.
  • Its details, title, favorite and play time in the card's library.

A file that another game on the card still uses stays: a save two systems' games of the same name both write, a cover a .cue and a .chd of one name share, a .bin that a second .cue names. A BIOS set on a shelf, like neogeo.zip, is never deleted. Achievements you earned stay on your account. If a .cue or .m3u names a file outside the game's folder, nothing is deleted and the handheld says so. Ports are not deleted from here: a port's files are spread over its script, its folder and PortMaster's shared ones, so delete it with File Transfer.

How do achievements work?

Sign in under MENU > Achievements with your RetroAchievements account. A game's first start needs Wi-Fi, to identify the game and fetch its achievements. From then on it plays offline too: what you unlock without Wi-Fi waits on the card and reaches your account the next time the handheld connects.

The notice over a game when an achievement unlocks: its badge at the left, 'Unlocked · 10 points' over its name, and Zyper at the right

An unlock shows its badge, its name and its points for a few seconds, with Zyper at the right. Each achievement's badge is a small picture (64 pixels) from RetroAchievements, kept on the card beside the game's achievements. It is fetched when the handheld is online and the game is not running, never during a game, so no frame waits on the network. Until a badge is on the card, in the list and in the pop-up a trophy takes its place, and it changes to the badge by itself. A handheld that is never online can get them from a computer: tools/ra-sets.py puts each game's achievements and badges on the card.

Can I use Bluetooth headphones?

Yes, on the Brick. Put them in pairing mode, open MENU > Bluetooth, press Y to search and A to pair. They reconnect by themselves from then on. Wired headphones always win when they're plugged in.

The Brick's volume buttons set the headphones' volume, and the headphones' own volume buttons move the Brick's. On a few headphones, the Brick's buttons set only the starting volume; after that, change it on the headphones themselves. Play, pause and skip on the headphones control MP4.

The Pixel 2 has no Bluetooth: use wired headphones, or a USB-C headphone adapter.

How do I add music?

Put it in Music/ on the card, from a computer, over Wi-Fi with Wi-Fi File Transfer, or over the USB cable with USB File Transfer, a folder per artist and a folder inside that per album: Music/Radiohead/The Bends/01 Planet Telex.mp3. An album folder put straight into Music/ is moved under its artist when its tags name one, and songs in no folder at all are moved into Music/Singles/, an album of their own. MP3, M4A, M4B, MP4, AAC, FLAC, Ogg, Opus and WAV all play. MP4 appears on the shelf once there's music, and each album's cover comes from its own files, or a picture in the album's folder. MENU > Album Art on MP4's shelf fetches a sharper cover over Wi-Fi from MusicBrainz's Cover Art Archive for any album whose files carry none, or only a small one.

How do I add audiobooks?

Put each book in its own folder in Audiobooks/, with an author's folder above it or without: Audiobooks/Iain M. Banks/The Hydrogen Sonata/ or Audiobooks/The Hydrogen Sonata/. One M4B or a folder of MP3s both work, and the files play in name order. MENU > Show on MP4's shelf starts on All, your music, books and videos together, and switches to one of them alone. A book remembers where you stopped, even through a power-off, and one played to the end is marked finished; A on it starts it over.

How do I add videos?

Put them in Videos/ on the card. A film on its own goes straight in, Videos/Where the Light Is.mp4, and is a card of its own; a folder of videos is a series, its files in name order, with seasons as folders inside it if you like: Videos/Planet Earth/01 From Pole to Pole.mp4. A picture named like the film, Where the Light Is.jpg, is its cover; otherwise MP4 takes one from the video itself. Every video remembers where you stopped.

The Pixel 2 has no hardware video decoder that its Linux can use, so its four cores decode in software. H.264 in an .mp4 plays smoothly up to 720p; 854x480 or 640x360 is the size to make for its 640x480 screen, and costs a fraction of the battery. HEVC and VP9 play up to about 480p. 1080p only just keeps up, dropping frames when the picture moves a lot. AV1 does not play. MKV, WebM, MOV and AVI files play too, if the video inside them is one of those.

Y turns a video between full screen, where the controls show only when you press a button, and a view with its controls always on screen.

Where are my saves?

Battery saves are .srm files in Saves/, named after the game. Save states, the autosave included, are in .userdata/shared/.zyperos/, one folder per console. Neo Geo Pocket Color games write no .srm, so their progress lives in the autosave.

Something went wrong. How do I send the logs?

Open MENU > Wi-Fi File Transfer (USB File Transfer over the USB cable), open its address in a browser, and click Download logs under the folders (behind the ⋯ on a phone). You get one .tar.gz file holding the last ten boots' logs and a short summary of the device, ready to send to whoever is helping you. Wi-Fi network, headset and account names are masked in it, and the logs on the card are left as they are. The logs themselves are on the card, in .userdata/brick/logs/ on the Brick and .userdata/pixel2/logs/ on the Pixel 2.

For developers

ZyperOS is C and SDL2, two repositories that build together:

  • ZyperOS (this one): the launcher, the card's scripts and the tools, in diatom/ the libretro frontend that starts once at boot and stays running (its own Makefile, under the Mozilla Public License 2.0), and in installer/ ZyperOS Installer, which puts ZyperOS on a card from macOS, Windows or Linux (Rust and Tauri)
  • plastron/: the Linux under it, built with Buildroot in Docker (its own license, the GNU GPL version 3, in plastron/LICENSE)

Building covers the toolchain, the card and the checks. With a development build on the card and the Pixel 2 on the USB cable, make -C plastron push writes a new system to the device, and tools/px2-deploy.sh puts a new ZyperOS on it, without taking the card out. On a development image, MENU > Developer Mode (on to start) keeps the USB link to a computer up with no question, for the image's own SSH at 10.42.0.1. A release image has developer mode instead, which you turn on yourself.

Developer mode

A release image starts no SSH and holds no key, so a shell on it is yours to ask for. Developer mode is how, and it stays out of the way until you look for it. On MENU > About, on the first page (the one with the version), hold L2 and R2 together for five seconds. A Developer Mode row appears with a bar that fills as the seconds pass, and letting go of either button, or leaving the page, starts again. When it is full, a message says Developer Mode is on, and the row stays on the first page as on. MENU > Developer Mode then opens its page, where A turns developer mode off again.

With it on, the Pixel 2 behaves like a development build for as long as a computer is on the cable. The USB link stays up with no question, and SSH runs on the cable's address, ssh root@10.42.0.1, never over Wi-Fi. Closing a page or starting a game does not end it, and when the launcher restarts (a tools/px2-deploy.sh run does that) the sessions drop and SSH is back a few seconds later, so a key logs in again. Pulling the cable out, or turning developer mode off, ends it. There are two ways in, and both are yours:

  • A key from the card. Copy your public key, id_ed25519.pub or any .pub file (or an authorized_keys file), into the Developer folder at the card's root; the Pixel makes the folder the first time. Plain public keys only: a line with options in front, such as a forced command, is skipped. A key taken is kept with the ones ssh-copy-id saves. The folder is outside ZyperOS/ because an update swaps that one for the new version's.
  • A password for this plug. The Pixel makes eight random characters each time a computer is plugged in. Only MENU > Developer Mode shows them, and nothing keeps them. Five wrong ones lock SSH until the next plug, as File Transfer's PIN does. This is also how the first key gets in without taking the card out: sign in with the password, then run ssh-copy-id root@10.42.0.1.

MENU > Developer Mode opens the page: the command, the password, where the keys go, how many it read, and SSH's status. A there turns developer mode off; B closes the page and leaves everything running. Nothing is shipped in the image: no password, no key. A development image is unchanged: its SSH starts at boot with the key in plastron/local/authorized_keys, and tools/px2-deploy.sh works as before.

Releasing: make release PUBLISH=1 on the Mac builds the card image and makes the draft release; the tag it pushes has GitHub build ZyperOS Installer for macOS, Windows and Linux, add it to the same release and publish it. Every version's release has the image and the installer together. A release also carries System Update's pack and its list, signed with ZyperOS's release key (tools/update-key.sh) (how it works).

Without the device: ZyperOS runs on a Mac in QEMU (tools/qemu-run.sh, plastron's make qemu), and the simulator shows it as a Pixel 2 in a window, its buttons, battery, cable and side lights included. Speed, the GPU and the hardware itself still need the device.

Credits

ZyperOS stands on other people's work:

  • BenJelter, for the pixel console art in the Console Icon Pack.
  • YOjeremyRaps, for the additional consoles, icons and animations in Pixel UI - Smart Folders, based on BenJelter's pack. Asset credits distinguish imported art from ZyperOS additions.
  • Evan-Amos, Xxm, Black Squirrel, Jpl752 and Mahcann, whose hardware photos on Wikimedia Commons the nine missing system icons are drawn from.
  • Eric Reinsmidt, for TortOS, TortOS Installer, plastron and Diatom, where ZyperOS's launcher, installer, Linux and emulator started. His code in ZyperOS keeps his copyright and notices.
  • ROCKNIX, for the RK3326 kernel patches, the Pixel 2 device tree, the U-Boot setup and the DDR clock driver.
  • PortMaster, for the ports and the runtimes they run on.
  • plorpOS by Thwonp, for the DSperate libretro wrapper and the FAKE-08 patches.
  • congusbongus (Napping on a Cloud), Zane Little Music (Apple Cider, Hush Hamlet), HydroGene (Truth), Spring Spring (Scheatt), TAD (Ice Cave), John Oestmann (Starfall Island), nene (Leap), LordZintick (The Arplands) and Joth (Bossa Nova), whose free 8-bit tracks are the menu music a fresh card plays, all given away under CC0 on OpenGameArt (THIRD-PARTY-LICENSES.md).
  • The libretro core authors, ScummVM's, YabaSanshiro's and FreeJ2ME-Plus's among them, whose emulators do the real work, each under its own license (THIRD-PARTY-LICENSES.md).
  • OpenBOR, by Senile Team and the OpenBOR Team, which runs the OpenBOR shelf.
  • Eclipse Temurin (OpenJDK) and DejaVu Sans, the Java runtime and the font J2ME games run with.
  • minimp3 by lieff and stb_vorbis by Sean Barrett, which decode the menu music.
  • Rockchip, for the firmware that starts the Pixel 2 and runs its memory at full speed.

License

ZyperOS is open source, under the GNU General Public License, version 3 (GPL-3.0-only), so anyone can build on it. The NOTICE adds two terms that section 7 of the GPL allows. The first keeps the name ZyperOS, ZyperOS Installer, Zyper (the miniature schnauzer the system is named after) and his art, the logo and the website as trademarks, so a fork needs its own name and mascot; naming ZyperOS to say where your work came from is always fine. The second asks you to keep the copyright notice, the NOTICE and the attribution in the About screen when you share it. TRADEMARK.md says in plain words what is and is not fine. Versions published before 2026-11-06 were under the GNU General Public License, version 3 or later, and for a short time after that ZyperOS was under the PolyForm Shield License 1.0.0; this is GPL-3.0-only. Eric Reinsmidt's TortOS code in ZyperOS is from TortOS's MIT-licensed versions and keeps his MIT notice (LICENSES/). plastron stays under the GNU GPL version 3 and Diatom under the Mozilla Public License 2.0. The cores keep their own licenses, some of them non-commercial. OpenBOR, a program of its own on the card, is under the BSD 3-Clause License. Flycast 2.7 is a separate program, not part of ZyperOS. Full notices are in THIRD-PARTY-LICENSES.md.

About

A fast, light firmware for the GKD Pixel 2 that plays your whole retro library: forty systems, PortMaster ports, and your music, audiobooks and videos.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages