Skip to content

Releases: MMagTech/cabinet

Cabinet for tvOS 1.0.0

Choose a tag to compare

@MMagTech MMagTech released this 04 Sep 11:16

The first release without "alpha" in its name. Full notes for all three platforms: docs/release-notes-1.0.0.md.

The phone-as-controller pairing on the television side; the experimental
cores switch; every settings switch in the page's own focus style; and
Home never offering to resume a game the television cannot play.

Also on this release: faster frames from the readback ladder's third rung, and Nintendo 64 behind the Experimental Cores switch.

What this release takes away

Dreamcast on iPhone and Apple TV. See above; it lives on the Mac now.

Installing

TestFlight, or the unsigned IPA below with Xcode from a Mac.

Cabinet for Mac 1.0.0

Choose a tag to compare

@MMagTech MMagTech released this 04 Sep 11:50

The first release without "alpha" in its name. Full notes for all three platforms: docs/release-notes-1.0.0.md.

A Mac has the desk, the disk and the chip the phone and the television do
not, so Cabinet for Mac is the television's app at arm's length, with the
systems only a desk machine can carry.

PlayStation 2 and GameCube, on the Mac alone, running PCSX2 and
Dolphin with their real recompilers, at full speed with audio. GameCube
gets its memory card synced to RomM, a save state slot and three picture
settings; PlayStation 2 gets its renderer remedy where you would look for
it.

Dreamcast moves to the Mac. On the phone and the television it never
reached full speed in heavy 3D, because those platforms do not allow the
kind of compilation the console's CPU needs, and a game that is not fully
playable is not offered. On the Mac the recompiler is on and it is. The
same rule now decides every core: fully playable, or not at all.

The recompilers are on for Nintendo DS and PlayStation too, which is
the reason the Mac exists.

A source list, not tabs. The library, your favourites and Downloaded
in a sidebar; a Settings window at Command-comma; menus that carry the
app's choices; the launch screen pushed in place with a back button; a
game screen and a control panel built for a pointer and a keyboard, or
your iPhone as the controller, as it already is for the television.

Download All, per platform. Right-click a platform, or use File,
and every game on it comes down in one queue, with the count and size
stated first and a status line at the foot of the sidebar while it runs.
Remove All Downloads and Show in Finder sit beside it; kept games live in
a Cabinet folder under Documents, laid out like your RomM library.

Installing

Open the disk image and drag Cabinet to Applications. Signed and notarized. Apple silicon, macOS 15 or later.

Cabinet for iOS 1.0.0

Choose a tag to compare

@MMagTech MMagTech released this 04 Sep 11:17

The first release without "alpha" in its name. Full notes for all three platforms: docs/release-notes-1.0.0.md.

Download All, for the phone. The same one action per platform, from
the platform's menu or a long press on its tile. The files come down
through the system's own background downloader, over Wi-Fi only, so a
platform started at the table finishes with the phone locked in a
pocket; a queue the system quit the app in the middle of carries on at
the next launch. Progress lives where iOS shows it: the Dynamic Island,
the Lock Screen, and a card at the top of Home; a notification says when
it is done. On cellular it waits, and says so.

A home screen widget, in three sizes, showing what you played last,
your recents or your favourites, each cover a tap into its game. And
Spotlight: type three letters into the phone's own search and the game
is there, with its cover, and opens straight in.

Your phone is the VMU. While the Mac plays a Dreamcast game, the
phone in your hand shows the VMU's live screen, and the VMU minigames run
on the phone itself, through a twenty-third core.

Experimental cores. Nintendo 64 now sits behind a switch in Settings,
off by default: it runs, but speed varies by game, and the switch says so.

Faster frames on both iPhone and Apple TV, from a third rung on the
readback ladder that stops waiting for the GPU.

And the fixes. The app no longer freezes or gets killed at launch
with a large library of kept games. Removing a download in airplane mode
takes effect at once. Games the device cannot play stay on Home but
never in the hero. The pad stick's vertical axis now follows the
convention every other emulator uses.

What this release takes away

Dreamcast on iPhone and Apple TV. See above; it lives on the Mac now.

Installing

TestFlight, or the unsigned IPA below with AltStore or SideStore.

Cabinet for tvOS 0.3.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 28 Aug 21:05

Cabinet for tvOS 0.3.0-alpha

A phone can be your controller

Pair a phone once with a code shown on screen. Two phones are two
players, and they share seats with any controllers already paired.
Someone with no RomM server of their own can install Cabinet on their
phone and be a controller and nothing else.

Three new systems

Virtual Boy, Nintendo DS, and PSP.

The DS uses both screens

This screen keeps the top one and a paired phone becomes the bottom
screen and stylus. The bottom screen is visibly pulled off the television
and lands in your hand.

Light gun, sighted in

A phone becomes a light gun. Shoot the middle of the picture and two
corners to sight it in, then play.

Arcade cabinets get their real controls

On a paired phone: wheel, pedals, spinner, trackball and gun, drawn as
the panel that cabinet actually had. Cabinet keeps what an arcade machine
keeps between sessions and syncs it to RomM.

Settings is five pages, not one column

Each category is its own page, and the Buttons screen was rebuilt for the
room you are sitting in. Core options read as settings, one row carrying
its current answer, with colours shown as colours.

N64, Dreamcast and PSP render faster

On a modern graphics path instead of the one Apple deprecated.

Fixed since 0.2.0

  • Some arcade games could freeze permanently after the emulator's own
    menu was opened once, and stayed broken on every later launch.
  • Loading a save state made by a different emulator could hang the game.
  • Choosing a different arcade emulator for one game re-routed the whole
    library.
  • Sound did not follow when audio output changed mid-game.
  • The top shelf offered games this Apple TV cannot play.
  • Cover art was missing on custom platforms.

Known limitations

  • PSP is new. Its saves sync and its save states work, but it has had the
    least time in real use of anything here.
  • Game & Watch is iPhone only, by decision.
  • Light gun support covers the arcade cabinets. The console systems are
    on the roadmap.

Cabinet for iOS 0.4.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 28 Aug 21:05

Cabinet for iOS 0.4.0-alpha

Your phone is a controller for your Apple TV

Pair it once with a code shown on the television. Two people with two
phones are two players, and phones share seats with any controllers you
already have. Someone with no RomM server of their own can install
Cabinet, skip setup entirely, and be a controller and nothing else.

Four new systems

Virtual Boy, Nintendo DS, PSP, and Game & Watch. That takes Cabinet from
eighteen systems running natively to twenty-two.

The DS uses both screens

The television shows the top screen and your phone becomes the bottom
one, in your hands, as the touchscreen it always was. The screen visibly
leaves the television and lands in your hands when you join.

Game & Watch plays like a Game & Watch

No on-screen controls. The machine fills the screen and you press its
buttons by pressing them.

Light gun, sighted in

Shoot the middle of the picture and two corners, and the gun knows where
your television is. Aim holds after reloading off screen.

Arcade cabinets get their real controls

Wheel, pedals, spinner, trackball and gun, drawn as the panel that
cabinet actually had. Cabinet keeps what an arcade machine keeps between
sessions, high score tables included, and syncs it to RomM.

Controls look like objects

Buttons stand up and press down when you press them. One switch turns the
whole idea off.

N64, Dreamcast and PSP render faster

On a modern graphics path instead of the one Apple deprecated.

Fixed since 0.3.0

  • Light gun aim drifted further wrong with every off-screen reload, and
    shots often did not register. Both fixed.
  • Some arcade games could freeze permanently after the emulator's own
    menu was opened once, and stayed broken on every later launch.
  • Loading a save state made by a different emulator could hang the game.
  • Choosing a different arcade emulator for one game re-routed the whole
    library.
  • Game Boy rumble was silently off.
  • Sound did not follow when audio output changed mid-game.
  • Cover art was missing on custom platforms, and taps registered past the
    edge of a cover.

Known limitations

  • PSP is new. Its saves sync and its save states work, but it has had the
    least time in real use of anything here.
  • Light gun support covers the arcade cabinets. The console systems are
    on the roadmap.

Cabinet for tvOS 0.2.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 22 Aug 19:16

Cabinet for tvOS 0.2.0-alpha

Four new systems, in-game saves that follow you between the television and
your phone, and the speed work that Apple TV needed most. Dreamcast went from
roughly 20fps to a locked 60, and Nintendo 64 from 50fps decaying to 27 up to
a steady 49.7.

Four new systems

3DO runs natively through Opera, with its BIOS coming from RomM the same
way Saturn's does, and its NVRAM saves syncing back to your server.

Atari 2600 runs on Stella, with the console's own Select and Reset
switches, because on a 2600 those are how you start a game and choose which
variation to play.

Vectrex brings the vector display and its overlays with it. Every Vectrex
cartridge shipped with a translucent colored sheet that slotted in front of
the screen, and Cabinet draws them over the picture the way the real plastic
sat over the real tube. It knows which sheet belongs to your game from the
file's contents, so it works whatever your ROM is named.

MAME 2003-Plus joins FinalBurn Neo as a second arcade core, covering the
early-80s Atari and Midway boards FBNeo does not. Games that run on both let
you pick, and Cabinet remembers your choice.

That brings Cabinet to eighteen emulator cores covering twenty-two systems,
every one of them running natively on Apple TV.

Speed, where this hardware needed it most

Dreamcast ran at roughly 20fps with breaking audio, and it was never the
emulation speed. Cabinet applied no backpressure, so the core free-ran at up
to five times real time and threw its own audio away as static. That is
fixed, along with two upstream bugs that made a second launch crash, and the
emulated CPU is no longer underclocked eight times over by the core's own
default.

Treat Dreamcast as much improved rather than solved, and expect less of it
here than on the phone. Lighter games and the console's many 2D shooters and
fighters should play well. Heavy 3D titles are still hard: Crazy Taxi measured
60fps in normal play and 30 in its busiest streets, up from 20. This box is
also fanless and throttles itself under sustained load, which is measured and
real, so a long session can slow down where a short one did not. Its CPU speed
default is set lower than the phone's for that reason, and any game can be
marked as not working.

Nintendo 64 had been rendering at 640x480 against a documented default of
320x240, because that setting was never being answered. On Apple TV that took
it from 50fps decaying to 27 up to a sustained 49.7. A crash when launching a
second N64 game after quitting the first is also fixed.

Colors, sound and input lag

Emulator cores declare default settings, and Cabinet had not been answering
for them. Every NES game had been drawing in a third-party color palette
instead of the NES one, with black showing as dark gray and grass as olive.
Arcade boards ran their FM synthesis with no interpolation at all, on
hardware whose entire sound is FM, and in 16-bit color while Settings said 32.
Game Boy Color had no color correction. Neo Geo Pocket booted in Japanese.
Saturn carried an extra frame of input lag. TurboGrafx drew three black rows
and a slightly wrong aspect ratio.

All corrected, plus some deliberate upgrades measured on real Apple TV
hardware before shipping: SNES Mode 7 at four times resolution in the 89
games that use it, PlayStation at double resolution with 32-bit output, the
accurate Nuked FM chip on Genesis, and NES audio at its highest quality.
Each was checked to confirm this fanless box does not throttle under them.

In-game saves, on the television

Every platform's in-game saves now work here, not just on the phone.
Cartridge batteries, PlayStation memory cards, Sega CD backup RAM, Neo Geo
Pocket flash, the Dreamcast VMU and 3DO NVRAM all save and upload to RomM.
Start a game on Apple TV and continue it on your phone, or the reverse.

A bug where each device quietly replayed its own cached copy of a save, which
made it look like your devices each had their own memory cards, is fixed.

Arcade games get their real controls

Where a cabinet had a spinner, trackball, wheel and pedals, light gun or
rotary joystick, Cabinet now knows it, drawn from real arcade data rather
than guessed. On Apple TV that shapes how a connected controller maps to the
board, and it is the groundwork for using your phone as the panel.

Around the app

Recently played games now appear on the Apple TV's top shelf, so Cabinet's
row on the home screen shows what you were playing.

Any game can be marked as not working, from the launch screen or the grid,
and marked games dim and carry a badge. The mark is per device on purpose, so
your Apple TV and your phone can disagree about a heavy Dreamcast game, which
matches the real difference in headroom between them.

Focused cover art now slides its caption down with the lift instead of
burying it. A letterbox glow fills the bars beside the picture. Rumble works
on a connected controller, which it never did here before. The pause menu's B
button no longer quits your game by accident. Each Apple TV profile gets its
own second server address. Text throughout got a pass to say less and say it
the same way it is said on the phone.

Under the hood

All fourteen tvOS core archives that existed before this release were
rebuilt. A build script bug had left them sharing memory between unrelated
emulators, including a shared Z80 between Neo Geo Pocket and Genesis, which
was a real crash waiting to happen. Fixed and verified on hardware by running
both of those systems back to back in a single session.

Known rough edges

Three new cores landed the same day this was cut, so they have had the least
time in front of real hands.

Controls on Vectrex and 3DO were confirmed working before release, after
both needed a fix late in the day. What has not been confirmed is how
faithful the new systems feel, since nobody involved grew up with a Vectrex.
If you did, your report on whether it plays like the real thing is the most
useful thing you can send.

Two things remain genuinely unproven:

  • 3DO frame rate has been measured thoroughly on a Mac but not on a
    phone or an Apple TV. It looked comfortable, but treat it as unproven, and
    mark any game that is not as not working.
  • 3DO saves are verified writing and uploading to your server. Loading a
    save back has not been confirmed end to end, so check that a save you make
    is still there next time you play.

This is an alpha. It is not signed, so you will need to build it yourself or
sideload it, and TestFlight is the easier path. Bug reports are very welcome.

Cabinet for iOS 0.3.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 22 Aug 19:16

Cabinet for iOS 0.3.0-alpha

The biggest release Cabinet has had. Four new systems, arcade cabinets that
play with the controls they actually shipped with, and a pass over every
native core that fixed colors, sound and input lag that had been quietly
wrong since the beginning.

Four new systems

3DO joins as a native core, running the Opera emulator. Your BIOS comes
from RomM the same way Saturn's always has, and in-game saves write to the
console's NVRAM and sync back to your server like everything else.

Atari 2600 runs on Stella. One stick, one red button, and the console's
own Select and Reset switches where they belong, because on a 2600 those
switches are how you start a game and pick which variation you play.

Vectrex brings the vector display, and it brings the overlays with it.
Every Vectrex cartridge shipped with a translucent colored sheet that
slotted in front of the screen, and Cabinet draws them: the play field tint,
the printed control legend, the artwork around the edges. Cabinet knows
which sheet belongs to your game from the file's contents, so it works no
matter what your ROM is named. It is one switch in Settings if you would
rather see the bare vectors.

MAME 2003-Plus is a second arcade core alongside FinalBurn Neo, covering
the early-80s Atari and Midway boards FBNeo does not. Games that can run on
both let you pick, per game or per platform, and Cabinet remembers.

That brings Cabinet to eighteen emulator cores covering twenty-two systems,
all compiled into the app and all running natively.

Arcade games get their real controls

The cabinets of that era were not joystick-and-buttons machines, and Cabinet
no longer pretends they were. Depending on what the board actually had, you
now get a spinner you roll with your thumb, a trackball you flick, a
steering wheel that reads how you tilt the phone, pressure-sensitive pedals,
a light gun you aim by touching the screen, and a rotary joystick where the
collar twists to aim while the stick pushes.

Tempest gets its spinner. Centipede and Missile Command get a trackball.
Pole Position gets a wheel and pedals. Light gun games reload the way they
always did, by shooting off the edge of the screen.

Which controls a cabinet gets is stated from real arcade data rather than
guessed, so a game either gets the panel it had or a standard pad, never
something invented.

Everything looks and sounds the way it should

Emulator cores declare default settings, and Cabinet had never been
answering for them. That sounds small. It was not.

Every NES game had been rendering in a third-party color palette rather than
the NES one, with black showing as dark gray and grass as olive. Nearly the
whole picture was wrong and now it is right. NES games also draw without the
garbage rows that used to sit behind a real TV's bezel.

Arcade boards had been running their FM synthesis with no interpolation at
all, on hardware whose entire sound is FM, and in 16-bit color while Settings
said 32. Game Boy Color had no color correction, so colors meant for a dim
1998 screen were being shown raw. Neo Geo Pocket games booted in Japanese.
Saturn carried an extra frame of input lag. TurboGrafx drew three black rows
and a slightly wrong aspect ratio.

All fixed. On top of that, some deliberate upgrades: SNES Mode 7 renders at
four times the resolution in the 89 games that use it, PlayStation renders at
double resolution with 32-bit output, Genesis uses the accurate Nuked FM
chip, and NES audio runs at its highest quality setting.

Dreamcast and Nintendo 64

Dreamcast used to run at roughly 20fps with audio breaking up, and it was
never the emulation speed. Cabinet was not applying any backpressure, so the
core free-ran at up to five times real time and threw its audio away as
static. That is fixed, along with two upstream bugs that made a second launch
crash, and the emulated CPU is no longer underclocked eight times over by the
core's own default.

Treat Dreamcast as much improved rather than solved. Lighter games hold 60fps
with clean sound, and the 2D shooters and fighters the console is full of
should play well. Heavy 3D titles are still hard: Crazy Taxi measured 60fps
in normal play and 30 in its busiest streets, up from 20, and Jet Grind Radio,
Rush 2049, Re-Volt and Toy Commander are in the same class. The limit is the
SH4 interpreter, which cannot use a just-in-time compiler on iOS, so this is
a ceiling rather than a bug. There is a CPU speed setting if you want to trade
stability for pace, and any game can be marked as not working.

Nintendo 64 had been rendering at 640x480 against a documented default of
320x240 because that setting was never answered. On Apple TV that took it
from 50fps decaying to 27 up to a sustained 49.7. A crash when launching a
second N64 game after quitting the first is also fixed.

Your saves follow you

In-game saves now work for every cartridge platform and Saturn. Cartridge
batteries, PlayStation memory cards, Sega CD backup RAM, Neo Geo Pocket
flash, the Dreamcast VMU, and 3DO NVRAM all save and upload to RomM, and
come back down on whichever device you play next.

A bug where each device quietly replayed its own cached copy of a save,
which made it look like your devices each had their own memory cards, is
fixed. Game Boy games that keep a real-time clock, like Pokemon Gold and
Silver, now keep it.

Controllers

Twin-stick arcade games work correctly on a Bluetooth pad. Nintendo 64 uses
the button layout other emulators use on an Xbox-shaped controller, so B is
where B should be. Each platform now has its own controller personality
instead of one arcade-shaped default, and your own remappings are kept as
edits on top rather than replacing everything.

The cartridges that had hardware inside them

A handful of Game Boy Advance games shipped with real sensors soldered into
the cartridge, and those games now work the way they were meant to, using the
phone's own motion hardware.

WarioWare Twisted is the one to try. The whole game is built around
physically twisting the cartridge, and twisting the phone now does it. Yoshi's
Universal Gravitation and Koro Koro Puzzle use their tilt sensors the same
way. Boktai's solar sensor is there too, as a setting rather than a sensor,
since pointing a phone at the sun is not something to ask of anybody.

Nothing runs until a game actually asks for it, so the gyroscope stays off for
every cartridge that never had one.

Connection and library

Cabinet now prefers your server's local address when you are on the same
network and falls back to the public one when you are not, and the launch
screen tells you which route a game is actually about to download over.

Cover art that is not the usual box shape, which 3DO in particular has a lot
of, is now shown whole against a soft blurred backdrop of itself instead of
being cropped.

Also fixed

The pause menu no longer offers to save a state and then complain about
something else. Launch screen pickers size themselves to their text.
Platforms RomM reports as arcade are believed, so a differently named arcade
folder is playable instead of showing as unsupported. The last game's final
frame no longer flashes at the start of the next one.

Known rough edges

Three new cores landed the same day this was cut, so they have had the least
time in front of real hands.

Controls on Vectrex and 3DO were confirmed working before release, after
both needed a fix late in the day. What has not been confirmed is how
faithful the new systems feel, since nobody involved grew up with a Vectrex.
If you did, your report on whether it plays like the real thing is the most
useful thing you can send.

Two things remain genuinely unproven:

  • 3DO frame rate has been measured thoroughly on a Mac but not on a
    phone or an Apple TV. It looked comfortable, but treat it as unproven, and
    mark any game that is not as not working.
  • 3DO saves are verified writing and uploading to your server. Loading a
    save back has not been confirmed end to end, so check that a save you make
    is still there next time you play.

This is an alpha. It is not signed, so you will need to build it yourself or
sideload it, and TestFlight is the easier path. Bug reports are very welcome.

Cabinet for tvOS 0.1.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 12 Aug 22:51

First public alpha of Cabinet for Apple TV.

  • 19 systems run natively on tvOS across 14 cores, no JIT, no webview: Arcade (FBNeo), NES, SNES, Game Boy, Game Boy Color, Game Boy Advance, Genesis/Mega Drive, Sega CD, Master System, Game Gear, 32X, TurboGrafx-16, TurboGrafx-CD, Neo Geo Pocket Color, Atari 7800, Saturn, PlayStation, Dreamcast, and Nintendo 64
  • Real Metal rendering with GPU-side pixel unpack for full-speed output
  • Sign in with your RomM server using device authorization, no password entry on the TV
  • Switch between RomM accounts in-app from Home
  • Home is resume-first: one click back into your last game, with library shelves below
  • Pause menu with save states and shaders, navigable by Siri Remote or a paired game controller
  • Local two-player Bluetooth controller support
  • Library ROMs are cached transiently for the current session, no persistent local storage

Known gaps: no autosave on quit, save/load is manual slot-based only.

This is an alpha. Expect rough edges. Feedback and bug reports welcome.

Cabinet for iOS 0.2.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 11 Aug 19:13

Local two-player controller support, plus Dreamcast and N64 joining the native lineup.

What's new

Nineteen systems now run on emulator cores built into the app, full speed and fully offline once kept on the device: Arcade, PlayStation, Saturn, Dreamcast, Nintendo 64, SNES, NES, Game Boy, Game Boy Color, Game Boy Advance, Genesis, Sega CD, 32X, Master System, Game Gear, TurboGrafx-16, TurboGrafx-CD, Neo Geo Pocket Color and Atari 7800. Dreamcast and N64 are the two new arrivals; N64 no longer needs a connection.

Pair a second Bluetooth controller and play locally with a friend, no setup beyond pairing it. Verified working on arcade, N64, PlayStation, Saturn and the web player alike, native and non-native systems both. A configurable menu hotkey (defaults to clicking both sticks together) is a second way to open the pause menu, for controllers whose Home button iOS intercepts for its own purposes.

Resuming a game from Home now honors whichever player last used, native or web, instead of always assuming the web player.

Fixes

A real, previously hidden crash: relaunching any arcade game a second time in one session (quit, then play the same or another arcade title again) crashed the whole app. Fixed.

N64's left analog stick now works with a physical controller; it previously only responded to the touch overlay.

Known limitations

  • PlayStation discs must be in CHD format
  • Multi-disc PlayStation and Saturn games are not supported yet
  • Controllers must be MFi compatible. Some Bluetooth pads, including the 8BitDo Micro, only work in keyboard mode on iOS and cannot be read as gamepads by any app
  • Building from source requires Xcode 26, and the simulator cannot build it at all

Installing

Download the IPA below and install it with AltStore or SideStore.

The IPA is unsigned. AltStore and SideStore sign it with your own Apple ID as they install it. On a free Apple ID that signature lasts seven days and gets refreshed automatically in the background; with a paid Apple Developer account it lasts a year.

You need iOS 18 or later and a RomM server of your own. Cabinet was built and tested against RomM 5.1.0.

About this build

I am not a programmer. Cabinet is built with AI assistance. The full history is in the repository, unedited.

Cabinet for iOS 0.1.0-alpha

Choose a tag to compare

@MMagTech MMagTech released this 09 Aug 19:02

First public build. Cabinet is an iOS app for your own RomM server: it shows your library, plays your games, and opens on whatever you were playing last.

What works

Seventeen systems run on emulator cores built into the app, so they play at full speed, fill the screen, and work with no connection at all once you have kept a game on the device: Arcade, PlayStation, Saturn, SNES, NES, Game Boy, Game Boy Color, Game Boy Advance, Genesis, Sega CD, 32X, Master System, Game Gear, TurboGrafx-16, TurboGrafx-CD, Neo Geo Pocket Color and Atari 7800.

Everything else your server supports, including N64, DS and PSP, plays through RomM's own web player inside the app. Those need a connection.

Touch layouts are tuned per system and per orientation. Physical controllers work. Save states, battery saves and PlayStation memory cards sync back to your server, and queue locally if you are offline.

Installing

Download the IPA below and install it with AltStore or SideStore.

The IPA is unsigned. AltStore and SideStore sign it with your own Apple ID as they install it. On a free Apple ID that signature lasts seven days and gets refreshed automatically in the background; with a paid Apple Developer account it lasts a year. This is how all sideloaded apps work, not something specific to Cabinet.

You need iOS 18 or later and a RomM server of your own. Cabinet was built and tested against RomM 5.1.0; other versions may work, but that is the only one it has been run against. Cabinet ships no games and no BIOS files.

Known limitations

  • PlayStation discs must be in CHD format
  • Multi-disc PlayStation and Saturn games are not supported yet
  • N64 runs in the web player rather than natively, so it needs a connection
  • Controllers must be MFi compatible. Some Bluetooth pads, including the 8BitDo Micro, only work in keyboard mode on iOS and cannot be read as gamepads by any app
  • Building from source requires Xcode 26, and the simulator cannot build it at all

About this build

I am not a programmer. Cabinet was built with AI assistance because I wanted the app to exist. The full history is in the repository, unedited.

This is an alpha and it is the first time anyone but me has run it, so expect to find things. Bug reports are welcome.