Two things here:
hello-switch/: minimal libnx sample to check your devkitPro setup.romm-switch-client/: SDL2/libnx RomM downloader (the one you want).pacman -Syu
pacman -S devkitA64 switch-dev switch-tools switch-curl
echo $DEVKITPRO # expect /opt/devkitpro
aarch64-none-elf-gcc --version
ls $DEVKITPRO/libnx/switch_rules
If DEVKITPRO is empty, source /etc/profile.d/devkit-env.sh or restart the devkitPro shell. macOS/Linux: use the devkitPro pacman bootstrap, then install the same packages.
cd hello-switch
make clean # optional
make # build/hello-switch.nro
make run # sends via nxlink if hbmenu netloader (Y) is active
Manual deploy: copy build/hello-switch.nro to sd:/switch/hello-switch/hello-switch.nro.
cd romm-switch-client
make clean && make # produces romm-switch-client.nro
make run # nxlink to a Switch in netloader mode
Put .env at sdmc:/switch/romm_switch_client/.env (sample):
SERVER_URL=https://YOUR_ROMM_HOST:PORT # http:// and https:// are supported
USERNAME=your_username
PASSWORD=your_password
DOWNLOAD_DIR=sdmc:/romm_cache # base cache; platform/title_id subfolders are created
HTTP_TIMEOUT_SECONDS=30
FAT32_SAFE=true
LOG_LEVEL=info # debug|info|warn|error
SPEED_TEST_URL= # optional; URL to fetch ~40MB (Range) to estimate throughput; leave blank to skip
config.json is also read and currently overrides .env on the same keys (load order is .env then config.json). JSON supports schema_version (current 1), and legacy keys are migrated in-memory when possible.
docs/config.md - config keys, defaults, SD paths.docs/controls.md - current controller mapping.docs/downloads.md - download pipeline, resume/retry rules, badges.docs/logging.md - logging behavior and levels.source/input.cpp (positional codes); UI hints match.<download_dir>/<platform>/<title_id>/... (flat fallbacks supported).title_id.<download_dir>/temp/<platform>/<rom>/<file>/..., archive bit set for multi-part.LOG_LEVEL); debug is noisy.romfs/HD44780_font.txt with macron glyph.hello-switch/ - minimal libnx sample.romm-switch-client/ - full client sources (SDL, downloader, config, logging, docs in docs/)..gitignore - shared ignores.tests/make, not devkitPro):
cd tests
make # uses host g++/make; run from MSYS2 MinGW64 on Windows
./romm_tests # Catch2 runner; use -s or --list-tests for detail
Tests cover URL parsing for HTTP/HTTPS (including default ports) and strict chunked decoding (valid/malformed, extensions, missing CRLF). No Switch libs needed.
pacman -S gcc make
Use the MSYS2 MinGW64 shell (not PowerShell/MSYS). Override compiler if needed: CXX=/usr/bin/g++ make.
switch_rules missing or link errors: ensure DEVKITPRO is set and packages are current (pacman -Syu devkitA64 switch-dev switch-tools).make run fails: install switch-tools (nxlink), ensure hbmenu netloader is active and the Switch is reachable on LAN.LOG_LEVEL in .env and that sdmc:/switch/romm_switch_client/ exists and is writable.73 commits
C++
99.1%
Two things here:
hello-switch/: minimal libnx sample to check your devkitPro setup.romm-switch-client/: SDL2/libnx RomM downloader (the one you want).pacman -Syu
pacman -S devkitA64 switch-dev switch-tools switch-curl
echo $DEVKITPRO # expect /opt/devkitpro
aarch64-none-elf-gcc --version
ls $DEVKITPRO/libnx/switch_rules
If DEVKITPRO is empty, source /etc/profile.d/devkit-env.sh or restart the devkitPro shell. macOS/Linux: use the devkitPro pacman bootstrap, then install the same packages.
cd hello-switch
make clean # optional
make # build/hello-switch.nro
make run # sends via nxlink if hbmenu netloader (Y) is active
Manual deploy: copy build/hello-switch.nro to sd:/switch/hello-switch/hello-switch.nro.
cd romm-switch-client
make clean && make # produces romm-switch-client.nro
make run # nxlink to a Switch in netloader mode
Put .env at sdmc:/switch/romm_switch_client/.env (sample):
SERVER_URL=https://YOUR_ROMM_HOST:PORT # http:// and https:// are supported
USERNAME=your_username
PASSWORD=your_password
DOWNLOAD_DIR=sdmc:/romm_cache # base cache; platform/title_id subfolders are created
HTTP_TIMEOUT_SECONDS=30
FAT32_SAFE=true
LOG_LEVEL=info # debug|info|warn|error
SPEED_TEST_URL= # optional; URL to fetch ~40MB (Range) to estimate throughput; leave blank to skip
config.json is also read and currently overrides .env on the same keys (load order is .env then config.json). JSON supports schema_version (current 1), and legacy keys are migrated in-memory when possible.
docs/config.md - config keys, defaults, SD paths.docs/controls.md - current controller mapping.docs/downloads.md - download pipeline, resume/retry rules, badges.docs/logging.md - logging behavior and levels.source/input.cpp (positional codes); UI hints match.<download_dir>/<platform>/<title_id>/... (flat fallbacks supported).title_id.<download_dir>/temp/<platform>/<rom>/<file>/..., archive bit set for multi-part.LOG_LEVEL); debug is noisy.romfs/HD44780_font.txt with macron glyph.hello-switch/ - minimal libnx sample.romm-switch-client/ - full client sources (SDL, downloader, config, logging, docs in docs/)..gitignore - shared ignores.tests/make, not devkitPro):
cd tests
make # uses host g++/make; run from MSYS2 MinGW64 on Windows
./romm_tests # Catch2 runner; use -s or --list-tests for detail
Tests cover URL parsing for HTTP/HTTPS (including default ports) and strict chunked decoding (valid/malformed, extensions, missing CRLF). No Switch libs needed.
pacman -S gcc make
Use the MSYS2 MinGW64 shell (not PowerShell/MSYS). Override compiler if needed: CXX=/usr/bin/g++ make.
switch_rules missing or link errors: ensure DEVKITPRO is set and packages are current (pacman -Syu devkitA64 switch-dev switch-tools).make run fails: install switch-tools (nxlink), ensure hbmenu netloader is active and the Switch is reachable on LAN.LOG_LEVEL in .env and that sdmc:/switch/romm_switch_client/ exists and is writable.73 commits
C++
99.1%