The easiest way. Automatic updates, no computer needed. Provenance is 100% free on the App Store.
Sideload directly via AltStore. Tap "Add Source" to add the Provenance source, then install from the Browse tab.
https://provenance-emu.com/apps.jsonSideload wirelessly without a computer using SideStore. Tap "Add Source" to add Provenance.
https://provenance-emu.com/apps.jsonDownload the latest IPA and sideload manually, or build Provenance yourself from the open-source code.
Every build is published on GitHub. Expand a release to see what changed. These are also the emulators from the Provenance team: iCube for GameCube & Wii, iFly for Dreamcast, and Virtual Jaguar as a RetroArch core and a desktop app for macOS, Windows and Linux.
Multi-system retro emulator for iOS, tvOS and macOS
585a3f3Automated alpha build from develop branch
| Commit | 585a3f3 |
| Built | 2026-10-27 04:37 UTC |
| CI Run | View build log |
| Bundle ID | com.provenance-emu.provenance.alpha |
Note: This alpha build uses a separate bundle ID so it can be installed alongside the stable release.
eb1949fd2 ci: run PVCoreBridge tests on PRs that touch it
9e799425d test(corebridge): make PVCoreBridgeTests compile and pass again
3d6f7cc80 chore: silence the existing type_body_length error on DeltaSkinInputHandler (#3770)
680c44cc8 refactor(skins): finish SkinKit adoption (pin SkinKit#35, drop workarounds, build UITesting and EmuSkins) (#3769)
2d622bda6 [Auto] Maintenance: regenerate stale outputs (#3768)
8fff8b316 fix: remove dangling PVJIT DebuggerUtils.h and Mupen libpng config.h symlinks (#3767)
d167e46f8 feat(input): native cores honor controller button remaps
7f419ae94 fix(input): Switch Online SNES pad A/B and X/Y swapped in cores
e8d98dd2b feat(cores): build core slices on the Studio with --remote
8bd57f1fc feat(cloudsync): Automatic sync frequency + power/network-aware background work (#3766)
329295aad [Agent] Receive and automatically mirror nearby iCube libraries (#3753)
10051022f [Agent] refactor(skins): build against SkinKit, no behavior change (#3764)
dd631b7c2 [Agent] fix(thin): game-launch crash from stale perf counters; forward MetricKit crashes to Sentry (#3762)
fc4cf0f21 [Agent] fix(thin): re-pace the emulation loop when a core changes fps (#3761) (#3763)
These builds are unsigned and intended for sideloading via AltStore/SideStore. Install the Provenance Alpha app (separate from stable) by adding the sideload feed — or tap Add to AltStore / Add to SideStore on your device to add it directly.
| File | App IDs used | Trade-off |
|---|---|---|
Provenance-iOS-NoExtensions.ipa | 1 | No widgets, Spotlight, QuickLook, stickers, or Files.app ROM provider. Import ROMs via the built-in web server. |
Provenance-iOS.ipa | ~9 | Everything included. |
A free Apple ID can register only 10 App IDs per 7 days, and every embedded extension consumes one — so the full build can use up almost your entire weekly quota in a single install. The sideload feed serves the NoExtensions build for that reason; grab the full IPA above if you have a paid developer account or want the extensions.
This release is automatically updated on every successful develop push.
Cores found inside each built IPA, with their installed size. A core that failed to build usually still ships a framework, so a size far below its siblings is the signal to look for.
| App | Provenance-iOS.app |
| Uncompressed size | 1.8 GB |
| Native cores | 20 |
| libretro cores | 110 |
| Support frameworks | 61 (90.3 MB) |
| Core | Size | Systems | Version |
|---|---|---|---|
| Azahar | 35.5 MB | 3ds | 2126.1.2+provenance |
| 4DO/FreeDO | 430.5 KB | 3DO | 0 |
| Atari 800 | 577.6 KB | 5200, atari8bit | 7.2.1 |
| Bliss | 373.8 KB | intellivision | 2.1.2 |
| Bliss | 18.6 KB | intellivision | 2.1.2 |
| CrabEMU | 328.5 KB | sms, sg1000, colecovision | 0.2.0 |
| Dolphin | 854.1 KB | gamecube, wii | 14.3 |
| FCEUX | 1.2 MB | nes, fds | 2.7.0 |
| Gambatte | 1.7 KB | gb, gbc | 0.5.0 |
| Genesis Plus GX | 2.9 MB | genesis, gamegear, mastersystem, sg1000, segacd | v1.7.4 |
| Mednafen | 14.8 MB | saturn, psx, lynx, ngp, ngpc, pce, pcecd, pcfx, sgfx, vb, ws, wsc, nes, fds, snes, gb, gbc, gba | 1.32.1 |
| PicoDrive | 1.1 MB | 32X | 2.04 |
| PPSSPP | 19.3 MB | psp | v1.13.2-2467 |
| ProSystem | 245.2 KB | 7800 | 1.3 |
| Snes9x | 1.8 MB | snes | 1.60 |
| Stella | 3.6 MB | 2600 | 8.0_pre |
| TGBDual | 252.5 KB | gb, gbc | v0.8.3 |
| VisualBoyAdvance | 858.2 KB | gba | 2.2.3 |
| EmuThreeds | 26.8 MB | 3ds | 1.0.6 |
| Mupen64Plus | 2.3 MB | n64 | 2.5 |
| Core | Size |
|---|---|
| 2048 | 115.7 KB |
| 81 | 394.7 KB |
| a5200 | 300.8 KB |
| atari800 | 938.1 KB |
| bluemsx | 1.4 MB |
| bsnes.hd.beta | 3.1 MB |
| bsnes | 5.9 MB |
| bsnes.mercury.accuracy | 1.8 MB |
| bsnes.mercury.balanced | 1.8 MB |
| bsnes.mercury.performance | 1.8 MB |
| desmume | 3.3 MB |
| dolphin | 14.6 MB |
| dosbox.pure | 2.3 MB |
| ecwolf | 2.0 MB |
| fbalpha2012.cps1 | 2.7 MB |
| fbalpha2012.cps2 | 2.5 MB |
| fbalpha2012.cps3 | 399.5 KB |
| fbalpha2012 | 18.0 MB |
| fbalpha2012.neogeo | 2.0 MB |
| fbneo | 55.9 MB |
| fceumm | 4.0 MB |
| flycast-jitless | 15.3 MB |
| flycast | 18.4 MB |
| fmsx | 273.3 KB |
| freechaf | 138.6 KB |
| freeintv | 693.3 KB |
| fuse | 1.5 MB |
| gambatte | 3.7 MB |
| gearcoleco | 789.5 KB |
| genesis.plus.gx | 8.6 MB |
| genesis.plus.gx.wide | 7.9 MB |
| geolith | 1.1 MB |
| gme | 713.5 KB |
| gpsp | 549.3 KB |
| handy | 763.2 KB |
| hatari | 3.0 MB |
| m2000 | 207.3 KB |
| mame | 363.3 MB |
| mame2000 | 11.3 MB |
| mame2003 | 28.9 MB |
| mame2003.plus | 34.2 MB |
| mame2010 | 48.4 MB |
| mednafen.gba | 525.6 KB |
| mednafen.lynx | 192.8 KB |
| mednafen.ngp | 298.9 KB |
| mednafen.pce.fast | 3.7 MB |
| mednafen.pce | 4.6 MB |
| mednafen.pcfx | 1.7 MB |
| mednafen.psx.hw | 14.8 MB |
| mednafen.psx | 8.7 MB |
| mednafen.saturn | 9.5 MB |
| mednafen.snes | 3.1 MB |
| mednafen.supergrafx | 3.1 MB |
| mednafen.vb | 199.1 KB |
| mednafen.wswan | 1.0 MB |
| melonds | 6.0 MB |
| melondsds | 4.7 MB |
| mesen-s | 2.9 MB |
| mesen | 3.2 MB |
| minivmac | 654.0 KB |
| mrboom | 8.5 MB |
| mu | 660.9 KB |
| mupen64plus.next | 6.7 MB |
| neocd | 1.3 MB |
| nestopia | 5.8 MB |
| noods | 928.5 KB |
| np2kai | 2.6 MB |
| numero | 767.9 KB |
| o2em | 367.9 KB |
| opera | 634.7 KB |
| parallel.n64 | 2.1 MB |
| pcsx.rearmed | 1.4 MB |
| play | 4.0 MB |
| pokemini | 381.2 KB |
| potator | 90.7 KB |
| ppsspp | 16.1 MB |
| prboom | 3.6 MB |
| prosystem | 239.9 KB |
| puae | 18.3 MB |
| puae2021 | 8.5 MB |
| quicknes | 1.4 MB |
| race | 375.1 KB |
| same.cdi | 14.6 MB |
| sameboy | 349.1 KB |
| sameduck | 148.2 KB |
| scummvm | 139.1 MB |
| smsplus | 235.1 KB |
| snes9x | 2.8 MB |
| snes9x2002 | 794.0 KB |
| snes9x2005 | 700.8 KB |
| snes9x2005.plus | 643.0 KB |
| snes9x2010 | 2.6 MB |
| stella | 3.1 MB |
| stella2014 | 1.4 MB |
| stella2023 | 2.9 MB |
| theodore | 2.2 MB |
| tyrquake | 1.0 MB |
| vba.next | 706.9 KB |
| vbam | 1.2 MB |
| vecx | 173.1 KB |
| vice.x128 | 3.4 MB |
| vice.x64 | 3.2 MB |
| vice.x64sc | 3.2 MB |
| vice.xpet | 2.6 MB |
| vice.xplus4 | 2.7 MB |
| vice.xvic | 2.6 MB |
| virtualjaguar | 2.3 MB |
| x1 | 436.2 KB |
| xrick | 435.0 KB |
| yabause | 1.8 MB |
| App | Provenance-iOS.app |
| Uncompressed size | 2.4 GB |
| Native cores | 20 |
| libretro cores | 110 |
| Support frameworks | 61 (90.3 MB) |
| Core | Size | Systems | Version |
|---|---|---|---|
| Azahar | 35.5 MB | 3ds | 2126.1.2+provenance |
| 4DO/FreeDO | 430.5 KB | 3DO | 0 |
| Atari 800 | 577.6 KB | 5200, atari8bit | 7.2.1 |
| Bliss | 373.8 KB | intellivision | 2.1.2 |
| Bliss | 18.6 KB | intellivision | 2.1.2 |
| CrabEMU | 328.5 KB | sms, sg1000, colecovision | 0.2.0 |
| Dolphin | 854.1 KB | gamecube, wii | 14.3 |
| FCEUX | 1.2 MB | nes, fds | 2.7.0 |
| Gambatte | 1.7 KB | gb, gbc | 0.5.0 |
| Genesis Plus GX | 2.9 MB | genesis, gamegear, mastersystem, sg1000, segacd | v1.7.4 |
| Mednafen | 14.8 MB | saturn, psx, lynx, ngp, ngpc, pce, pcecd, pcfx, sgfx, vb, ws, wsc, nes, fds, snes, gb, gbc, gba | 1.32.1 |
| PicoDrive | 1.1 MB | 32X | 2.04 |
| PPSSPP | 19.3 MB | psp | v1.13.2-2467 |
| ProSystem | 245.2 KB | 7800 | 1.3 |
| Snes9x | 1.8 MB | snes | 1.60 |
| Stella | 3.6 MB | 2600 | 8.0_pre |
| TGBDual | 252.5 KB | gb, gbc | v0.8.3 |
| VisualBoyAdvance | 858.2 KB | gba | 2.2.3 |
| EmuThreeds | 26.8 MB | 3ds | 1.0.6 |
| Mupen64Plus | 2.3 MB | n64 | 2.5 |
Fixes some issues with 3.3.0 maybe,
I'm skipping this release officially in favor for 3.4.0
This is a big one. Four months of work since 3.2.1 covering iCloud sync, a completely revamped tvOS interface, video filters, and a ton of core and stability fixes.
Full Changelog: 3.2.1...3.3.0
Full Changelog: 3.2.0...3.2.1
Bug fixes:
GameCube & Wii emulator for iOS and tvOS
5afb5deAutomated alpha build from develop
| Commit | 5afb5de |
| Built | 2026-10-26 22:48 UTC |
| CI Run | View build log |
Unsigned sideload builds. Replaced on every successful push to the default branch or
develop. For a stable build use the latest release.
5afb5de827 build(skins): pin SkinKit to the #38 merge commit (#66)
723a31d963 build(deps): bump the uv group across 1 directory with 2 updates (#63)
Non-Jailbroken.ipa — SideStore / AltStore / SideloadlyTrollStore.tipa — TrollStoreJailbroken-Rootful.deb / Jailbroken-Rootless.deb — jailbroken devicesThis release is automatically updated on every successful default-branch /
developCI run.
Dreamcast emulator for iOS and tvOS
Pre-release beta.
iFly 1.0.0 build 1791610021 (4d47c4516, changes since 3017389e7)
Pre-release beta.
iFly 1.0.0 build 1791610021 (Apple TV) (4d47c4516, changes since 4d47c4516)
Pre-release beta.
iFly 1.0.0 build 1791441341 (Apple TV) (90f49dc2e)
Pre-release beta.
iFly 1.0.0 build 1791436698 (90f49dc2e, changes since f3e4e6717)
Atari Jaguar core for RetroArch and Provenance, plus a desktop app for macOS, Windows and Linux
325f35b — v3.10.0 (develop)| Commit | 325f35b |
| Built | 2026-10-27 01:31 UTC |
| CI run | build log |
| Branch | develop |
Automatic build of the
developtip, replaced on every push. It compiled on all 24 targets; it has not been through the test suite or any manual QA. For a stable build use the latest release.
The core logs its identity as v3.10.0 325f35b at startup — quote that line when reporting a bug against this build.
325f35b2 ci: bump actions/checkout, setup-node, setup-python to v7 (Dependabot #1107, #1108, #1109) (#1110)
SHA256SUMS.txt
VirtualJaguar-nightly-linux-aarch64.AppImage
VirtualJaguar-nightly-linux-x86_64.AppImage
VirtualJaguar-nightly-linux-x86_64.flatpak
VirtualJaguar-nightly-macos-universal.zip
VirtualJaguar-nightly-windows-arm64-setup.exe
VirtualJaguar-nightly-windows-arm64.zip
VirtualJaguar-nightly-windows-x64-setup.exe
VirtualJaguar-nightly-windows-x64.zip
cue2cdi-linux-x86_64
cue2cdi-macos-universal
cue2cdi-windows-x86_64.exe
jagcd-tools-linux-x64.zip
jagcd-tools-macos.zip
jagcd-tools-windows-x64.zip
virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
virtualjaguar_libretro-android-arm64-v8a.so
virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
virtualjaguar_libretro-android-armeabi-v7a.so
virtualjaguar_libretro-android-x86-debug.tar.gz
virtualjaguar_libretro-android-x86.so
virtualjaguar_libretro-android-x86_64-debug.tar.gz
virtualjaguar_libretro-android-x86_64.so
virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
virtualjaguar_libretro-emscripten-wasm.bc
virtualjaguar_libretro-ios-arm64-debug.tar.gz
virtualjaguar_libretro-ios-arm64.dylib
virtualjaguar_libretro-linux-aarch64-debug.tar.gz
virtualjaguar_libretro-linux-aarch64.so
virtualjaguar_libretro-linux-i686-debug.tar.gz
virtualjaguar_libretro-linux-i686.so
virtualjaguar_libretro-linux-rpi1-armv6-debug.tar.gz
virtualjaguar_libretro-linux-rpi1-armv6.so
virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
virtualjaguar_libretro-linux-rpi2-cortex-a7.so
virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3-cortex-a53.so
virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4-cortex-a72.so
virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5-cortex-a76.so
virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5_64-cortex-a76.so
virtualjaguar_libretro-linux-x86_64-debug.tar.gz
virtualjaguar_libretro-linux-x86_64.so
virtualjaguar_libretro-macos-arm64-debug.tar.gz
virtualjaguar_libretro-macos-arm64.dylib
virtualjaguar_libretro-macos-x86_64-debug.tar.gz
virtualjaguar_libretro-macos-x86_64.dylib
virtualjaguar_libretro-switch-debug.tar.gz
virtualjaguar_libretro-switch.a
virtualjaguar_libretro-tvos-arm64-debug.tar.gz
virtualjaguar_libretro-tvos-arm64.dylib
virtualjaguar_libretro-vita-debug.tar.gz
virtualjaguar_libretro-vita.a
virtualjaguar_libretro-windows-i686-debug.tar.gz
virtualjaguar_libretro-windows-i686.dll
virtualjaguar_libretro-windows-x86_64-debug.tar.gz
virtualjaguar_libretro-windows-x86_64.dll
virtualjaguar_libretro.info
virtualjaguar_nightly_amd64.deb
virtualjaguar_nightly_arm64.deb
Each platform ships alongside a -debug.tar.gz of its split debug symbols; extract it next to the binary to get symbolised backtraces.
Verify with sha256sum --check SHA256SUMS.txt (Linux) or shasum -a 256 --check SHA256SUMS.txt (macOS). See SECURITY.md.
2a36679fe85712597593448fa44b9a80461b79c74652daf0e7a3267887231a7b VirtualJaguar-nightly-linux-aarch64.AppImage
69ba39956a209bc760f4e22b537561221a5ce81471875efd574fedb35a790b97 VirtualJaguar-nightly-linux-x86_64.AppImage
c2e96054580313ffe4fc8e8e3ec79388de9491437c6720223e5c875dfa454a56 VirtualJaguar-nightly-linux-x86_64.flatpak
4bb82ee1710e337a26452c406c33fa85a02368b8618825d43c4b929ff4406f26 VirtualJaguar-nightly-macos-universal.zip
7fd418224b53332c39cbe998295cf81cac3fd93f1bc517c63a1abef031218ee0 VirtualJaguar-nightly-windows-arm64-setup.exe
bf36bc6ac225639e20ebc348d5ee32e26db0dd84c7f0197488d388777ae62cb2 VirtualJaguar-nightly-windows-arm64.zip
0d14e815f24191eb495d78ac3aab1f3c77d12abdb28de3c7066763c3aa2cd532 VirtualJaguar-nightly-windows-x64-setup.exe
dca56160b31d29944246bb991f90755a99654bda92dc8091810f5f94ec1cd57a VirtualJaguar-nightly-windows-x64.zip
b926e41185057ee9204aaa0aaafff53ceec2cbb6d4f37e478edf7a7ddb353332 cue2cdi-linux-x86_64
24215aee3e3c3515ef02e3c57da12bc7a16fcb15f59df624f0514b28e0569d54 cue2cdi-macos-universal
02cdd7bed078f9f8773030948c6f477fa1c8cbe31a3fbece23b7b16f2fffebbc cue2cdi-windows-x86_64.exe
bb9ff47ef8f5f6300bf1899764c8b165ed9c23dd512238b5b9c63e8a3f7186a0 jagcd-tools-linux-x64.zip
d1f427911e9c054a7aec8d4b96fb3fba8d7a546853b2bb08a6f9af316e5a33d0 jagcd-tools-macos.zip
ddcc90557872c3533e815870740d56cfd91fcaa40b65fbb2430ef7d29b5ed99e jagcd-tools-windows-x64.zip
75a6af69d9f9a7099ae7d4f1b36deac2a7cfb8eff6699a49a1d5837114bd2e2d virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
a692090ff626f3b67dd98391abfa149d1eeb4b5c6d3fefb30d0a8b524bf84ef8 virtualjaguar_libretro-android-arm64-v8a.so
a0ba4bd247ac2cdd6ed7b5a22f3efa42af0f48ec444f8f54c36a7ae9b9ca2aba virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
4551297757925991e9591f084c6aef74ae08b0b4549c4316e45248970454f527 virtualjaguar_libretro-android-armeabi-v7a.so
d2c79f8b092d1a5ecc30aba951eb31457d593e30c147bdc794652d621c0c99fe virtualjaguar_libretro-android-x86-debug.tar.gz
175a31e582df948746fd2d3f0acca5de2734144f01d7db7def2edef5be1071a9 virtualjaguar_libretro-android-x86.so
ac20a13cf987e761f480966822bc8cd50870880de633d4a29ad2ca475214e556 virtualjaguar_libretro-android-x86_64-debug.tar.gz
8876441c3dc6c71fca084a4062647b01e6f3babd8927403abc44bf4e026c0a6d virtualjaguar_libretro-android-x86_64.so
86ffe46004fe44908e445d88951edcd7c727c0195dc545e556f4fbd20a51f445 virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
d7dc0bf8a9ae50c108e991841ae6cf49367884b05daa648ecb48342521fd659a virtualjaguar_libretro-emscripten-wasm.bc
e1a2e30ecd5f064e484d0c5e5f976c4450c0f6cdf8445dc3837adea52e2e6764 virtualjaguar_libretro-ios-arm64-debug.tar.gz
c3989e8c36fd80cf33e336b3e46144f8358213ff805f76acc93b05a03c2fffe6 virtualjaguar_libretro-ios-arm64.dylib
12624da640c0795b1b0d636f3cf1c9388aee6aa11ecefce118ea2b0175d3fe5c virtualjaguar_libretro-linux-aarch64-debug.tar.gz
6b99fe6f1eb3920dd666ed090c0cf0fc53316b1a9b3e7a467c59e1159ebe2df7 virtualjaguar_libretro-linux-aarch64.so
fc4ff32238da287b81afb3cccd192e18b8dfb34d3266e88f191c6172d8b76aaa virtualjaguar_libretro-linux-i686-debug.tar.gz
005d19d9959c8564570318e0d6bde16d2f5bda75b02d47a98c4765375cb843ac virtualjaguar_libretro-linux-i686.so
ab940068dae8646f3ca0139b8c6a973df0ad4a31450ee5b4aa51f53e96c69d7d virtualjaguar_libretro-linux-rpi1-armv6-debug.tar.gz
ae4758d84d3dbbc8bd078ede501979d2a52136d3a46a9a196303684b05998f78 virtualjaguar_libretro-linux-rpi1-armv6.so
7c62dbd20eebde43ecd1049d59e053ccc06a8f68753aece2b0aee22813cce096 virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
dc9b05b9d27a223305659739b5b4d46d40ea21cf0c44582c7f945083c42ac62b virtualjaguar_libretro-linux-rpi2-cortex-a7.so
058b6bec0d0efce2596577891aa67cf96ee5e7743ade92fb7695c130f3ee5160 virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
21a5d9e4b07025aa590f80539274c8c337760e3d50c4204bfda69b01ac873575 virtualjaguar_libretro-linux-rpi3-cortex-a53.so
ab235e60bf475051841205214a49ebf2895f3e14dd1dcf95e42081a660ae332e virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
c1a99f177a7b920d25fb8d7275a7b7a34f938917541d71fbbb544be29f22c6d6 virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
67d9f9fcf38fbc1b729992873186862f2558057f00a05c7cebed3f92fc9e5fc1 virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
d30e0911b5261a37521abe68189b367a565c383d526d4596c3b26cf04dc35769 virtualjaguar_libretro-linux-rpi4-cortex-a72.so
a86e8214ed7b51c38f52ee24199af60d6714c648aa0c40242de4ce42ee7d074e virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
a701bd3c708b0fc6443e68dd5c980c6c8a9143d7c54b94e2e127c06e075c4ad7 virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
dc59276b360fcd101c03da3760db86e82be988927e744ff98b1c55adcb9c439e virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
f32506d7c5f0a4d20b77e2804e5035d3285d2f5edd331f3852ed69106c0a888d virtualjaguar_libretro-linux-rpi5-cortex-a76.so
8a25491ac3bdfdc979677ff1a7bd87aaa277bba7365915ef6a8bbd420b554863 virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
e3bb441a742391cd14d2163ec9aad0bb3c9305783f163b39e59498f406a4c1d9 virtualjaguar_libretro-linux-rpi5_64-cortex-a76.so
656ac84c34f2c593634b57643c801ba984398b74a8274ff00dc27b80482bc564 virtualjaguar_libretro-linux-x86_64-debug.tar.gz
cbf2ec62c8a7edc93f83ed772ee60d576bdb1547b4bc5c59b9e9733eff4c8fac virtualjaguar_libretro-linux-x86_64.so
03064356ab6a503a3a4c60c5b6c51e372c9e29f3faeace73483c4a9187db18e8 virtualjaguar_libretro-macos-arm64-debug.tar.gz
a71f06ec6ce084143947d152c3d835bbf676fad45e0476ea7bacada236a78a2b virtualjaguar_libretro-macos-arm64.dylib
0cb12071f2d9051fc1f77249e8996e9373e94892c2f0cf98651d989cd895feba virtualjaguar_libretro-macos-x86_64-debug.tar.gz
d834e0c259227172181c1f4b68eec36a6afa313fe23a3c30345f5f35608f2210 virtualjaguar_libretro-macos-x86_64.dylib
a28ac742dee0497523a7dcbcc03f41ce934cedfb32c1b0f611fde214a2dcc4c1 virtualjaguar_libretro-switch-debug.tar.gz
3887909db5a115749c37c018dee4761d1b02fd876a7eba39ca07a94722338352 virtualjaguar_libretro-switch.a
98bed971c48efc513fa0e54350bc7d8896203bc187f9283340ac5de2fe7ad015 virtualjaguar_libretro-tvos-arm64-debug.tar.gz
df4212615f66283805e214f0e948990e275cf7b5ee1cdbe3f0e9d9f350dbfa06 virtualjaguar_libretro-tvos-arm64.dylib
cf11a87c0dfd6c59035f137a0a1ba908d554bc184612dcb92362b60216c95dac virtualjaguar_libretro-vita-debug.tar.gz
d7ba59fc3b6d246f29dfd564b64f3db0cd902db0f48196e9dd41ea013d9474d6 virtualjaguar_libretro-vita.a
825285eb58d497589e8eafbfcf2c788c67780fbd86ff0fb5a1874049372611f3 virtualjaguar_libretro-windows-i686-debug.tar.gz
4a13d1309d95307def74ef4c168412829b8f762e50ed394d5dff0ba8af337715 virtualjaguar_libretro-windows-i686.dll
16ea591aadb09eb4af87c3728dcb2522a3018650496ff870d83b81906198c776 virtualjaguar_libretro-windows-x86_64-debug.tar.gz
4d1201610876d1c0df9a09f37f8d7575c654a4855cc5adad6b86613b64c6f019 virtualjaguar_libretro-windows-x86_64.dll
604980032c4da4748b6ab4efb0ac6c6cc3cfe69d7c2a8d7881ccd3e082bdc19b virtualjaguar_libretro.info
9e79ab2bff6468f25037c75ae05da3b3b043ca08016df0e0b2db31f4e29163f2 virtualjaguar_nightly_amd64.deb
fd9d686a802620bc05bfdc460114ef807af26f055c0cc9d0bbfbc948f97d6a5c virtualjaguar_nightly_arm64.deb
Controller-friendly TV mode, a more responsive desktop app, multi-disc playlists, and optional AI players.
This is a feature release for the standalone app on macOS, Windows and Linux. It also includes MMULT and TOM register-readback corrections from AtariAge reports. Core options and v17 savestates carry over. Experimental emulation threading remains off by default.
An optional emulation thread lets the UI keep responding while the core runs. RetroAchievements evaluation and link play run on the core owner thread; long operations show a busy indicator. Command ordering, achievements UI access and shutdown races are covered by regression tests, including ThreadSanitizer tests in CI. (#1000, #1031, #1033)
Presentation pacing and late input latching have more precise wake-ups, more deadline headroom and slower safety-pad decay. (#1018, #1023, #1035)
The setting is under Settings > Interface > Performance > Emulation thread and takes effect after restarting. Keep it off to use the Tools/debugger windows or GDB: those features still need to move across the thread boundary. Rare host scheduling stalls and display-rate pacing remain follow-up work; this release does not claim to eliminate every repeated frame.
An optional offline source converter turns supported community-authored C memory freezes into .cht files, including grouped writes and bounded loops. Unsupported operations are reported for a manual port. Generated sets start disabled and the app checks the cartridge CRC32 before applying them. Pinned community sources are tested in CI; no community cheat pack, emulator binary, or SDK is bundled. (#1052, conversion guide)
.m3u multi-disc playlists; every disc appears under File > Disc. (#1012)Settings > Neuro connects to a server implementing the Neuro game API, allowing an AI backend to control Player 1. Tempest 2000 has a built-in profile; custom profiles can define other games' moves. This is opt-in and requires a separate server. Disconnects release held inputs, stopping is bounded, and hardcore achievements block AI input. See the Neuro guide for configuration and privacy details. (#1001, #1027)
The 4.0 milestone now tracks a fully integrated app: debugging while threaded, validated 60/120 Hz display pacing, finished TV mode, and dependable installation/update flows. The hardware timing campaign and dual-Jaguar rollback remain separate future projects.
Install the app over your existing version; settings carry over. RetroArch and Provenance users can replace the core without changing options or v17 savestates.
Download the app, libretro cores and Jaguar CD tools from the v3.10.0 release. Use the release's SHA256SUMS.txt to verify downloads. macOS packages are universal; Windows has portable and installer packages; Linux has AppImage and Debian packages.
Combined candidate 344dc0bc passed the core build, C89 lint and full core suite on Mac Studio with the private corpus. Three checks skipped for missing optional Fountain live-abort, CHSE-capable chdman and one-session Red Book fixtures/tools. Host-sensitive network checks ran and passed. Explicit Skyhammer/Iron Soldier 2 clipping and Iron Soldier 1 presence checks also passed.
Fresh Studio matrices on final-core candidate b5e40090 cover 155 cartridge titles (HLE/BIOS) and 28 CD title/mode rows. Comparisons against both v3.9.1 and the previous release candidate 24ae1bdb show zero backward moves, zero added/removed rows and no new watchdog signatures. The three existing cartridge HLE/BIOS asymmetries are unchanged; no new asymmetries appeared. Matrix input identity: 67acceb9dc39. Existing known failures remain recorded. The acid suite ran all 151 cases: 148 pass, three known failures, zero regressions, zero missing tests. The original GT ROM also passes with the fast blitter.
The subsequent #1051 backport adds a second GT ROM that reproduces the DSTA2 computed-Z defect. Its source candidate passed all 93 blitter checks and all 152 acid cases with zero regressions or missing tests (three established known failures). RetroArch showed the reproducer failing before the fix and passing afterward; the supplied polygon demo compared 202,616 blits with zero pixel differences or skips.
The combined app passed all 159 CTest tests, including 53 emulation-thread tests, with zero failures or skips. Playlist tests cover invalid entries, per-disc state ownership with identical slots, warm-cache lookup, TV resume routing, and actual inline/threaded state-load events. Windows path expectations were corrected, and all three previously failing Windows app jobs passed on that fix.
Independent review of the incoming core changes found no defects. Source-session RetroArch checks confirmed the polygon demo's filled geometry, changing PIT counter and matching MEMCON1 values. Earlier focused Studio windowed checks covered inline/threaded operation, settings, fullscreen hover/F1/restore/persistence and native-only chrome. POSIX installer hermetic tests passed 208 checks. Clean-machine Windows qualification remains separate. Fresh GitHub CI and published-artifact checks remain release gates; current status is in release tracker #1036.
SHA256SUMS.txt
VirtualJaguar-3.10.0-linux-aarch64.AppImage
VirtualJaguar-3.10.0-linux-x86_64.AppImage
VirtualJaguar-3.10.0-linux-x86_64.flatpak
VirtualJaguar-3.10.0-macos-universal.zip
VirtualJaguar-3.10.0-windows-arm64-setup.exe
VirtualJaguar-3.10.0-windows-arm64.zip
VirtualJaguar-3.10.0-windows-x64-setup.exe
VirtualJaguar-3.10.0-windows-x64.zip
cue2cdi-linux-x86_64
cue2cdi-macos-universal
cue2cdi-windows-x86_64.exe
jagcd-tools-linux-x64.zip
jagcd-tools-macos.zip
jagcd-tools-windows-x64.zip
virtualjaguar_3.10.0_amd64.deb
virtualjaguar_3.10.0_arm64.deb
virtualjaguar_libretro-android-arm64-v8a-debug.tar.gz
virtualjaguar_libretro-android-arm64-v8a.so
virtualjaguar_libretro-android-armeabi-v7a-debug.tar.gz
virtualjaguar_libretro-android-armeabi-v7a.so
virtualjaguar_libretro-android-x86-debug.tar.gz
virtualjaguar_libretro-android-x86.so
virtualjaguar_libretro-android-x86_64-debug.tar.gz
virtualjaguar_libretro-android-x86_64.so
virtualjaguar_libretro-emscripten-wasm-debug.tar.gz
virtualjaguar_libretro-emscripten-wasm.bc
virtualjaguar_libretro-ios-arm64-debug.tar.gz
virtualjaguar_libretro-ios-arm64.dylib
virtualjaguar_libretro-linux-aarch64-debug.tar.gz
virtualjaguar_libretro-linux-aarch64.so
virtualjaguar_libretro-linux-i686-debug.tar.gz
virtualjaguar_libretro-linux-i686.so
virtualjaguar_libretro-linux-rpi1-armv6-debug.tar.gz
virtualjaguar_libretro-linux-rpi1-armv6.so
virtualjaguar_libretro-linux-rpi2-cortex-a7-debug.tar.gz
virtualjaguar_libretro-linux-rpi2-cortex-a7.so
virtualjaguar_libretro-linux-rpi3-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3-cortex-a53.so
virtualjaguar_libretro-linux-rpi3_64-cortex-a53-debug.tar.gz
virtualjaguar_libretro-linux-rpi3_64-cortex-a53.so
virtualjaguar_libretro-linux-rpi4-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4-cortex-a72.so
virtualjaguar_libretro-linux-rpi4_64-cortex-a72-debug.tar.gz
virtualjaguar_libretro-linux-rpi4_64-cortex-a72.so
virtualjaguar_libretro-linux-rpi5-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5-cortex-a76.so
virtualjaguar_libretro-linux-rpi5_64-cortex-a76-debug.tar.gz
virtualjaguar_libretro-linux-rpi5_64-cortex-a76.so
virtualjaguar_libretro-linux-x86_64-debug.tar.gz
virtualjaguar_libretro-linux-x86_64.so
virtualjaguar_libretro-macos-arm64-debug.tar.gz
virtualjaguar_libretro-macos-arm64.dylib
virtualjaguar_libretro-macos-x86_64-debug.tar.gz
virtualjaguar_libretro-macos-x86_64.dylib
virtualjaguar_libretro-switch-debug.tar.gz
virtualjaguar_libretro-switch.a
virtualjaguar_libretro-tvos-arm64-debug.tar.gz
virtualjaguar_libretro-tvos-arm64.dylib
virtualjaguar_libretro-vita-debug.tar.gz
virtualjaguar_libretro-vita.a
virtualjaguar_libretro-windows-i686-debug.tar.gz
virtualjaguar_libretro-windows-i686.dll
virtualjaguar_libretro-windows-x86_64-debug.tar.gz
virtualjaguar_libretro-windows-x86_64.dll
virtualjaguar_libretro.info
Xenowings gets its sound effects back, Doom's GPU wait loop no longer eats a RISC overclock, and the desktop app gains shaders on every package, an Interface settings tab and a new font picker.
v3.9.1 is a polish release on top of v3.9.0. For RetroArch and Provenance users it brings two DSP/GPU accuracy fixes derived from the original chip netlists, a faster GPU idle-loop fast-forward, a GDB stub that works with stock gdb, a framebuffer bounds fix, loader fixes for twelve homebrew and demo files, and working legacy MSVC Windows builds again. With default settings the cartridge corpus is byte-identical to v3.9.0 except Xenowings (sound effects now play), a frame or two of Skyhammer (a GPU divide by zero now returns the hardware's value), and the twelve files the loader now places where they were linked. No option keys were removed, no listed option values changed, and the savestate format stays v17.
div normally writes the register's old value (Atari bug list item 2, modelled since v3.7.1). The jag_sim netlists show the exception: the scoreboard compares an indexed store's offset field against the divide's target as if it were a register number, and when they match the store waits for the quotient. Xenowings' sound mixer hits that case (store r7,(r14+7)), its joypad reader does not (store r8,(r14+1)), so both now behave as on hardware. Rule and citations: docs/jtrm-errata.md B25.$80000000 and above, 16.16 divides that overflow, and divide by zero now give the netlist's result (B26). The only corpus change is Skyhammer: frames 1488 and 2072 in a 3000-frame HLE / Fast-blitter run, audio identical.jr range (30 bytes, was 14). Doom's wait loop is now skipped: instructions per frame on Doom EX drop from 83 M to 36 M at 1x and from 141 M to 37 M at RISC 2x, so a 2x overclock costs about the same as 1x. Video, audio and savestate hashes are identical with the change on 160 carts (six configurations including 2x), with idle skip off, and on 35 CD images in HLE and BIOS mode.brew install gdb (or gdb-multiarch) connects with only set endian big. detach and kill leave the emulator running, watchpoints work (one slot), and long monitor output is no longer cut at 512 bytes; monitor trace shows the newest entries. LLDB can read memory but has no 68K target. Recipe: docs/gdb-stub-guide.md.601A executables (Mandelbrot Demo) and Jaguar Server JAGR type 2 images (INTRO, INTROMOD) with their own layouts. Headerless BJL programs that used to be mapped as cartridges now load as RAM programs at $4000 (Hubble Fade, Hubble Nebula, Drumpad2), and Painter (bin) is placed at $10000. Images linked at $802000 are mapped there (Rayman Demo .jag/.rom, BadCode4 (Metal)/(Modified) (rom)). A cart whose $404 vector is erased ($FFFFFFFF) is entered at $802000 when a program starts there (Phase Zero (PD), and the Atari Jaguar Developer CD BIOS .j64, which now runs instead of showing a black screen). In a full corpus sweep 16 matrix cells improved and none regressed; no other file loads differently.snprintf in the debug interface. The RISC disassembler header now includes the pre-2015 shim itself. MinGW Windows builds were not affected..deb ship a working shader runtime (#955), and the Flatpak builds it as its own offline module (#953). When the runtime is unavailable, the Shader section says why and links to the docs..dylibs, cue2cdi, the Jaguar CD tools and the app, so Gatekeeper opens them without a right-click. Until now only the app was.chdman in jagcd-tools-macos.zip needed Homebrew's SDL3, ran only on Apple Silicon and required macOS 26. It is now built without SDL, universal (Intel and Apple Silicon), for macOS 11 and later.? (trap_loop) (#975, #980)..chd/.cdi, LAN-only link play, second instance on double-click on Windows and Linux).RISC overclocking no longer costs more than it should, and the Virtual Jaguar desktop app ships: a standalone emulator for macOS, Windows and Linux built on the same core.
v3.9.0 brings the RISC overclock fix and new timing work to the core, and debuts the standalone desktop app (#833). For RetroArch and Provenance users the change is the overclock fix, an experimental DSP timing model behind an existing option, and measurement tooling. With default settings the core is byte-identical to v3.8.0 in the cartridge and CD boot matrices. No option keys were removed, no listed option values changed, and the savestate format stays v17.
RISC overclock (GPU/DSP clock 0.5x, 1.5x, 2x) keeps the idle-loop fast-forward. Any non-stock RISC clock used to switch the idle-loop fast-forward off, so games that spend most of each frame in a wait loop emulated twice the cycles, all of them spinning, and a 2x overclock ran far slower than it should. The fast-forward is exact at any clock scale, so it now stays on (#891, #569, #378). Headless harness on an M4 Max, core fps at 2x:
| Title | 2x before | 2x after | 1x |
|---|---|---|---|
| Doom | 52 | 82 | 135 |
| Alien vs Predator | 71 | 204 | 240 |
| Tempest 2000 | 77 | 209 | 225 |
Video, audio and savestates are byte-identical with the fast-forward on and off at 0.5x, 1.5x and 2x on 12 titles in HLE and 7 on the real BIOS; stock 1x is unchanged. The Settings sublabel and the [perf] log line no longer name the RISC clock as a suppressor. Doom's GPU loops are still not fast-forwarded, so Doom at 2x still takes about 1.65x the time of 1x.
Timing work, part of the accuracy plan (#908, #408, #313). Two pieces are measurement tooling with no behaviour change: a Doom pace gate, a GPU busy-time counter and a Checkered Flag canary (S0), and a bus-traffic census with a grant-latency function (S2). The third (S1) is a DSP pipeline scoreboard plus a 16-bit external-bus timing model. It rides on the existing GPU/DSP Pipeline Timing (Experimental) option (formerly "GPU Pipeline Timing"), which stays off by default. Anyone who already had that option on now also gets the DSP model, and like the GPU model it turns the idle-loop fast-forward off. It does not improve pacing yet: with it on, Checkered Flag runs 4.9 fields per game frame against its 3.0 cap.
Clock scale options also accept a percentage; GDB halt timeout clamped. 175 or 175% (clamped to 25-400) is read in addition to the listed values, which map exactly as before; the GDB halt timeout is clamped to 3600 seconds (#906).
A private frontend channel and a debug interface that RetroArch never sees. The core can tell the desktop app about link up/down, link statistics, wire speed and crash-watchdog hits (#906, docs/app-frontend-extension.md), pick a BIOS file and boot a BIOS on its own (#910), and expose memory, registers, breakpoints and the display list to the app's debug tools (#919, docs/app-debug-tools.md). All of it is opt-in by a handshake only the app answers; under RetroArch and Provenance it is a no-op.
A front end of its own in app/: SDL3 for the window, audio and input, Dear ImGui for the interface, OpenGL 3.3 for presentation. It drives the core through the same retro_* API that RetroArch uses, so core options and save states behave the same. It carries the core's version number and ships with each release. It was built in #867; docs and site in #896. Screenshots: https://jaguar.provenance-emu.com/app.html
<Title>.png files in the app's covers folder (#901). Until libretro-thumbnails has a Jaguar CD set, discs fall back to box art, title screens and snaps hosted on the project site (https://jaguar.provenance-emu.com/thumbnails/), asked only after libretro-thumbnails misses (#907)..chd discs are checksummed from their first track (like .cue), .cdi best-effort, and a disc whose checksum is not Redump's (a non-Redump bin/cue or .cdi) is matched by file or folder name when only one game fits. Hover a tile to see how it was identified (#901). CHD hashing is verified against synthetic images only; checking real Redump CHDs is still to do.JAGCD.BIN-style upper-case names are treated as the core's search sees them on macOS and Windows. One click copies a BIOS into the system folder under the name the core reads (#910, #899, #838).Check the full installation guide on the wiki, or ask in our Discord community.
Join Discord