Download and extract archives directly on your Nintendo 3DS.
Phase 3 UX release — interactive bottom queue, in-app URL entry, local archive extraction, rolling speed meter & ETA.
- Download files from HTTP/HTTPS URLs
- Extract ZIP, TAR, 7Z, RAR and other formats
- Google Drive URL support
- Dark themed GUI (citro2d)
- Sleep mode downloads
- LED notifications
ZIP, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, TAR.ZSTD, 7Z, RAR (read-only), GZIP, BZIP2, XZ, ZSTD
- Copy
3ds-zip-extractor.3dsxto/3ds/on your SD card - Launch from Homebrew Launcher
- On first run, config file is created at
/3ds/zip-extractor/config.txt - Edit config file to add URLs
- Restart the app
Edit /3ds/zip-extractor/config.txt:
extract_path=sdmc:/extracted/
auto_retry=true
max_retries=3
# Optional limits (defaults shown)
# max_urls=100
# download_buffer_kb=128
# connect_timeout_s=30
# Add URLs below
https://example.com/file.zip
# Optional: integrity check — append " sha256:<64-hex>" to a URL
https://example.com/strict.zip sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855The format is backwards-compatible with v1.0 config files.
The bottom screen is a persistent interactive queue — touch a row to toggle it between pending and skipped (no-op while it's downloading) and use the on-screen action bar to fire the same actions as the physical buttons.
| Button | Action |
|---|---|
| A | Start downloads / Confirm selection |
| B | Cancel current operation |
| X | View queue (paginated detail screen) |
| Y | Add URL via on-screen keyboard (in main menu); skip failed (in queue view) |
| L / R | Page through URLs in the queue view |
| SELECT | Open the SD card file browser |
| START | Exit |
| D-Pad / Circle Pad | Navigate menus and scroll the bottom queue |
| Touch (queue row) | Toggle pending ↔ skipped |
| Touch (action bar) | Same as the corresponding physical button |
| R + A (after Y) | Persist the freshly-added URL into config.txt |
In the file browser, pressing A on a supported archive prompts to extract it directly — no download required.
During downloads the top screen shows the rolling throughput
(MB/s) and a live ETA (mm:ss, capped at 99:59); during extraction
a percentage progress bar is drawn whenever the entry count can be
pre-determined, or a spinner otherwise.
# Requires devkitPRO + devkitARM + portlibs 3DS
makedocker run --rm -v "$PWD":/src -w /src devkitpro/devkitarm:latest makeThis is the same image used by CI; useful for reproducible builds.
The pure modules (config, gdrive, integrity, archive detection)
have an off-target unit-test suite that runs on a normal Linux/macOS
PC — no devkitARM, no 3DS:
make -C tests -f Makefile.host test # plain build
make -C tests -f Makefile.host test-asan # with AddressSanitizer + UBSan
make -C tests -f Makefile.host coverage # gcov/lcov HTML reportThe CI pipeline runs both build-3ds (Docker) and host-tests
(ASan/UBSan); both must be green for a PR to be merged.
MIT License - see LICENSE