3ds-up
A safe, automated SD card manager for Nintendo 3DS homebrew on macOS.
Why does this exist?
Managing a hacked 3DS SD card from a Mac has the same silent dangers as the Switch — macOS injects hidden files (.DS_Store, ._* files, extended attributes) that corrupt your SD and cause boot failures. On top of that, Finder's "Replace" behavior destroys folders instead of merging them, which can wipe your Luma3DS configuration in one careless drag.
3ds-up automates the entire process safely:
- Backs up your
luma/config.inibefore touching anything - Smart Merges new files onto your SD without deleting existing content
- Cleans all macOS junk files that would corrupt the 3DS
- Restores your backup automatically if anything goes wrong
- Never touches
Nintendo 3DS/(encrypted game data) orboot9strap/(bootloader)
Installation
From PyPI
pip install 3ds-up
From source
git clone https://github.com/OscarCampohermoso/3ds-up.git
cd 3ds-up
pip install -e .
Requirements
- Python 3.8 or higher
- macOS (designed specifically for macOS-related SD card issues)
Usage
Update Luma3DS and GodMode9 to the latest version
Downloads the latest releases from GitHub and installs them safely to your SD card.
3ds-up update --latest
The tool will auto-detect your SD card if it's mounted at /Volumes/. If you have multiple SD cards or a custom mount point, specify the path:
3ds-up update --latest --sd-path /Volumes/MY_SD
Update only Luma3DS (skip GodMode9)
3ds-up update --latest --luma-only
Update only GodMode9 (skip Luma3DS)
3ds-up update --latest --gm9-only
Install a local ZIP file
If you already downloaded a release ZIP manually:
3ds-up install ./Luma3DSv13.3.zip --sd-path /Volumes/MY_SD
Clean macOS junk files only (no update)
Just remove the hidden files macOS left behind, without updating anything:
3ds-up fix-archive-bit /Volumes/MY_SD
What happens during an update?
1. Backup → Saves luma/config.ini to ~/.3ds-up/backups/ (timestamped)
2. Download → Fetches latest Luma3DS and GodMode9 ZIPs from GitHub
3. Smart Merge → Copies new files to SD, preserving your existing content
Nintendo 3DS/ and boot9strap/ are NEVER touched
4. Cleanup → Removes .DS_Store, ._* files, __MACOSX/, and xattrs
5. Done → If anything fails at step 3, your backup is auto-restored
Protected Paths
These paths are never modified under any circumstances:
| Path | Why |
|---|---|
Nintendo 3DS/ |
Encrypted with your console's unique AES key — modifying corrupts all game data |
boot9strap/ |
Core bootloader — deleting this bricks your console |
Configuration Backups
Before every operation, 3ds-up saves your critical config files to:
~/.3ds-up/backups/20260228_143000/
└── luma/
└── config.ini
Commands Reference
| Command | Description |
|---|---|
3ds-up update --latest |
Download and install the latest Luma3DS + GodMode9 |
3ds-up update --latest --luma-only |
Download and install only Luma3DS |
3ds-up update --latest --gm9-only |
Download and install only GodMode9 |
3ds-up install <zip> |
Install a local ZIP file to the SD card |
3ds-up fix-archive-bit [path] |
Clean macOS junk files from the SD card |
3ds-up --version |
Show the current version |
3ds-up --help |
Show help for all commands |
Platform Support
Currently, 3ds-up is macOS-only. The tool was built specifically to address the hidden-file injection and destructive replace behavior unique to macOS.
Windows and Linux users don't face the same corruption risks, but could still benefit from the automated download and Smart Merge workflow. Contributions targeting cross-platform support are welcome — the core logic in core.py is already platform-agnostic.
License
GPLv3 — See LICENSE for details.
Related Projects
Metadata
Release files for 3ds-up 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| 3ds_up-0.1.2.tar.gz | 10.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 3ds_up-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.8 kB
Release files / 3ds_up-0.1.2.tar.gz
| Download URL | 3ds_up-0.1.2.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a88c4d50bdefcde6f7f84e57fa00088cedaddb1acafe271fc0d05aa0077c35c7
|
|
BLAKE2b-256 checksum How to use checksums |
e51431bc299c0c65eb54f4b15890db678ce9fd55edc7f690147b18529601aa9a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 28, 2026.
Transparency logRelease files / 3ds_up-0.1.2-py3-none-any.whl
| Download URL | 3ds_up-0.1.2-py3-none-any.whl |
|---|---|
| Size | 13.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
710a45218e5c486dc1d5299dcc8bfcca3cd806fefeac033b25ac89b30dec307b
|
|
BLAKE2b-256 checksum How to use checksums |
014b80910efe5010f6c616b100aeeb1b688982babacf702839c873e7650262c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 28, 2026.
Transparency logSecurity for 3ds-up 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for 3ds_up-0.1.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.