ninfs (formerly fuse-3ds) is a FUSE program to extract data from Nintendo game consoles. It works by presenting a virtual filesystem with the contents of your games, NAND, or SD card contents, and you can browse and copy out just the files that you need.
Windows, macOS, and Linux are supported.
For 3DS types, The ARM9 bootROM is required. You can dump it using boot9strap, which can be set up by 3DS Hacks Guide. To dump the bootROM, hold START+SELECT+X when you boot up your 3DS. It is checked in order of:
--boot9argument (if set)
BOOT9_PATHenvironment variable (if set)
boot9_prot.bin can also be used in all of these locations.
~" means the user's home directory. "
~/3ds" would mean
/Users/username/3ds on macOS and
C:\Users\username\3ds on Windows.
CDN, CIA, and NCCH mounting may need SeedDB for mounting NCCH containers of newer games (2015+) that use seeds.
SeedDB is checked in order of:
--seeddbargument (if set)
SEEDDB_PATHenvironment variable (if set)
Python 3.6.1 or later is required.
Windows 8.1 or later is required.
An installer is provided in releases. It includes both ninfs and WinFsp, which is installed if required.
python3must be used instead of
py -3. This version has some limitations however, such as not being able to mount to directories.
py -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip
Versions of macOS supported by Apple are highly recommended. OS X Mavericks is the oldest version that should work. FUSE for macOS is required.
No standalone build is available at the moment.
python3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip
python3 -m pip install --upgrade --user https://github.com/ihaveamac/ninfs/archive/2.0.zip
--useris not needed if you are using a virtual environment.
python3 -m ninfs --install-desktop-entry. If you want to install to a location other than the default (
$XDG_DATA_HOME), you can add another argument with a path like
python3-tk. On Fedora this is
A GUI can be used by specifying the type to be
gui (e.g. Windows:
py -3 -mninfs gui, *nix:
python3 -mninfs gui). The GUI controls mounting and unmounting.
Run a mount script by using "
mount_cci game.3ds mountpoint). Use
-h to view arguments for a script.
If it doesn't work, the other way is to use
<python-cmd> -mninfs <type> (e.g. Windows:
py -3 -mninfs cci game.3ds mountpoint, *nix:
python3 -mninfs cci game.3ds mountpoint).
Windows users can use a drive letter like
F: as a mountpoint, or use
* and a drive letter will be automatically chosen.
Developer-unit contents are encrypted with different keys, which can be used with
--dev with CCI, CDN, CIA, NANDCTR, NCCH, and SD.
diskutil unmount /path/to/mount
fusermount -u /path/to/mount
mount_cci game.3ds mountpoint
mount_cdn cdn_directory mountpoint
mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpoint
mount_cia game.cia mountpoint
mount_exefs exefs.bin mountpoint
mount_nandctr nand.bin mountpoint
mount_nandctr --otp otp.bin nand.bin mountpoint
mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint
mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpoint
mount_nandtwl --console-id 4E696E74656E646F nand_dsi.bin mountpoint
mount_nandtwl --console-id 4E696E74656E646F --cid 576879446F657344536945786973743F nand_dsi.bin mountpoint
mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpoint
mount_nandhac --keys prod.keys rawnand.bin mountpoint
mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpoint
mount_nandhac --keys prod.keys --partition SYSTEM SYSTEM.bin mountpoint
mount_ncch content.cxi mountpoint
mount_romfs romfs.bin mountpoint
Nintendo 3DSdirectory from an SD card:
mount_sd --movable movable.sed "/path/to/Nintendo 3DS" mountpoint
Nintendo 3DSdirectory from an SD card with an SD key hexstring:
mount_sd --sd-key 504C415900000000504F4B454D4F4E21 "/path/to/Nintendo 3DS" mountpoint
mount_srl game.nds mountpoint
mount_threedsx boot.3dsx mountpoint
ninfsis under the MIT license.
Special thanks to @Stary2001 for help with NAND crypto (especially TWL), and @d0k3 for SD crypto.
OTP code is from Stary2001/3ds_tools, and is under the MIT license.