Nó làm gì, cụ thể
Bạn có file NSP của game Switch (bản base, kèm update, kèm DLC nếu có) và file prod.keys. nxnative là một script Python biến đống đó thành một file IPA không ký, cài qua AltStore, Sideloadly hay LiveContainer. Hết.
Điểm khác biệt nằm ở chỗ nó không phải emulator. Không có lớp giả lập CPU, không có BIOS giả, không có “game image” chạy trong máy ảo. Code của chính game chạy trực tiếp trên chip Apple, còn phần đồ họa NVN của Switch được dựng lại trên Metal. README nói thẳng: repo không chứa bất kỳ nội dung game nào, và dự án không liên kết gì với Nintendo hay nhà phát hành.
Để làm được chuyện đó, nó ghép nhiều mảnh: một NSO rewriter (đổi định dạng file thực thi của Switch), một host đứng thay cho Horizon OS, một lớp NVN trên Metal, và một app shell iOS. Shader Maxwell của game được dịch sang SPIR-V rồi sang Metal Shading Language qua SPIRV-Cross.
Vì sao 572 sao trong 6 ngày
Repo tạo ngày 13/10/2026, cập nhật lần cuối 19/10/2026. Sáu ngày, 572 sao, viết bằng C, license MIT. Con số đó tự nó giải thích phần lớn độ hot: đây là loại dự án mà dân handheld chờ từ lâu, và nó xuất hiện với một bảng game đã test chạy được trên iPhone thật.
Danh sách đó không phải demo cho vui. Super Mario Bros. Wonder (~4 GB), Metroid Dread (~5 GB), Super Mario Odyssey (~6 GB), The Legend of Zelda: Link’s Awakening (~6 GB), Hades (~4 GB), 13 Sentinels: Aegis Rim (~5 GB), Super Mario 3D World + Bowser’s Fury (~3 GB), Hyrule Warriors: Age of Calamity (~15 GB), Fire Emblem: Three Houses (~13 GB), Fire Emblem Engage (~15 GB), Breath of the Wild (~16 GB). Hai game trong đó được đẩy lên 60 fps so với 30 fps trên Switch gốc: Fire Emblem Engage và Breath of the Wild. Đó là lý do nhiều người bấm sao hơn là vì cái tên repo.
Còn một chi tiết khiến tôi dừng lại lâu hơn cả bảng game: với Fire Emblem: Three Houses, lúc đóng gói, script khởi động game trên máy Mac vài giây để thu thập shader game tự build lúc chạy. Nghe hơi điên nhưng hợp lý về mặt kỹ thuật, vì shader biên dịch trước thì lần chơi đầu bớt giật.
Đang port: The Legend of Zelda: Tears of the Kingdom (base + update 1.4.3). Hang động mở đầu render được trên Mac, nhưng chưa nhét vừa bộ nhớ iPhone.
Cài và pack thử
Yêu cầu môi trường: máy Mac có Xcode và Homebrew. Cài tool một lần:
git clone https://github.com/seedds/nxnative.git && cd nxnative
brew install xcodegen zstd spirv-cross
brew install --cask dotnet-sdk
python3 -m pip install lz4 capstone fonttools
Bỏ NSP của một game vào một thư mục, gồm bản base và update (và DLC nếu có):
~/Games/MarioWonder/
Super Mario Bros. Wonder [010015100B514000][v0].nsp
Super Mario Bros. Wonder [010015100B514800][v327680].nsp
Rồi chạy:
python3 scripts/build_ipa_from_nsp.py ~/Games/MarioWonder -k ~/keys/prod.keys
IPA ra cùng thư mục, ví dụ ~/Games/MarioWonder/SMBWMobile.ipa. Lần build đầu mất 30 đến 60 phút, các lần sau khoảng 10 phút. Cần trống khoảng gấp đôi dung lượng NSP cộng thêm 10 GB. Các option như -o (đường dẫn output) hay --app-name xem bằng -h.
Cài IPA bằng tool sideload quen thuộc. App lấy tên, icon và version của game (version của bản update, ví dụ 1.2.1 với Mario Wonder; nếu không có update thì lấy của bản base).
Về phần chơi: chạm 2D hoặc 3D ở trên cùng để đổi layout, app nhớ lựa chọn. 3D World, Breath of the Wild, Odyssey, Hades, Age of Calamity và Three Houses mặc định 3D, các game còn lại 2D. Cắm tay cầm thì touch control ẩn đi và giữ đủ nút. Ngôn ngữ mặc định tiếng Anh, muốn tiếng Trung thì thêm dòng DM_LANG=zh-Hans vào Documents/env.txt.
Ai nên thử, và khi nào thì không
Nhóm dùng thật sự là người có sẵn thư viện NSP hợp lệ, có Mac để build, và có iPhone 15 Pro trở lên hoặc iPad chip M1 trở lên chạy iOS/iPadOS 26+. Điều kiện phần cứng này không phải khuyến nghị cho vui: texture của game nén BC, iPhone đời cũ không đọc được định dạng đó.
Nếu bạn tò mò về cách Horizon HLE hoạt động, cách NVN map sang Metal, hay đơn giản muốn xem Breath of the Wild chạy 60 fps trên điện thoại, repo này đáng đọc. Code C, license MIT, cấu trúc rõ ràng theo từng tầng.
Còn nếu bạn không có Mac, hoặc máy iPhone dưới A17 Pro, thì dừng ở đây. Game ngoài danh sách test cũng không được hỗ trợ: script vẫn ghi survey và cố pack IPA bằng cách đoán setting, nhưng IPA đó có thể không khởi động.
Đặt cạnh các lựa chọn khác
So với Ryujinx hay yuzu, khác biệt là bản chất: hai dự án kia là emulator, chạy được trên nhiều nền tảng và nhiều game hơn, nhưng luôn có lớp dịch lệnh. nxnative chạy native nên hiệu năng tiềm năng cao hơn, đổi lại độ phủ game cực hẹp, phụ thuộc chip đời mới, và không có amiibo lẫn tính năng online.
Đáng nói là nxnative không giấu việc mình đứng trên vai người khác. Phần lớn khung sườn (NSO rewriter, host Horizon, lớp NVN trên Metal, app shell iOS) bắt nguồn từ d2r-mobile, dự án làm điều tương tự cho Diablo II: Resurrected, cũng MIT, và fix được đẩy qua lại hai chiều. Ryujinx đóng góp shader translator (dùng nguyên bản trong dm/third_party/ryujinx), Atmosphère là tham chiếu cho ngữ nghĩa đồng bộ của Horizon, LibHac đọc NSP và xếp update đè lên base game, deko3d cho thuật toán layout texture, libvpx cho video VP9, stb_vorbis cho tiếng trong movie. Danh sách acknowledgement dài và ghi rõ license từng thứ, điều mà không phải repo nào cũng làm tử tế.
Ưu, nhược, và mấy chỗ cần biết trước
- Ưu: chạy native, không phải emulator. Có bảng game test thật trên iPhone. Hai game lên được 60 fps. License MIT, dễ đọc, dễ fork. Toolchain cài bằng brew và pip, không cần build từ source phức tạp.
- Nhược: bắt buộc Mac để build. Chỉ iPhone 15 Pro trở lên hoặc iPad M1 trở lên, iOS/iPadOS 26+. Lần build đầu 30 đến 60 phút, cần dung lượng trống lớn (gấp đôi NSP cộng 10 GB). Không amiibo, không online. Game ngoài danh sách có thể ra IPA không chạy.
- Vận hành: giật nhẹ lần đầu vào cảnh mới là bình thường, app compile graphics một lần rồi nhớ cho lần sau. Cài lại app bằng một số tool sideload có thể tạo thư mục data mới, phải copy
save/vàpso_user.tsvtừ thư mục cũ sang. Log nằm ởlog.txt, lần chạy trước làlog.prev.txt, trong app Files. Có lỗi đã biết: Fire Emblem Engage có thể mất vài âm thanh sau khi chuyển ra rồi quay lại app. - Pháp lý: repo không chứa nội dung game, nhưng bạn tự chịu trách nhiệm với NSP và
prod.keysmình dùng. Đây là công cụ, không phải kho game.
Một điểm trưởng thành đáng ghi nhận: README ghi rõ game nào chạy, game nào đang port, giới hạn phần cứng nằm ở đâu, và không hứa gì thêm. Với dự án 6 ngày tuổi, mức minh bạch đó hiếm hơn 572 sao.
Tôi sẽ không cài lên máy chính ngay. Nhưng nếu bạn có iPhone 15 Pro, một Mac rảnh 1 tiếng và file NSP của Mario Wonder, đây là thí nghiệm cuối tuần đáng làm: 4 GB IPA, một lần build, và một game Switch chạy bằng Metal. Repo ở đây: seedds/nxnative.
