A controller-first handheld system built around your games, your progress and the people you play with — not emulator menus.
TrainerOS is the interface you boot into, browse your library from, talk to friends in, launch games from and come back to when you are done.
For an ordinary game, that can be as simple as pick it → press A → play → press Home → return.
For games TrainerOS understands more deeply, the boundary starts to disappear. Your party, progress, collections and history can live in the system around the game. Friends can see that you are playing, ask to join, and enter a supported multiplayer game without opening an emulator lobby or typing an IP address.
The first supported Adventure connects a creature-collecting RPG to the OS beyond launching it. Other supported series have their own collections; unclassified games remain in the Multiverse.
TrainerOS is still in active development, but the current build already runs as a dedicated handheld session on Retroid Pocket Flip 2 and AYN Odin 2.
Full-resolution handheld screenshots — 4 October 2026
Interactive website demo — a mouse-driven interface tour with original fictional content and optional animated examples. The static bundle can be served independently or embedded in a website; it does not run emulators or connect to real accounts.
Full target specification: Product vision (Russian). It describes planned behaviour; current implementation and acceptance remain in the linked feature records.
This repository currently provides source and development deployment tooling, not a ready-to-flash public TrainerOS image. Prepared Flip 2 and Odin 2 installations have real device evidence; that does not establish a fresh-install experience on every handheld. Selected game artwork and names are blurred in the public screenshots; the surrounding interface is unchanged.
- Build and run from source
- Project status (Russian) · Changelog (Russian) — current capabilities, evidence and dated changes for posts and the website.
- Documentation · Contributing
- Current tasks and remaining acceptance · Roadmap
- Security reporting · Licensing and third-party materials
| Area | Current boundary |
|---|---|
| Library, series and handheld shell | Installed device evidence; compatibility depends on available runtimes/content |
| Semantic game integration | Exact supported game/build adapters, not all games on a platform |
| Social and multiplayer | Implemented routes with bounded evidence; distinct-network, larger-group and human audio acceptance remain open |
| Public distribution and updates | Armada image and SteamOS/Bazzite convergence installer share a planned release state; updates, rollback and repair remain planned |
| Code license and public artwork | Original code: GPL-3.0-or-later; third-party terms remain separate and artwork review is ongoing |
Collections opens the collection browser. Some collections include regional worlds; other supported series have their own game wheels. Unclassified games remain in the Multiverse. Home adapts to the selected Adventure; Y opens global Recent games, and selecting an entry changes Home without launching it.
![]() |
![]() |
There is no normal setup screen between the library and the game. If a game is ready, A launches it.
TrainerOS keeps emulator paths, cores, command lines and room settings out of the everyday interface. Press Home while playing to open Game Options: continue, minimize and browse TrainerOS, invite someone when multiplayer is available, or exit cleanly. Returning to a minimized game restores the same running process; a universal pause is not promised.
Your ordinary game save stays the ordinary game save. TrainerOS does not make savestates the center of the experience.
The general library can use Batocera-style folders and existing metadata, artwork and local video previews. Player-count information can be shown where it is known, and games with supported multiplayer can expose it directly from the library instead of making you remember which emulator happens to support what.
Social is built into TrainerOS. It is not a link that throws you into another app.
Messages brings direct and group conversations together; Communities and Discover stay alongside it. A compact composer leaves room for the conversation: write and send, attach a picture, choose emoji or record a voice message. Call from the header; open a person's name for their Fluxer profile. Touch and controller controls work in parallel.
![]() |
![]() |
And the chat actually knows about games.
If a friend is playing a compatible game, open ⋯ beside their name and choose Ask to join game. Y also opens shared activities. They get Accept / Decline in Home. Once accepted, Home and Social show the same party roster and readiness; the organizer presses Start game. Group menus keep membership, game access and notification controls together.
TrainerOS handles the rest underneath. No copying IP addresses. No emulator room browser. No asking your friend which core they launched.
You can also go the other way: while playing, open Home → Play together and pick a person or group. Nearby and Online friend labels explain the available connection.
If you leave a supported match while the host keeps playing, the conversation can show the open place again so you can Join game and return to the same running host. Groups can keep their chat and membership while different game parties start and end inside them. Selected members can be allowed to join your games without making you approve the same person every time.
A group voice call is separate from a particular match, so the same friends can keep talking while somebody changes games, leaves a party or joins another one.
Real paired gameplay has already been exercised on handhelds with several classic console games, PSP Lumines and supported multiplayer titles. Some supported games can prepare three or four player seats as well. Compatibility is still being expanded and verified game by game; TrainerOS does not label every multiplayer ROM as online-capable just because an emulator can launch it.
The first supported Adventure shows how a playthrough can connect to the OS.
With a supported save, the creatures you see in TrainerOS are the same ones that are in your game.
![]() |
![]() |
The Field Guide can show real Seen/Caught progress. Party shows the actual six party members. Boxes reads the real storage. Journey can follow real badges and milestones.
The connection also works in the other direction.
From TrainerOS, supported saves can already be healed, creatures can be moved between Party and Boxes, occupied slots can be swapped, held items can be managed, Boxes can be renamed, and protected releases can be performed. Shops and services can spend the game's real currencies and put the purchased result into the real save.
Launch the game afterwards and the game sees the change.
![]() |
![]() |
The Playroom is deliberately less practical. It gives the real current party somewhere to exist on the handheld outside battles — moving around, reacting and simply being present instead of turning every party screen into another spreadsheet.
TrainerOS also has its own Link activities. Two nearby TrainerOS handhelds have already completed protected trades, gifts, creature sales, native trade evolutions and full-team battles using the real saves. That is separate from ordinary emulator multiplayer: persistent creatures moving between two Trainers needs its own safeguards and recovery.
A Trainer belongs to the person using the handheld, not to one ROM.
Multiple local Trainers can have their own profiles, optional PINs, history, navigation state and accounts while sharing the same installed game library. The first isolated ordinary-save route is already working for one supported emulator runtime, with more runtimes planned to follow.
Journey keeps the larger story: current progress, milestones and eventually the pieces worth remembering after a particular save has moved on. Hall records and RetroAchievements remain their own sources instead of being mixed together into invented progress.
The intended end state is that your Trainer can survive the device too: export it, restore it after a reflash, or move it to another supported TrainerOS handheld without treating the whole system as disposable.
The Multiverse is a full part of TrainerOS, not a waiting room for games that do not have special integration.
A game can simply have a good cover, video preview, play history, direct launch, Home menu and clean return. That is enough.
Series collections and adapter-owned Home/game sections are already available. The installed framework hosts the Pokémon experience and a general fallback; new game families still need their own verified adapters. A Sonic, Final Fantasy, Metal Slug or Need for Speed section should use concepts that fit those games. Test modules do not establish those commercial-game integrations.
Installed Steam games are intended to join the Multiverse in the same way. Steam itself remains available for the things Steam is good at; TrainerOS only needs to make the installed games feel like part of the same handheld.
The main navigation stays small:
Home ⇄ Collections ⇄ game section A ⇄ game section B ⇄ Social
L1/R1 moves between those spaces. The selected Adventure supplies the two game sections and Home content. L2/R2 moves between supported related views; Home has no collection cycling.
For the installed Pokémon experience, Companions contains Field Guide ⇄ Party ⇄ Boxes ⇄ Care Center ⇄ Playroom ⇄ Shops.
Its Trainer section retains the game persona, Journey, Hall and RetroAchievements. The universal player profile is available through shared Options, independently of the selected game's progression.
Social contains Messages ⇄ Communities ⇄ Discover. Messages includes both direct and group conversations.
First run already walks through controls, optional Wi-Fi/Bluetooth, date and time, game storage, Trainer creation and an optional PIN. It can continue offline and resume if setup is interrupted.
![]() |
![]() |
Start opens the small system menu. Settings handles the things you normally expect from the handheld itself: connections, display and audio, storage, accounts and communication settings. Plasma stays available as an explicit maintenance/recovery environment, and Steam remains installed.
The point is not to remove Linux. The point is that you should not have to use a Linux desktop just to use your game console.
The public form of TrainerOS is intended to be a ready-to-use ArmadaOS-based system image for supported handhelds, not a weekend of manually installing a frontend and configuring a dozen emulators.
On first boot: choose the basics, point TrainerOS at internal or removable game storage, create your Trainer and start using the device. Supported emulator setups belong in the image. Your ROMs, firmware, saves and personal media remain yours.
The remaining big pieces are the boring-but-important ones that turn the current development handhelds into something other people can safely live with: reproducible images, staged updates with rollback, portable Trainer backup/restore, wider handheld support, more verified multiplayer routes, more game families and final user-installable artwork.
What already exists is deliberately kept separate from what is merely planned. TrainerOS may know that a game launches without claiming it understands the save. It may know that a game has four players without claiming four real TrainerOS users have completed a session. Unsupported things stay unsupported instead of becoming optimistic buttons.
For the current implementation status and the long version of what remains, see the Roadmap. For the much nerdier development evidence, the project docs are there on purpose so this README does not have to become one.
TrainerOS does not ship commercial ROMs, BIOS files, commercial saves or private ripped media.
TrainerOS is an unofficial fan-made project and is not affiliated with game publishers, Retroid, AYN, ArmadaOS, Valve, Fluxer, ScreenScraper, RetroAchievements, Libretro or the emulator projects it can work with.
Original TrainerOS code is licensed under GNU GPL version 3 or later (GPL-3.0-or-later). See LICENSE, scope and redistribution and third-party notices. This software license does not grant rights to game artwork, media or trademarks.













