Get started with the CLI
Run a complete patch job in the terminal with the same tiny homebrew ROMs the webapp uses, then practice creating a patch and packaging it as a shareable bundle. Nothing here needs a real ROM; every asset is downloadable and safe.
Install first if you have not: Install the CLI.
First weave
Run a complete patch with the tiny original homebrew NES ROM the webapp uses. The download holds the ROM, the patch, and the checksum the result should have, so there is nothing else to supply.
curl --fail --location --output first-weave.zip https://rom-weaver.com/first-weave.zip
rom-weaver weave --input first-weave.zip --output modified-rom.nes --no-compress
rom-weaver checksum --input modified-rom.nes --algo sha256
The original ROM displays HELLO WORLD; the first IPS patch changes HELLO
to MODIFIED, and the second changes WORLD to ROM. The final ROM displays
MODIFIED ROM. The final SHA-256 should be
e0db7cbd02cccd5e83931e7974db94aaafe40327b2a33fdd4c83235c9880a90e.
Open the result in any NES emulator to run it.
| Original ROM | After the first patch | After both patches |
|---|---|---|
![]() |
![]() |
![]() |
Practice patch creation and bundles
Use the two loose homebrew ROMs from guided Create. The first is the clean Original. The second is Modified:
curl --fail --location --output hello-world.nes \
https://rom-weaver.com/hello-world.nes
curl --fail --location --output modified-world.nes \
https://rom-weaver.com/modified-world.nes
Create a BPS patch, apply the downloaded artifact to the clean Original, and checksum the rebuilt file:
rom-weaver patch create \
--original hello-world.nes \
--modified modified-world.nes \
--output sample.bps
rom-weaver weave \
--input hello-world.nes \
--patch sample.bps \
--output rebuilt.nes \
--no-compress
rom-weaver checksum --input rebuilt.nes --algo sha256
The final SHA-256 should be
f203a199694d5a67a43857ce7e37a79e14a9fa1e7554ddd316b84f8df508b45e.
That match proves the patch rebuilt Modified byte for byte.
Now package that tested patch as a public-safe bundle. --no-bundle-rom keeps
the Original out of the ZIP while recording its checksums:
rom-weaver bundle create \
--input hello-world.nes \
--patch sample.bps \
--patch-id sample \
--patch-name "HELLO to MODIFIED" \
--expect-out sha256=f203a199694d5a67a43857ce7e37a79e14a9fa1e7554ddd316b84f8df508b45e \
--output rom-weaver-bundle.json \
--bundle sample-bundle.zip \
--no-bundle-rom
Test the finished archive from the same clean Original:
rom-weaver weave \
--input hello-world.nes \
--bundle sample-bundle.zip \
--output bundle-rebuilt.nes \
--no-compress
rom-weaver checksum --input bundle-rebuilt.nes --algo sha256
The result should have the same f203a1…b45e SHA-256. This sequence uses the
same generated assets as the browser tours, so both interfaces start from
identical bytes.
Where next
- Apply patches from the CLI: patch order, headers, byte order, checksum checks, and validation.
- Create patches from the CLI: build and test a patch for release.
- Bundles from the CLI: package patches into a repeatable, verifiable recipe.
- CLI reference: every command, flag, and output format.


