switch-up
A safe, automated SD card manager for Nintendo Switch homebrew on macOS, Windows, and Linux.
Why does this exist?
switch-up started as a fix for the very real problems macOS causes when updating a Switch SD card.
macOS silently injects hidden files (.DS_Store, ._* files, extended attributes) into folders on FAT32/exFAT media. Those files can corrupt your SD card from the Switch's point of view and trigger boot failures, black screens, and cryptic errors.
On top of that, macOS Finder's "Replace" behavior is destructive — dragging a folder with the same name can delete the original instead of merging contents. A simple update can wipe out configs, mods, cheats, and homebrew files.
Even on Windows and Linux, users still benefit from a safer update flow.
switch-up automates the process safely:
- Backs up your configuration files before touching anything
- Smart Merges new files onto your SD without deleting existing content
- Cleans hidden junk files that should not live on the SD card
- Restores your backup automatically if anything goes wrong
Installation
From PyPI
pip install switch-up
From source
git clone https://github.com/yourusername/switch-up.git
cd switch-up
pip install -e .
Requirements
- Python 3.8 or higher
- macOS, Windows, or Linux
Usage
Update Atmosphere and Hekate to the latest version
Downloads the latest releases from GitHub and installs them safely to your SD card.
switch-up update --latest
The tool will auto-detect your SD card from the default mount locations of the current platform:
- macOS:
/Volumes - Linux:
/media,/run/media,/mnt - Windows: mounted drive letters such as
E:/
If you have multiple SD cards or a custom mount point, specify the path manually:
switch-up update --latest --sd-path /path/to/your/sd
Examples:
switch-up update --latest --sd-path /Volumes/MY_SD
switch-up update --latest --sd-path /media/oscar/MY_SD
switch-up update --latest --sd-path E:/
Update only Atmosphere (skip Hekate)
switch-up update --latest --ams-only
Install a local ZIP file
If you already downloaded a release ZIP manually:
switch-up install ./atmosphere-1.8.0.zip --sd-path /path/to/your/sd
Clean junk files only (no update)
Removes hidden compatibility junk from the SD card. On macOS this also attempts to remove extended attributes.
switch-up fix-archive-bit /path/to/your/sd
What happens during an update?
1. Backup → Saves hekate_ipl.ini, exosphere.ini, and other configs
to ~/.switch-up/backups/ (timestamped)
2. Extract → Unpacks the ZIP to a temporary directory
3. Smart Merge → Copies new files to SD, preserving your existing content
4. Cleanup → Removes .DS_Store, ._* files, __MACOSX/, and xattrs on macOS
5. Done → If anything fails at step 3, your backup is auto-restored
Configuration Backups
Before every operation, switch-up saves your critical config files to:
~/.switch-up/backups/20260227_143000/
├── hekate_ipl.ini
├── exosphere.ini
├── bootloader/hekate_ipl.ini
└── atmosphere/config/system_settings.ini
These backups persist across sessions so you can always recover your settings.
Commands Reference
| Command | Description |
|---|---|
switch-up update --latest |
Download and install the latest Atmosphere + Hekate |
switch-up update --latest --ams-only |
Download and install only Atmosphere |
switch-up install <zip> |
Install a local ZIP file to the SD card |
switch-up fix-archive-bit [path] |
Clean hidden junk files from the SD card; remove xattrs on macOS |
switch-up --version |
Show the current version |
switch-up --help |
Show help for all commands |
Platform Support
switch-up now supports macOS, Windows, and Linux.
Current behavior by platform
-
macOS
- Auto-detects SD cards under
/Volumes - Removes hidden junk files
- Removes extended attributes when possible
- Auto-detects SD cards under
-
Linux
- Auto-detects SD cards under
/media,/run/media, and/mnt - Supports backup, Smart Merge, local ZIP install, and release downloads
- Skips macOS-only xattr cleanup
- Auto-detects SD cards under
-
Windows
- Auto-detects SD cards from mounted drive letters
- Supports backup, Smart Merge, local ZIP install, and release downloads
- Skips macOS-only xattr cleanup
License
GPLv3 — See LICENSE for details.
Metadata
Release files for switch-up 0.2.0
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 | |
|---|---|---|---|---|
| switch_up-0.2.0.tar.gz | 25.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| switch_up-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.8 kB
Release files / switch_up-0.2.0.tar.gz
| Download URL | switch_up-0.2.0.tar.gz |
|---|---|
| Size | 25.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86b0c56f7752a758d426944ce6bde32e8b3ab1b43fdef0231a00fb3cf45520a4
|
|
BLAKE2b-256 checksum How to use checksums |
5a0570f9f17e3c6b04a896ea81e59659aadcf1d9018a0171775e6902079b7d53
|
| 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 Mar 28, 2026.
Transparency logRelease files / switch_up-0.2.0-py3-none-any.whl
| Download URL | switch_up-0.2.0-py3-none-any.whl |
|---|---|
| Size | 27.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
04874ee7b93252352d38893fd76321ee90fd031439323ae63d4b8029a1110503
|
|
BLAKE2b-256 checksum How to use checksums |
d722cfdc887c9b3f9e9dc7655179b1f18736462ca7299c70668aed543d0e8fb6
|
| 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 Mar 28, 2026.
Transparency logSecurity for switch-up 0.2.0
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 switch_up-0.2.0.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 Mar 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.