Zero Emulation Despite a 2 GB RAM Limit: How TVPort Runs Nintendo Switch Games Natively on Apple TV 4K

Native console game execution on Apple Silicon hardware has just claimed a new spot in the living room. Shortly after nxnative and Utsuro demonstrated native Switch and Xbox One game execution on iPhone and Mac, an independent developer has released TVPort 1.0 on GitHub. Built as a dedicated fork of seedds' open-source nxnative project under the MIT license, TVPort converts user-dumped Nintendo Switch titles into standalone tvOS applications that run directly on a 3rd-generation Apple TV 4K powered by the A15 Bionic chip, with zero CPU emulation and no command-line setup required.
Direct ARM64 Execution on A15 Bionic and Apple's Metal API
Much like the recent community breakthroughs that got Mario Kart World running on Mac through an nxnative fork, TVPort is not a traditional emulator. Because both the original Nintendo Switch and Apple's A15 Bionic processor share an ARM64 instruction set architecture, the tool statically rewrites a game's 64-bit NSO executables from a user's legal game dump (NSP or XCI files paired with console prod.keys).
As a result, the game's native machine code executes directly on the Apple TV's CPU cores without relying on Just-In-Time (JIT) compilation, while a High-Level Emulation (HLE) host layer handles proprietary Horizon OS system services and translates NVIDIA NVN graphics calls into Apple's Metal framework. The only strict architectural requirement is that the game must include a 64-bit binary; older 32-bit releases, such as Mario Kart 8 Deluxe prior to update 2.0, cannot boot on tvOS.
To streamline the process, the project bundles a graphical macOS companion application (TVPort.app, requiring an Apple Silicon Mac running macOS 26.6 or later). Users simply point the app to their game folder and prod.keys, select their paired Apple TV 4K in developer mode, and click Build & Install. While a game's initial compilation takes between 30 and 60 minutes to rewrite executables and process shaders, subsequent builds finish in just a few minutes. A standard free Apple ID works out of the box, requiring a quick one-click refresh every 7 days when the free signing certificate expires.
Bypassing the 2,097 MB Jetsam RAM Limit and Decoding BC Textures on A15
Bringing full-scale Nintendo Switch games to tvOS required solving two severe hardware and operating system bottlenecks: strict per-process memory termination and missing texture compression hardware.
On original Nintendo Switch hardware, games have access to roughly 3.2 GB of system memory. On tvOS, however, Apple's Jetsam memory manager immediately terminates any application whose anonymous memory footprint reaches 2,097 MB. Because free Apple developer accounts cannot use the Increased Memory Limit entitlement on tvOS, TVPort bypasses the ceiling by mapping the game's guest memory to a shared sparse file (guest_block in hle_svc.c) on internal flash storage. Because tvOS excludes file-backed memory pages from the 2,097 MB footprint tally, the operating system seamlessly pages data in and out of up to 4 GB of free flash storage like a dynamic swap file.
| Super Mario Odyssey Benchmark (Handheld Mode, Medium Textures) | Standard Anonymous Memory | File-Backed Memory (TVPort) |
|---|---|---|
| Boot Footprint | 879 MiB | 242 MiB |
| Jetsam Termination Point | Killed at 2,097 MiB | Kept under 700 MiB |
| Peak Process Footprint | 2,097 MiB (App Terminated) | 924 MiB (Zero Crashes) |
| Remaining tvOS Headroom | None | 1,173 MiB |
| Peak Metal Allocation | 1,514 MiB | 2,298 MiB |
The second hurdle involves the A15 Bionic chip itself, which lacks native hardware decoding for the Block Compression (BC) texture formats utilized by the Switch's Tegra X1 GPU. Prior to optimization, decoding 264 textures on the CPU submission thread caused a massive 285 ms stall inside a single 556 ms frame. TVPort resolves this by decoding BC1 through BC5 textures via a dedicated GPU compute kernel and distributing BC6H, BC7, and 3D texture decompression across all CPU cores, while using the DM_BC_MAX_DIM flag to drop the heaviest mipmap levels (which expand to 4 to 8 times their original Switch size once decoded). With these fixes active, loading 264 textures drops from 271 ms down to just 47 ms.
Zelda: Tears of the Kingdom at 30 FPS, Super Mario Odyssey at 60 FPS, and Passive Cooling
In initial testing on a 3rd-generation Apple TV 4K (A15 Bionic) running tvOS, the developer confirmed three flagship Nintendo Switch titles running natively:
- Super Mario Odyssey (Version 1.3.0): Runs cleanly at 59 to 60 FPS after scene transitions in Handheld mode with medium texture detail.
- The Legend of Zelda: Tears of the Kingdom (Version 1.4.2): Runs at a steady 30 FPS in Handheld mode when set to 75% 3D resolution via the app's render-scale stub (jumping from 15 FPS at native scale to 30 FPS after the opening cutscene, with GPU frame times hovering around 28 to 29 ms while keeping UI menus razor-sharp).
- Animal Crossing: New Horizons (Version 1.0.0): Fully playable, supporting a single shared island across multiple local player profiles.
Because the 3rd-generation Apple TV 4K relies entirely on passive cooling with no internal fan, thermal management plays a crucial role during gameplay. In demanding titles like Tears of the Kingdom, attempting to run unlocked quickly pushes the box into tvOS's serious thermal state within 20 to 40 seconds, causing the operating system to slash GPU clock speeds to roughly a third of their peak frequency and slowing down CPU-bound loading screens. To prevent severe thermal throttling, TVPort enables a Hold 30 fps when the Apple TV is hot setting by default, cutting hardware workload in half so the chassis heats up much more gradually.
Finally, TVPort introduces a clever multi-layered save system to defeat tvOS's aggressive cache purging. Because tvOS blocks writes to the standard Documents directory and routinely wipes Library/Caches when storage runs low, TVPort compresses save data on the fly using LZFSE seconds after a game saves,shrinking a 2 MB Super Mario Odyssey save file down to just 9 KB,and stores it safely inside persistent app preferences (NSUserDefaults). Whenever the TVPort companion app is open on a Mac on the same network, it also pulls automated save backups every 5 minutes to local storage or iCloud Drive, while a built-in "Who's playing?" prompt at launch allows up to 8 family members to maintain separate save files on the same television.
My Perspective
From an engineering standpoint, what TVPort pulls off on a locked-down streaming box is genuinely impressive. The A15 Bionic inside the 3rd-generation Apple TV 4K has plenty of raw silicon muscle, but tvOS was never designed to host 3.2 GB console games. Bypassing Apple's ruthless 2,097 MB Jetsam memory cap without a paid developer entitlement or jailbreak simply by mapping guest RAM to a file-backed swap block on internal flash storage is brilliant low-level problem solving. The same goes for compressing save files down to 9 KB with LZFSE and tucking them inside NSUserDefaults so tvOS doesn't wipe your progress overnight.
Of course, physical hardware limits still apply: without an active cooling fan inside the Apple TV 4K chassis, sustained loads in heavy games like Tears of the Kingdom inevitably run into thermal throttling, making the 75% resolution scale and 30 FPS cap mandatory compromises. Even so, watching a tiny passive living-room media box execute native Switch ARM64 code with multi-user save profiles and automated iCloud backups shows just how fast the open-source nxnative ecosystem is maturing.
















