@rom-weaver/cli 0.12.2 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -270
- package/docs/completions/_rom-weaver +126 -15
- package/docs/completions/rom-weaver.bash +116 -34
- package/docs/completions/rom-weaver.elv +101 -4
- package/docs/completions/rom-weaver.fish +185 -33
- package/docs/completions/rom-weaver.ps1 +103 -4
- package/docs/man/rom-weaver-bundle-create.1 +75 -3
- package/docs/man/rom-weaver-bundle-parse.1 +4 -1
- package/docs/man/rom-weaver-bundle-schema.1 +4 -1
- package/docs/man/rom-weaver-bundle.1 +4 -1
- package/docs/man/rom-weaver-checksum.1 +28 -3
- package/docs/man/rom-weaver-completions.1 +4 -1
- package/docs/man/rom-weaver-compress.1 +58 -1
- package/docs/man/rom-weaver-extract.1 +49 -2
- package/docs/man/rom-weaver-formats.1 +66 -0
- package/docs/man/rom-weaver-patch-apply.1 +126 -66
- package/docs/man/rom-weaver-patch-create.1 +7 -1
- package/docs/man/rom-weaver-patch-validate.1 +4 -1
- package/docs/man/rom-weaver-patch.1 +4 -1
- package/docs/man/rom-weaver-probe.1 +4 -1
- package/docs/man/rom-weaver-tools-ppf-undo.1 +4 -1
- package/docs/man/rom-weaver-tools.1 +4 -1
- package/docs/man/rom-weaver-trim.1 +20 -1
- package/docs/man/rom-weaver-weave.1 +126 -66
- package/docs/man/rom-weaver.1 +9 -6
- package/package.json +11 -11
- package/docs/man/rom-weaver-ingest.1 +0 -98
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<p align="center">
|
|
15
15
|
<a href="https://github.com/rom-weaver/rom-weaver/actions/workflows/ci.yml"><img alt="CI status" src="https://img.shields.io/github/actions/workflow/status/rom-weaver/rom-weaver/ci.yml?branch=main&logo=githubactions&logoColor=white&label=CI&color=4a6d63"></a>
|
|
16
16
|
<a href="package.json"><img alt="Node.js 22 or newer" src="https://img.shields.io/badge/Node.js-22%2B-4a6d63?logo=nodedotjs&logoColor=white"></a>
|
|
17
|
-
<a href=".config/mise.toml"><img alt="Rust 1.
|
|
17
|
+
<a href=".config/mise.toml"><img alt="Rust 1.97.1" src="https://img.shields.io/badge/Rust-1.97.1-2c323b?logo=rust&logoColor=white"></a>
|
|
18
18
|
<a href="LICENSE"><img alt="AGPL-3.0-or-later license" src="https://img.shields.io/badge/license-AGPL--3.0--or--later-4a6d63"></a>
|
|
19
19
|
</p>
|
|
20
20
|
|
|
@@ -43,34 +43,15 @@
|
|
|
43
43
|
|
|
44
44
|
## Install
|
|
45
45
|
|
|
46
|
-
Choose the [webapp](#webapp), [self-hosting](#self-hosting), or [CLI](#cli)
|
|
47
|
-
path below.
|
|
46
|
+
Choose the [webapp](#webapp), [self-hosting](#self-hosting), or [CLI](#cli) path below.
|
|
48
47
|
|
|
49
48
|
## Webapp
|
|
50
49
|
|
|
51
|
-
Open the hosted webapp at **[rom-weaver.com/apply](https://rom-weaver.com/apply)**. You
|
|
52
|
-
do not need to install anything or create an account. Choose **Apply**, add a
|
|
53
|
-
ROM and one or more patches, review the detected formats and checksums, then run
|
|
54
|
-
the workflow and save the result. Use **Create** to generate a distributable
|
|
55
|
-
patch from an original and a modified file. Your files are processed locally
|
|
56
|
-
and never leave the device. Install it as a PWA from the browser menu to use it
|
|
57
|
-
offline.
|
|
58
|
-
New here? [Try the sample workflow](https://rom-weaver.com/apply?bundle=first-weave.zip)
|
|
59
|
-
with a tiny original homebrew NES ROM and two patches that change “HELLO WORLD” to “MODIFIED ROM.”
|
|
60
|
-
For a guided explanation, use
|
|
61
|
-
[guided Apply](https://rom-weaver.com/apply?guide=apply),
|
|
62
|
-
[guided Create](https://rom-weaver.com/create?guide=create), or
|
|
63
|
-
[guided Bundle](https://rom-weaver.com/apply?guide=bundle).
|
|
64
|
-
To run the webapp on your own host, see the
|
|
65
|
-
[Self-hosting](#self-hosting) section below or the
|
|
66
|
-
[full self-hosting guide](./docs/hosting/self-hosting.md).
|
|
50
|
+
Open the hosted webapp at **[rom-weaver.com/apply](https://rom-weaver.com/apply)**. You do not need to install anything or create an account. Choose **Apply**, add a ROM and one or more patches, review the detected formats and checksums, then run the workflow and save the result. Use **Create** to generate a distributable patch from an original and a modified file. Your files are processed locally and never leave the device. Install it as a PWA from the browser menu to use it offline. New here? [Try the sample workflow](https://rom-weaver.com/apply?bundle=first-weave.zip) with a tiny original homebrew NES ROM and two patches that change “HELLO WORLD” to “MODIFIED ROM.” For a guided explanation, use [guided Apply](https://rom-weaver.com/apply?guide=apply), [guided Create](https://rom-weaver.com/create?guide=create), or [guided Bundle](https://rom-weaver.com/apply?guide=bundle). To run the webapp on your own host, see the [Self-hosting](#self-hosting) section below or the [full self-hosting guide](./docs/hosting/self-hosting.md).
|
|
67
51
|
|
|
68
52
|
## Self-hosting
|
|
69
53
|
|
|
70
|
-
For a quick setup, choose static files, Docker Run, or Docker Compose. The
|
|
71
|
-
[full self-hosting guide](./docs/hosting/self-hosting.md) covers reverse proxies,
|
|
72
|
-
subpath routing, HTTPS certificates, service-worker scope, and the required
|
|
73
|
-
COOP/COEP headers.
|
|
54
|
+
For a quick setup, choose static files, Docker Run, or Docker Compose. The [full self-hosting guide](./docs/hosting/self-hosting.md) covers reverse proxies, subpath routing, HTTPS certificates, service-worker scope, and the required COOP/COEP headers.
|
|
74
55
|
|
|
75
56
|
Static release files:
|
|
76
57
|
|
|
@@ -82,8 +63,7 @@ curl --fail --location --proto '=https' --tlsv1.2 \
|
|
|
82
63
|
tar --extract --gzip --file rom-weaver-webapp.tar.gz --directory rom-weaver-webapp
|
|
83
64
|
```
|
|
84
65
|
|
|
85
|
-
Serve the extracted `rom-weaver-webapp` directory from an HTTPS static host.
|
|
86
|
-
For a pinned release, replace `latest` in the URL with its tag.
|
|
66
|
+
Serve the extracted `rom-weaver-webapp` directory from an HTTPS static host. For a pinned release, replace `latest` in the URL with its tag.
|
|
87
67
|
|
|
88
68
|
Docker Run using the published GitHub Container Registry (GHCR) image:
|
|
89
69
|
|
|
@@ -93,9 +73,7 @@ docker run --detach --name rom-weaver-webapp \
|
|
|
93
73
|
ghcr.io/rom-weaver/rom-weaver-webapp:latest
|
|
94
74
|
```
|
|
95
75
|
|
|
96
|
-
Docker Compose using the same published GitHub Container Registry (GHCR) image:
|
|
97
|
-
Download the [Docker Compose template](https://github.com/rom-weaver/rom-weaver/blob/main/docker-compose.yml)
|
|
98
|
-
into a new directory:
|
|
76
|
+
Docker Compose using the same published GitHub Container Registry (GHCR) image: Download the [Docker Compose template](https://github.com/rom-weaver/rom-weaver/blob/main/docker-compose.yml) into a new directory:
|
|
99
77
|
|
|
100
78
|
```bash
|
|
101
79
|
mkdir -p rom-weaver-compose
|
|
@@ -108,272 +86,84 @@ docker compose up --detach
|
|
|
108
86
|
curl --fail --silent --show-error http://localhost:8080/health
|
|
109
87
|
```
|
|
110
88
|
|
|
111
|
-
Only Docker with Compose is required. Set `PORT` to change the host port, for
|
|
112
|
-
example `PORT=3000 docker compose up --detach`. To build the image from source
|
|
113
|
-
instead, clone the repository and add `--build` to the `docker compose up`
|
|
114
|
-
command from its checkout; that path is slower and intended for development.
|
|
115
|
-
For standalone TLS, mount a trusted certificate as described in the guide and
|
|
116
|
-
set `HTTPS_PORT` instead.
|
|
89
|
+
Only Docker with Compose is required. Set `PORT` to change the host port, for example `PORT=3000 docker compose up --detach`. To build the image from source instead, clone the repository and add `--build` to the `docker compose up` command from its checkout; that path is slower and intended for development. For standalone TLS, mount a trusted certificate as described in the guide and set `HTTPS_PORT` instead.
|
|
117
90
|
|
|
118
91
|
## CLI
|
|
119
92
|
|
|
120
|
-
Native release assets cover macOS arm64 and x86-64; Linux x86-64 GNU plus
|
|
121
|
-
x86-64, arm64, and i686 musl; and Windows arm64, x86-64, and x86. The package
|
|
122
|
-
manager and installer options below select the matching asset unless their
|
|
123
|
-
description says otherwise.
|
|
93
|
+
Native release assets cover macOS arm64 and x86-64; Linux x86-64 GNU plus x86-64, arm64, and i686 musl; and Windows arm64, x86-64, and x86.
|
|
124
94
|
|
|
125
|
-
|
|
126
|
-
<summary>Homebrew (macOS arm64/Intel, Linux arm64/x86-64)</summary>
|
|
95
|
+
Three recommended ways to install:
|
|
127
96
|
|
|
128
97
|
```bash
|
|
129
98
|
brew install rom-weaver/tap/rom-weaver
|
|
130
99
|
```
|
|
131
100
|
|
|
132
|
-
</details>
|
|
133
|
-
|
|
134
|
-
<details>
|
|
135
|
-
<summary>Scoop (Windows)</summary>
|
|
136
|
-
|
|
137
|
-
```powershell
|
|
138
|
-
scoop bucket add rom-weaver https://github.com/rom-weaver/scoop-bucket
|
|
139
|
-
scoop install rom-weaver
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
</details>
|
|
143
|
-
|
|
144
|
-
<details>
|
|
145
|
-
<summary>Install script (macOS, Linux)</summary>
|
|
146
|
-
|
|
147
|
-
Downloads the latest release to `~/.local/bin` and checks its GitHub build
|
|
148
|
-
attestation.
|
|
149
|
-
Override with `ROM_WEAVER_INSTALL_DIR` or pin with `ROM_WEAVER_VERSION`.
|
|
150
|
-
The script also installs manpages and shell completions for the current user.
|
|
151
|
-
|
|
152
101
|
```bash
|
|
153
102
|
curl --proto '=https' --tlsv1.2 -LsSf \
|
|
154
103
|
https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.sh | sh
|
|
155
104
|
```
|
|
156
105
|
|
|
157
|
-
</details>
|
|
158
|
-
|
|
159
|
-
<details>
|
|
160
|
-
<summary>Install script (Windows)</summary>
|
|
161
|
-
|
|
162
|
-
The same thing for PowerShell, installing to `%LOCALAPPDATA%\rom-weaver\bin`.
|
|
163
|
-
It also installs the PowerShell completion beside the executable.
|
|
164
|
-
|
|
165
|
-
```powershell
|
|
166
|
-
irm https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.ps1 | iex
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
</details>
|
|
170
|
-
|
|
171
|
-
<details>
|
|
172
|
-
<summary>npm</summary>
|
|
173
|
-
|
|
174
|
-
Cross-platform, and the only channel that covers every supported target at
|
|
175
|
-
once. Needs Node.js 22+. The package is a launcher that pulls the right
|
|
176
|
-
prebuilt binary through platform-specific optional dependencies, so only your
|
|
177
|
-
platform's binary is downloaded.
|
|
178
|
-
|
|
179
106
|
```bash
|
|
180
107
|
npm install --global rom-weaver
|
|
181
108
|
```
|
|
182
109
|
|
|
183
|
-
For a one-off run, or to add the scoped launcher for a repository's scripts,
|
|
184
|
-
use the scoped package directly:
|
|
185
110
|
|
|
186
|
-
|
|
187
|
-
npx @rom-weaver/cli probe --input game.iso
|
|
188
|
-
npm install --save-dev @rom-weaver/cli
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
</details>
|
|
192
|
-
|
|
193
|
-
<details>
|
|
194
|
-
<summary>cargo-binstall</summary>
|
|
195
|
-
|
|
196
|
-
Downloads the same release binary rather than compiling the workspace:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
cargo binstall rom-weaver-cli
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
</details>
|
|
203
|
-
|
|
204
|
-
<details>
|
|
205
|
-
<summary>mise</summary>
|
|
206
|
-
|
|
207
|
-
Useful when you want the CLI managed per project in `mise.toml`.
|
|
208
|
-
[Install mise](https://mise.jdx.dev/installing-mise.html) first; it verifies
|
|
209
|
-
the release's GitHub artifact attestations on install. The
|
|
210
|
-
`minimum_release_age=0s` option lets new releases resolve immediately on release
|
|
211
|
-
day; omit it if you prefer mise's default release-age delay.
|
|
212
|
-
|
|
213
|
-
```bash
|
|
214
|
-
mise use 'github:rom-weaver/rom-weaver[minimum_release_age=0s]'
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
</details>
|
|
218
|
-
|
|
219
|
-
<details>
|
|
220
|
-
<summary>Docker</summary>
|
|
221
|
-
|
|
222
|
-
Runs from the published Linux image without installing anything:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
docker run --rm \
|
|
226
|
-
--user "$(id -u):$(id -g)" \
|
|
227
|
-
--volume "$PWD:/work" \
|
|
228
|
-
ghcr.io/rom-weaver/rom-weaver-cli:latest \
|
|
229
|
-
probe --input /work/game.iso
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
Mount your ROM directory at `/work` and pass paths under it. On Linux and
|
|
233
|
-
macOS, `--user` keeps files created in the bind mount owned by your host user.
|
|
234
|
-
See [Run in Docker](./docs/how-to/install-cli.md#run-in-docker).
|
|
235
|
-
|
|
236
|
-
</details>
|
|
111
|
+
Homebrew covers macOS arm64/Intel and Linux arm64/x86-64. The install script covers macOS and Linux: it downloads the latest release to `~/.local/bin` and checks its build provenance, refusing to install a binary this repository did not publish. npm is the only channel covering every supported target at once, and needs Node.js 22+.
|
|
237
112
|
|
|
238
113
|
<a name="build-from-source"></a>
|
|
239
114
|
|
|
240
|
-
|
|
241
|
-
<summary>Build from source</summary>
|
|
115
|
+
Windows, Scoop, PowerShell, cargo-binstall, mise, Docker, shell completions, and building from source are all in [Install the CLI](./docs/how-to/install-cli.md).
|
|
242
116
|
|
|
243
|
-
|
|
244
|
-
git clone https://github.com/rom-weaver/rom-weaver.git
|
|
245
|
-
cd rom-weaver
|
|
246
|
-
cargo install --path crates/rom-weaver-cli --locked
|
|
247
|
-
rom-weaver --help
|
|
248
|
-
```
|
|
117
|
+
Hitting `Permission denied`? See [File permissions](./docs/reference/cli.md#file-permissions).
|
|
249
118
|
|
|
250
|
-
The
|
|
251
|
-
toolchain.
|
|
119
|
+
The [development guide](./docs/development/development.md) covers the full toolchain setup, webapp builds, and tests.
|
|
252
120
|
|
|
253
|
-
|
|
121
|
+
## Why
|
|
254
122
|
|
|
255
|
-
|
|
256
|
-
[File permissions](./docs/reference/cli.md#file-permissions).
|
|
123
|
+
Every console generation brought its own compressed format: CHD for discs, RVZ for GameCube and Wii, Z3DS for 3DS ROMs, CSO and PBP for PSP, plus the usual ZIP and 7z on top. Working across them can mean finding several separate programs, learning different flags, and checking which builds are available for your platform.
|
|
257
124
|
|
|
258
|
-
|
|
259
|
-
webapp builds, and tests.
|
|
125
|
+
Patching adds another manual sequence. A translation, bugfix, and undub may need to run in a specific order, with intermediate files kept straight and a compressed input unpacked before the first patch and recompressed afterward. Repeating that setup whenever the patch combination changes adds disk churn and room for mistakes to what should be one workflow.
|
|
260
126
|
|
|
261
|
-
|
|
127
|
+
The last piece is curation. Keeping a collection in order means storing ROMs compressed, keeping the patches next to them, and being able to prove months later that a patched file came from the ROM you think it did. rom-weaver handles all of it in one place. It reads every format above. It writes CHD, RVZ, Z3DS, ZIP, and 7z archives. It chains as many patches as you want in a single pass without manually unpacking first, and records the whole recipe - patch order, checksums, and output names - in a bundle file you can hand to someone else. Native CLI builds are available for Linux, macOS, and Windows. The browser webapp handles patching and bundle workflows without an install.
|
|
262
128
|
|
|
263
|
-
|
|
264
|
-
for GameCube and Wii, Z3DS for 3DS ROMs, CSO and PBP for PSP, plus the usual ZIP
|
|
265
|
-
and 7z on top. Working across them can mean finding several separate programs,
|
|
266
|
-
learning different flags, and checking which builds are available for your
|
|
267
|
-
platform.
|
|
268
|
-
|
|
269
|
-
Patching adds another manual sequence. A translation, bugfix, and undub may
|
|
270
|
-
need to run in a specific order, with intermediate files kept straight and a
|
|
271
|
-
compressed input unpacked before the first patch and recompressed afterward.
|
|
272
|
-
Repeating that setup whenever the patch combination changes adds disk churn and
|
|
273
|
-
room for mistakes to what should be one workflow.
|
|
274
|
-
|
|
275
|
-
The last piece is curation. Keeping a collection in order means storing ROMs
|
|
276
|
-
compressed, keeping the patches next to them, and being able to prove months
|
|
277
|
-
later that a patched file came from the ROM you think it did. rom-weaver
|
|
278
|
-
handles all of it in one place. It reads every format above. It writes CHD, RVZ,
|
|
279
|
-
Z3DS, ZIP, and 7z archives. It chains as many patches as you want in a single pass
|
|
280
|
-
without manually unpacking first, and records the whole recipe - patch order,
|
|
281
|
-
checksums, and output names - in a bundle file you can hand to someone else.
|
|
282
|
-
Native CLI builds are
|
|
283
|
-
available for Linux, macOS, and Windows. The browser webapp handles patching
|
|
284
|
-
and bundle workflows without an install.
|
|
285
|
-
|
|
286
|
-
For the current measurements and trade-offs, see the [performance brief](#performance).
|
|
129
|
+
For the current measurements and trade-offs, see the [performance brief](#performance). For how rom-weaver lines up against the tools you may already use, the [comparison with similar tools](./docs/explanation/comparisons.md) puts it beside RomPatcher.js, Flips, MultiPatch, xdelta3, chdman, and Dolphin tool, format by format and feature by feature.
|
|
287
130
|
|
|
288
131
|
## Performance
|
|
289
132
|
|
|
290
|
-
rom-weaver matches or beats the reference tools on every measured axis:
|
|
291
|
-
|
|
292
|
-
corpus,
|
|
293
|
-
RVZ 1.6–2.0×, ZIP 1.6–2.7×, and 7z 1.0–4.7×. RVZ and ZIP compression are
|
|
294
|
-
1.1–1.3× faster. 7z compression is even with its reference. CHD compression
|
|
295
|
-
ranges from even to 1.3× faster. Output sizes match the references to within a
|
|
296
|
-
fraction of a percent.
|
|
297
|
-
|
|
298
|
-
The CLI and the threaded WASM webapp share one Rust engine. The browser adds
|
|
299
|
-
worker, storage, and OPFS costs, so CLI and browser timings are not
|
|
300
|
-
comparable. The [performance guide](./docs/development/performance.md) records
|
|
301
|
-
the machine, corpus, settings, reference-tool versions, and repeated runs for
|
|
302
|
-
each published result. It also lists the commands that reproduce them.
|
|
303
|
-
Production WASM is optimized with `wasm-opt -O4`. The browser codec matrix is
|
|
304
|
-
the runtime check for the shipped worker and storage path.
|
|
133
|
+
rom-weaver matches or beats the reference tools on every measured axis: extraction time, compression time, and output size. On the measured arm64 corpus, extraction is faster in all four formats. CHD extracts 3.1–5.8× faster, RVZ 1.6–2.0×, ZIP 1.6–2.7×, and 7z 1.0–4.7×. RVZ and ZIP compression are 1.1–1.3× faster. 7z compression is even with its reference. CHD compression ranges from even to 1.3× faster. Output sizes match the references to within a fraction of a percent.
|
|
134
|
+
|
|
135
|
+
The CLI and the threaded WASM webapp share one Rust engine. The browser adds worker, storage, and OPFS costs, so CLI and browser timings are not comparable. The [performance guide](./docs/development/performance.md) records the machine, corpus, settings, reference-tool versions, and repeated runs for each published result. It also lists the commands that reproduce them. Production WASM is optimized with `wasm-opt -O4`. The browser codec matrix is the runtime check for the shipped worker and storage path.
|
|
305
136
|
|
|
306
137
|
## Features
|
|
307
138
|
|
|
308
|
-
- **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS,
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
- **
|
|
314
|
-
|
|
315
|
-
- **
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
- **Checksum and verify.** CRC32, MD5, SHA-1, SHA-256, BLAKE3, and friends,
|
|
319
|
-
with copier-header detection, header repair, and header-aware checksum
|
|
320
|
-
variants.
|
|
321
|
-
- **Trim and restore.** Trimming for NDS, GBA, 3DS, XISO, and RVZ scrub. NDS,
|
|
322
|
-
GBA, and 3DS can be reverted, with an opt-in footer that restores the
|
|
323
|
-
original file byte-for-byte.
|
|
324
|
-
- **Share workflows.** Distributable [`rom-weaver-bundle.json`](./docs/rom-weaver-bundle-v1.schema.json)
|
|
325
|
-
bundles pin patch order, checksums, and output naming so others can replay
|
|
326
|
-
the exact workflow.
|
|
327
|
-
- **Local-first and private.** Everything runs on your machine. The webapp is
|
|
328
|
-
an installable PWA that works offline and never uploads your files.
|
|
329
|
-
- **One engine, two frontends.** The same Rust core powers the terminal CLI
|
|
330
|
-
and the threaded WASM webapp. CLI operation commands can emit line-delimited
|
|
331
|
-
JSON for scripting.
|
|
332
|
-
|
|
333
|
-
The complete format, codec, and checksum compatibility tables are maintained
|
|
334
|
-
in the [CLI guide](./docs/reference/formats.md).
|
|
139
|
+
- **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS, xdelta/VCDIFF, PPF, RUP, BDF/BSDIFF40, APS, and DCP (Dreamcast), with ordered multi-patch chains, checksum validation when the format or bundle supplies expected values, and cheat-code baking. Three of them (DCP, BSP, and HDiffPatch) can only be applied, not created.
|
|
140
|
+
- **Inspect and extract containers.** ZIP, 7z, RAR, the tar family, CHD, RVZ, Z3DS, CSO, PBP, GCZ, WIA, WBFS, and more, including nested archives.
|
|
141
|
+
- **Create format-specific compressed containers.** ZIP, 7z, CHD, RVZ, and Z3DS with codec-aware compression settings. CHD and RVZ outputs are checked for round-trip compatibility with chdman and dolphin-tool.
|
|
142
|
+
- **Checksum and verify.** CRC32, MD5, SHA-1, SHA-256, BLAKE3, and friends, with copier-header detection, header repair, and header-aware checksum variants.
|
|
143
|
+
- **Trim and restore.** Trimming for NDS, GBA, 3DS, XISO, and RVZ scrub. NDS, GBA, and 3DS can be reverted, with an opt-in footer that restores the original file byte-for-byte.
|
|
144
|
+
- **Share workflows.** Distributable [`rom-weaver-bundle.json`](./docs/rom-weaver-bundle-v1.schema.json) bundles pin patch order, checksums, and output naming so others can replay the exact workflow.
|
|
145
|
+
- **Local-first and private.** Everything runs on your machine. The webapp is an installable PWA that works offline and never uploads your files.
|
|
146
|
+
- **One engine, two frontends.** The same Rust core powers the terminal CLI and the threaded WASM webapp. CLI operation commands can emit line-delimited JSON for scripting.
|
|
147
|
+
|
|
148
|
+
The complete format, codec, and checksum compatibility tables are maintained in the [CLI guide](./docs/reference/formats.md).
|
|
335
149
|
|
|
336
150
|
## Notices
|
|
337
151
|
|
|
338
152
|
### Beta status
|
|
339
153
|
|
|
340
|
-
rom-weaver is beta software and follows Semantic Versioning, but until v1.0,
|
|
341
|
-
breaking changes may still happen between minor releases. Patching,
|
|
342
|
-
compressing, extracting, and bundling are covered by automated tests. Hands-on
|
|
343
|
-
testing happens on macOS and Linux; Windows is covered by hosted CI but has seen
|
|
344
|
-
much less real-world use, so expect rougher edges there and please report
|
|
345
|
-
anything Windows-specific. If you
|
|
346
|
-
rely on the APIs or CLI flags, expect things to be a bit tougher: those
|
|
347
|
-
interfaces may still change as the project heads toward v1.0. Trim and Tools are
|
|
348
|
-
still beta, so they are disabled by default in the webapp and can be enabled in
|
|
349
|
-
Settings. The `rom-weaver-core`, `-checksum`, `-containers`, and
|
|
350
|
-
`-patches` crates are published to crates.io only so `rom-weaver-cli` can use
|
|
351
|
-
them. The CLI and the webapp are the supported interfaces; using those crates as
|
|
352
|
-
libraries in another project is not supported.
|
|
154
|
+
rom-weaver is beta software and follows Semantic Versioning, but until v1.0, breaking changes may still happen between minor releases. Patching, compressing, extracting, and bundling are covered by automated tests. Hands-on testing happens on macOS and Linux; Windows is covered by hosted CI but has seen much less real-world use, so expect rougher edges there and please report anything Windows-specific. If you rely on the APIs or CLI flags, expect things to be a bit tougher: those interfaces may still change as the project heads toward v1.0. Trim and Tools are still beta, so they are disabled by default in the webapp and can be enabled in Settings. The `rom-weaver-core`, `-checksum`, `-containers`, and `-patches` crates are published to crates.io only so `rom-weaver-cli` can use them. The CLI and the webapp are the supported interfaces; using those crates as libraries in another project is not supported.
|
|
353
155
|
|
|
354
156
|
### First complete public release
|
|
355
157
|
|
|
356
|
-
v0.7.2 was the first complete public release. The changelog and the git
|
|
357
|
-
history go back further, but v0.6.0 through v0.7.1 failed partway through the
|
|
358
|
-
release pipeline or were only partially published. v0.7.1 completed most of
|
|
359
|
-
the pipeline, but it still missed the crates.io CLI package, shipped a broken
|
|
360
|
-
unscoped npm launcher, and built the static webapp archive with mismatched
|
|
361
|
-
release metadata. Starting with v0.7.2, all public install methods were intended
|
|
362
|
-
to work together. Install commands below resolve the current release unless you
|
|
363
|
-
explicitly pin a version.
|
|
158
|
+
v0.7.2 was the first complete public release. The changelog and the git history go back further, but v0.6.0 through v0.7.1 failed partway through the release pipeline or were only partially published. v0.7.1 completed most of the pipeline, but it still missed the crates.io CLI package, shipped a broken unscoped npm launcher, and built the static webapp archive with mismatched release metadata. Starting with v0.7.2, all public install methods were intended to work together. Install commands below resolve the current release unless you explicitly pin a version.
|
|
364
159
|
|
|
365
160
|
### LLM-assisted development
|
|
366
161
|
|
|
367
|
-
rom-weaver is built by a full-time software engineer in my spare time. Claude
|
|
368
|
-
and ChatGPT are used during development for brainstorming, implementation,
|
|
369
|
-
debugging, and review. I make the engineering decisions and review and test
|
|
370
|
-
the resulting work myself; the goal is high-quality, dependable software, but
|
|
371
|
-
AI-assisted code may still need extra scrutiny.
|
|
162
|
+
rom-weaver is built by a full-time software engineer in my spare time. Claude and ChatGPT are used during development for brainstorming, implementation, debugging, and review. I make the engineering decisions and review and test the resulting work myself; the goal is high-quality, dependable software, but AI-assisted code may still need extra scrutiny.
|
|
372
163
|
|
|
373
164
|
### Translations
|
|
374
165
|
|
|
375
|
-
Localized translations are early and may be entirely wrong in places. Manual
|
|
376
|
-
edits and corrections are welcome.
|
|
166
|
+
Localized translations are early and may be entirely wrong in places. Manual edits and corrections are welcome.
|
|
377
167
|
|
|
378
168
|
## Screenshots
|
|
379
169
|
|
|
@@ -428,36 +218,14 @@ edits and corrections are welcome.
|
|
|
428
218
|
|
|
429
219
|
## Documentation
|
|
430
220
|
|
|
431
|
-
Start with the browser-first [documentation home](https://rom-weaver.com/docs)
|
|
432
|
-
or the repository [documentation index](./docs/README.md). The web docs include
|
|
433
|
-
a task and tool picker, guided samples, focused screenshots, and a
|
|
434
|
-
[FAQ](./docs/faq.md). CLI, deployment, integration, development,
|
|
435
|
-
architecture, and format references each have their own guides.
|
|
221
|
+
Start with the browser-first [documentation home](https://rom-weaver.com/docs) or the repository [documentation index](./docs/README.md). The web docs include a task and tool picker, guided samples, focused screenshots, and a [FAQ](./docs/faq.md). CLI, deployment, integration, development, architecture, and format references each have their own guides.
|
|
436
222
|
|
|
437
223
|
## Contributing and support
|
|
438
224
|
|
|
439
|
-
Bug reports and contributions are welcome. Read the
|
|
440
|
-
[contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md)
|
|
441
|
-
before submitting a change. Because rom-weaver is dual-licensed, code and
|
|
442
|
-
documentation changes need a one-time signature on the
|
|
443
|
-
[Contributor License Agreement](CLA.md). The `CLA Signed` check asks for
|
|
444
|
-
it on your first pull request. One signature covers every repository in the
|
|
445
|
-
[`rom-weaver` organization](https://github.com/rom-weaver) whose contribution
|
|
446
|
-
process references the agreement. You keep the copyright in your work. Report
|
|
447
|
-
suspected vulnerabilities through GitHub's private reporting form in the
|
|
448
|
-
[security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can
|
|
449
|
-
support continued development through
|
|
450
|
-
[GitHub Sponsors](https://github.com/sponsors/brandonocasey) or
|
|
451
|
-
[Ko-fi](https://ko-fi.com/brandonocasey).
|
|
225
|
+
Bug reports and contributions are welcome. Read the [contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md) before submitting a change. Because rom-weaver is dual-licensed, code and documentation changes need a one-time signature on the [Contributor License Agreement](CLA.md). The `CLA Signed` check asks for it on your first pull request. One signature covers every repository in the [`rom-weaver` organization](https://github.com/rom-weaver) whose contribution process references the agreement. You keep the copyright in your work. Report suspected vulnerabilities through GitHub's private reporting form in the [security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can support continued development through [GitHub Sponsors](https://github.com/sponsors/brandonocasey) or [Ko-fi](https://ko-fi.com/brandonocasey).
|
|
452
226
|
|
|
453
227
|
## License
|
|
454
228
|
|
|
455
229
|
Copyright © Brandon Casey and rom-weaver contributors
|
|
456
230
|
|
|
457
|
-
The public distribution is licensed under
|
|
458
|
-
[AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL.md) is
|
|
459
|
-
also available for first-party rom-weaver code. Bundled third-party components
|
|
460
|
-
retain their own licenses. Release builds include a generated
|
|
461
|
-
[combined attribution and license inventory](https://rom-weaver.com/NOTICE) and
|
|
462
|
-
corresponding license texts. Those third-party terms continue to apply under
|
|
463
|
-
every rom-weaver licensing option.
|
|
231
|
+
The public distribution is licensed under [AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL.md) is also available for first-party rom-weaver code. Bundled third-party components retain their own licenses. Release builds include a generated [combined attribution and license inventory](https://rom-weaver.com/NOTICE) and corresponding license texts. Those third-party terms continue to apply under every rom-weaver licensing option.
|