This repository holds metadata, scripts and GitHub workflows only. The
pre-compiled binaries used by OpenROM are
hosted on SourceForge (the openrom-binaries project) and are never
committed to Git. Git holds manifest.json (the source of truth),
checksums.sha256 and versions.json (both generated by
scripts/gen_checksums.py), plus SOURCES.md (generated by
scripts/gen_sources.py) and the automation that keeps them current.
Binaries are addressed as {os}/{arch}/{file}. The supported platforms are
windows/x86_64, linux/x86_64, linux/arm64, macos/x86_64, macos/arm64
and android/arm64-v8a.
https://downloads.sourceforge.net/project/openrom-binaries/{os}/{arch}/{file}
Example for Windows x86_64 chdman.exe:
https://downloads.sourceforge.net/project/openrom-binaries/windows/x86_64/chdman.exe
-
Paths are exactly the
pathvalues inmanifest.json, i.e.{os}/{arch}/{basename}. Each platform entry also recordssha256andsize. -
NKit is ONE file per platform:
nkit(nkit.exeon Windows). There is nonkit/subdirectory and nonkds; no sibling files are required. -
Checksums format:
checksums.sha256has one line per binary, sorted by path, insha256sumformat: 64 lowercase hex characters, two spaces, then the relative path. -
Download and verify with the provided scripts:
./scripts/fetch-bins.sh --os linux --arch x86_64 --target-dir ./bin
.\scripts\fetch-bins.ps1 -Os windows -Arch x86_64 -TargetDir .\bin
Both scripts download from
downloads.sourceforge.net(override withOPENROM_BINS_BASE_URL), verify SHA-256 and size againstmanifest.json, and set the executable bit on Unix. Exit codes:0success,1invalid arguments or missing dependency,2manifest/checksum error or no matching tool,3download failed,4SHA-256 or size mismatch.
build-* / update-* -> publish-sourceforge.yml -> one manifest PR -> verify-sourceforge.yml
(build or fetch) (upload via rsync/SSH) (commit hashes) (re-download and compare)
publish-sourceforge.yml— reusable workflow: uploads one artifact to SourceForge and opens/updates one manifest PR per run.build-saturn-patcher.yml— builds saturn-patcher from source for its platforms.build-xgdtool.yml— builds XGDTool from source for its platforms.fetch_android_bins.yml— fetches/builds the Android arm64-v8a binaries.update-chdman.yml— extracts chdman from the@emmercm/chdman-*npm packages.update-binary.yml— uploads a single operator-supplied binary.verify-sourceforge.yml— re-downloads published binaries and checks hashes.check-versions.yml/check-all-versions.yml— report newer upstream versions.ci.yml— runs manifest tests and the single-brace-expression guard.purge-history.yml— removes accidentally committed binary paths from history.
- The checksums prove the bytes you download are the exact bytes the
maintainer uploaded and that the
manifest.jsonentry matcheschecksums.sha256. - They do not prove the authenticity of the upstream project, that the
binary was built from the claimed source, or that the SourceForge mirror was
not tampered with. npm integrity is verified only in
update-chdman.yml(the published tarball'sdist.integrity); other tools are not verified against an upstream registry.
Publishing to SourceForge requires:
SF_USER— SourceForge account username.SF_SSH_PRIVATE_KEY— SSH private key registered with the SourceForge account.
The pinned SSH host keys live in scripts/sourceforge_known_hosts and must be
compared against SourceForge's published host-key fingerprints before use.
- Add the
SF_USERandSF_SSH_PRIVATE_KEYrepository secrets. - Verify
scripts/sourceforge_known_hostsagainst SourceForge's published fingerprints. - Run each
build-*/update-*workflow once withdry_run=true. - Enable Allow GitHub Actions to create pull requests in repository
settings, so
publish-sourceforge.ymlcan open the manifest PR. - Run
verify-sourceforge.ymlto confirm the published hashes match.
chdmanis a legacynpm-packageentry: nopackage/dist_integrityis recorded in the manifest, sovalidate_manifest.py --strictwarns about it.nkitprovenance is unverified (upstream-release, believed to come from the NKit CLI release zips); the binaries predate this manifest.saturn-patcherandxgdtoolarebuilt-from-sourcebut unpinned until their first real build records asource_commit.- The Android
xdelta3entry is not rebuilt: the upstream linux-arm64 asset is dynamically linked and would not run on Android.
Each tool is subject to its own upstream open-source license. See LICENSES/README.md and SOURCES.md.