@rom-weaver/cli 0.7.2 → 0.9.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.
@@ -1,3 +1,10 @@
1
+ rom-weaver
2
+
3
+ SPDX-License-Identifier: AGPL-3.0-or-later
4
+
5
+ This file contains the GNU Affero General Public License that applies to
6
+ rom-weaver's public distribution.
7
+
1
8
  # GNU AFFERO GENERAL PUBLIC LICENSE
2
9
 
3
10
  Version 3, 19 November 2007
package/README.md CHANGED
@@ -7,25 +7,27 @@
7
7
  <p align="center">
8
8
  <a href="https://www.npmjs.com/package/rom-weaver"><img alt="npm version" src="https://img.shields.io/npm/v/rom-weaver?logo=npm&amp;logoColor=white&amp;label=npm&amp;color=d9690f"></a>
9
9
  <a href="https://crates.io/crates/rom-weaver-cli"><img alt="crates.io version" src="https://img.shields.io/crates/v/rom-weaver-cli?logo=rust&amp;logoColor=white&amp;label=crates.io&amp;color=d9690f"></a>
10
- <a href="https://github.com/brandonocasey/rom-weaver/pkgs/container/rom-weaver-cli"><img alt="Container images on GitHub Container Registry" src="https://img.shields.io/badge/ghcr.io-rom--weaver-d9690f?logo=docker&amp;logoColor=white"></a>
11
- <a href="https://github.com/brandonocasey/homebrew-tap"><img alt="Homebrew tap" src="https://img.shields.io/badge/homebrew-brandonocasey%2Ftap-d9690f?logo=homebrew&amp;logoColor=white"></a>
10
+ <a href="https://github.com/users/brandonocasey/packages/container/package/rom-weaver-cli"><img alt="Container images on GitHub Container Registry" src="https://img.shields.io/badge/ghcr.io-rom--weaver-d9690f?logo=docker&amp;logoColor=white"></a>
11
+ <a href="https://github.com/rom-weaver/homebrew-tap"><img alt="Homebrew tap" src="https://img.shields.io/badge/homebrew-rom--weaver%2Ftap-d9690f?logo=homebrew&amp;logoColor=white"></a>
12
12
  </p>
13
13
 
14
14
  <p align="center">
15
- <a href="https://github.com/brandonocasey/rom-weaver/actions/workflows/ci.yml"><img alt="CI status" src="https://img.shields.io/github/actions/workflow/status/brandonocasey/rom-weaver/ci.yml?branch=main&amp;logo=githubactions&amp;logoColor=white&amp;label=CI&amp;color=4a6d63"></a>
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&amp;logo=githubactions&amp;logoColor=white&amp;label=CI&amp;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=".mise.toml"><img alt="Rust 1.95" src="https://img.shields.io/badge/Rust-1.95-2c323b?logo=rust&logoColor=white"></a>
18
- <a href="LICENSE.md"><img alt="AGPL-3.0-or-later license" src="https://img.shields.io/badge/license-AGPL--3.0--or--later-4a6d63"></a>
17
+ <a href=".config/mise.toml"><img alt="Rust 1.95" src="https://img.shields.io/badge/Rust-1.95-2c323b?logo=rust&logoColor=white"></a>
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
 
21
21
  <p align="center">
22
- <a href="https://rom-weaver.com/">Open the webapp</a>
22
+ <a href="https://rom-weaver.com/weave">Open the webapp</a>
23
23
  · <a href="docs/README.md">Docs index</a>
24
+ · <a href="https://github.com/sponsors/brandonocasey">Sponsor on GitHub</a>
24
25
  · <a href="https://ko-fi.com/brandonocasey">Support on Ko-fi</a>
25
26
  </p>
26
27
 
27
28
  <!-- START doctoc -->
28
29
 
30
+ - [Why](#why)
29
31
  - [Features](#features)
30
32
  - [Notices](#notices)
31
33
  - [Install](#install)
@@ -36,12 +38,40 @@
36
38
 
37
39
  <!-- END doctoc -->
38
40
 
41
+ ## Why
42
+
43
+ Every console generation brought its own compressed format, and each one came
44
+ with its own tool. CHD for discs, RVZ for GameCube and Wii, Z3DS for 3DS, CSO
45
+ and PBP for PSP, plus the usual ZIP and 7z on top. Those tools are scattered
46
+ across projects, most are command-line only, and plenty of them only ship
47
+ builds for one or two platforms. If you are on a Mac, or on Windows without a
48
+ compiler handy, half of them are out of reach. Anyone who has tried to shrink a
49
+ disc collection knows the routine: track down five programs, learn five sets of
50
+ flags, and hope each one still builds.
51
+
52
+ Patching has the same problem from a different angle. Most patchers take one
53
+ patch at a time, so a translation plus a bugfix plus an undub means running the
54
+ tool three times and keeping the intermediate files straight yourself. And
55
+ because almost no patcher reads compressed input, the real sequence is
56
+ decompress, patch, recompress - every time you want to try a different patch or
57
+ redo one you already applied. That is a lot of disk churn and waiting for what
58
+ should be a single step.
59
+
60
+ The last piece is curation. Keeping a collection in order means storing ROMs
61
+ compressed, keeping the patches next to them, and being able to prove months
62
+ later that a patched file came from the ROM you think it did. rom-weaver
63
+ handles all of it in one place: read and write every format above, chain as
64
+ many patches as you want in a single pass without unpacking to disk first, and
65
+ record the whole recipe - patch order, checksums, output names - in a bundle
66
+ file you can hand to someone else. It runs the same on Linux, macOS, and
67
+ Windows, and in the browser if you would rather not install anything.
68
+
39
69
  ## Features
40
70
 
41
- - **Apply and create patches.** IPS, BPS, UPS, xdelta/VCDIFF, PPF, RUP,
42
- BDF/BSDIFF40, APS, DCP (Dreamcast), and more than twenty formats in total,
43
- with ordered multi-patch chains, strict checksum validation, and cheat-code
44
- baking. A few - DCP, BSP, and HDiffPatch among them - are apply-only.
71
+ - **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS,
72
+ xdelta/VCDIFF, PPF, RUP, BDF/BSDIFF40, APS, and DCP (Dreamcast), with ordered
73
+ multi-patch chains, strict checksum validation, and cheat-code baking. Three
74
+ of them (DCP, BSP, and HDiffPatch) can only be applied, not created.
45
75
  - **Inspect and extract containers.** ZIP, 7z, RAR, the tar family, CHD, RVZ,
46
76
  Z3DS, CSO, PBP, GCZ, WIA, WBFS, and more, including nested archives.
47
77
  - **Create compressed containers.** ZIP, 7z, CHD, RVZ, and Z3DS with
@@ -78,9 +108,9 @@ rely on the APIs or CLI flags, expect things to be a bit tougher: those
78
108
  interfaces may still change as the project heads toward v1.0. Trim and Tools are
79
109
  currently untested but theoretically working, so they are disabled in the
80
110
  current webapp. The `rom-weaver-core`, `-checksum`, `-containers`, and
81
- `-patches` crates are published to crates.io only so `rom-weaver-cli` can be;
82
- the CLI and the webapp are the supported interfaces, and using those crates as
83
- libraries elsewhere is not supported.
111
+ `-patches` crates are published to crates.io only so `rom-weaver-cli` can use
112
+ them. The CLI and the webapp are the supported interfaces; using those crates as
113
+ libraries in another project is not supported.
84
114
 
85
115
  ### First public release
86
116
 
@@ -101,17 +131,23 @@ debugging, and review. I make the engineering decisions and review and test
101
131
  the resulting work myself; the goal is high-quality, dependable software, but
102
132
  AI-assisted code may still need extra scrutiny.
103
133
 
134
+ ### Translations
135
+
136
+ Localized translations are early and may be entirely wrong in places. Manual
137
+ edits and corrections are welcome.
138
+
104
139
  ## Install
105
140
 
106
141
  ### Webapp
107
142
 
108
- Open the hosted webapp at **[rom-weaver.com](https://rom-weaver.com/)**. There
109
- is nothing to install and no account: choose **Weave**, add a ROM and one or
110
- more patches, review the detected formats and checksums, then run the workflow
111
- and save the result. Use **Create** to generate a distributable patch from
112
- an original and a modified file. Your files are processed locally and never
113
- leave the device. Install it as a PWA from the browser menu to use it offline.
114
- New here? [Try the sample weave](https://rom-weaver.com/?bundle=first-weave.zip#/weave)
143
+ Open the hosted webapp at **[rom-weaver.com/weave](https://rom-weaver.com/weave)**. You
144
+ do not need to install anything or create an account. Choose **Weave**, add a
145
+ ROM and one or more patches, review the detected formats and checksums, then run
146
+ the workflow and save the result. Use **Create** to generate a distributable
147
+ patch from an original and a modified file. Your files are processed locally
148
+ and never leave the device. Install it as a PWA from the browser menu to use it
149
+ offline.
150
+ New here? [Try the sample weave](https://rom-weaver.com/weave?bundle=first-weave.zip)
115
151
  with tiny synthetic files.
116
152
 
117
153
  <a name="self-host-the-webapp"></a>
@@ -119,8 +155,9 @@ with tiny synthetic files.
119
155
  <details>
120
156
  <summary>Self-host the webapp</summary>
121
157
 
122
- The Docker source build serves the full webapp WASM build, cross-origin
123
- isolation headers, SPA fallback, and precompressed assets included. The
158
+ The Docker source build serves the full webapp: it builds the WASM module, adds
159
+ cross-origin isolation headers, supports client-side routes, and precompresses
160
+ assets. The
124
161
  [self-hosting guide](docs/self-hosting.md) covers reverse proxies, subpath
125
162
  routing, HTTPS certificates, service-worker scope, and the required COOP/COEP
126
163
  headers.
@@ -128,7 +165,7 @@ headers.
128
165
  Build and start it with Docker Compose:
129
166
 
130
167
  ```bash
131
- git clone https://github.com/brandonocasey/rom-weaver.git
168
+ git clone https://github.com/rom-weaver/rom-weaver.git
132
169
  cd rom-weaver
133
170
  docker compose up --build --detach
134
171
  curl --fail --silent --show-error http://localhost:8080/health
@@ -152,7 +189,7 @@ arm64, and i686 musl; and Windows arm64, x86-64, and x86.
152
189
  <summary>Homebrew (macOS arm64/Intel, Linux arm64/x86-64)</summary>
153
190
 
154
191
  ```bash
155
- brew install brandonocasey/tap/rom-weaver
192
+ brew install rom-weaver/tap/rom-weaver
156
193
  ```
157
194
 
158
195
  </details>
@@ -161,7 +198,7 @@ brew install brandonocasey/tap/rom-weaver
161
198
  <summary>Scoop (Windows)</summary>
162
199
 
163
200
  ```powershell
164
- scoop bucket add brandonocasey https://github.com/brandonocasey/scoop-bucket
201
+ scoop bucket add rom-weaver https://github.com/rom-weaver/scoop-bucket
165
202
  scoop install rom-weaver
166
203
  ```
167
204
 
@@ -175,7 +212,7 @@ Override with `ROM_WEAVER_INSTALL_DIR` or pin with `ROM_WEAVER_VERSION`.
175
212
 
176
213
  ```bash
177
214
  curl --proto '=https' --tlsv1.2 -LsSf \
178
- https://raw.githubusercontent.com/brandonocasey/rom-weaver/main/install.sh | sh
215
+ https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.sh | sh
179
216
  ```
180
217
 
181
218
  </details>
@@ -186,7 +223,7 @@ curl --proto '=https' --tlsv1.2 -LsSf \
186
223
  The same thing for PowerShell, installing to `%LOCALAPPDATA%\rom-weaver\bin`.
187
224
 
188
225
  ```powershell
189
- irm https://raw.githubusercontent.com/brandonocasey/rom-weaver/main/install.ps1 | iex
226
+ irm https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.ps1 | iex
190
227
  ```
191
228
 
192
229
  </details>
@@ -228,13 +265,14 @@ cargo binstall rom-weaver-cli
228
265
  <details>
229
266
  <summary>mise</summary>
230
267
 
231
- Useful when you want the CLI managed per project in `mise.toml`. mise verifies
268
+ Useful when you want the CLI managed per project in `mise.toml`.
269
+ [Install mise](https://mise.jdx.dev/installing-mise.html) first; it verifies
232
270
  the release's GitHub artifact attestations on install. The
233
271
  `minimum_release_age=0s` option lets new releases resolve immediately on release
234
272
  day; omit it if you prefer mise's default release-age delay.
235
273
 
236
274
  ```bash
237
- mise use 'github:brandonocasey/rom-weaver[minimum_release_age=0s]'
275
+ mise use 'github:rom-weaver/rom-weaver[minimum_release_age=0s]'
238
276
  ```
239
277
 
240
278
  </details>
@@ -265,7 +303,7 @@ See [Run in Docker](docs/cli.md#run-in-docker).
265
303
  <summary>Build from source</summary>
266
304
 
267
305
  ```bash
268
- git clone https://github.com/brandonocasey/rom-weaver.git
306
+ git clone https://github.com/rom-weaver/rom-weaver.git
269
307
  cd rom-weaver
270
308
  cargo install --path crates/rom-weaver-cli --locked
271
309
  rom-weaver --help
@@ -295,7 +333,7 @@ webapp builds, and tests.
295
333
  </thead>
296
334
  <tbody>
297
335
  <tr>
298
- <td>Desktop Apply patches (Weave)</td>
336
+ <td>Desktop: Apply patches (Weave)</td>
299
337
  <td>
300
338
  <picture>
301
339
  <source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/weave-desktop-dark.png">
@@ -304,7 +342,7 @@ webapp builds, and tests.
304
342
  </td>
305
343
  </tr>
306
344
  <tr>
307
- <td>Desktop Create a patch</td>
345
+ <td>Desktop: Create a patch</td>
308
346
  <td>
309
347
  <picture>
310
348
  <source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/create-desktop-dark.png">
@@ -313,7 +351,7 @@ webapp builds, and tests.
313
351
  </td>
314
352
  </tr>
315
353
  <tr>
316
- <td>Mobile Apply patches (Weave)</td>
354
+ <td>Mobile: Apply patches (Weave)</td>
317
355
  <td align="center">
318
356
  <picture>
319
357
  <source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/weave-mobile-dark.png">
@@ -322,7 +360,7 @@ webapp builds, and tests.
322
360
  </td>
323
361
  </tr>
324
362
  <tr>
325
- <td>Mobile Create a patch</td>
363
+ <td>Mobile: Create a patch</td>
326
364
  <td align="center">
327
365
  <picture>
328
366
  <source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/create-mobile-dark.png">
@@ -341,18 +379,27 @@ integration, development, architecture, and format-reference guides.
341
379
  ## Contributing and support
342
380
 
343
381
  Bug reports and contributions are welcome. Read the
344
- [contribution guide](.github/CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md)
345
- before submitting a change, and report
382
+ [contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md)
383
+ before submitting a change. Because rom-weaver is dual-licensed, code and
384
+ documentation changes need a one-time signature on the
385
+ [Contributor License Agreement](CLA.md) - the `CLA Signed` check asks for
386
+ it on your first pull request, it covers every repository in the
387
+ [`rom-weaver` organization](https://github.com/rom-weaver), and you keep the
388
+ copyright in your work. Report
346
389
  suspected vulnerabilities through GitHub's private reporting form in the
347
390
  [security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can
348
- support continued development on [Ko-fi](https://ko-fi.com/brandonocasey).
391
+ support continued development through
392
+ [GitHub Sponsors](https://github.com/sponsors/brandonocasey) or
393
+ [Ko-fi](https://ko-fi.com/brandonocasey).
349
394
 
350
395
  ## License
351
396
 
352
- Copyright (C) Brandon Casey
397
+ Copyright (C) Brandon Casey and rom-weaver contributors
353
398
 
354
- See [LICENSE.md](LICENSE.md) for the license terms. Bundled third-party
355
- components retain their own licenses. Release builds include a generated
356
- [attribution notice](https://rom-weaver.com/NOTICE),
357
- [third-party license inventory](https://rom-weaver.com/THIRD_PARTY_LICENSES.md),
358
- and corresponding license texts.
399
+ The public distribution is licensed under
400
+ [AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL_LICENSE.md) is
401
+ also available for first-party rom-weaver code. Bundled third-party components
402
+ retain their own licenses. Release builds include a generated
403
+ [attribution and license inventory](https://rom-weaver.com/NOTICE) and
404
+ corresponding license texts. Those third-party terms continue to apply under
405
+ every rom-weaver licensing option.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rom-weaver/cli",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "author": "Brandon Casey",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "description": "Local-first toolkit for ROMs and disc images: inspect, extract, compress, and apply, create, or bundle patches. Offline via a browser service-worker PWA or CLI.",
@@ -17,10 +17,13 @@
17
17
  "cli"
18
18
  ],
19
19
  "homepage": "https://rom-weaver.com",
20
- "funding": "https://ko-fi.com/brandonocasey",
20
+ "funding": [
21
+ "https://github.com/sponsors/brandonocasey",
22
+ "https://ko-fi.com/brandonocasey"
23
+ ],
21
24
  "repository": {
22
25
  "type": "git",
23
- "url": "https://github.com/brandonocasey/rom-weaver.git"
26
+ "url": "https://github.com/rom-weaver/rom-weaver.git"
24
27
  },
25
28
  "type": "module",
26
29
  "bin": {
@@ -50,7 +53,7 @@
50
53
  "files": [
51
54
  "bin/rom-weaver.mjs",
52
55
  "docs/man/*.1",
53
- "LICENSE.md"
56
+ "LICENSE"
54
57
  ],
55
58
  "publishConfig": {
56
59
  "access": "public",
@@ -60,21 +63,21 @@
60
63
  "node": ">=22"
61
64
  },
62
65
  "optionalDependencies": {
63
- "@rom-weaver/darwin-arm64": "0.7.2",
64
- "@rom-weaver/darwin-x64": "0.7.2",
65
- "@rom-weaver/linux-arm64-musl": "0.7.2",
66
- "@rom-weaver/linux-ia32-musl": "0.7.2",
67
- "@rom-weaver/linux-x64-gnu": "0.7.2",
68
- "@rom-weaver/linux-x64-musl": "0.7.2",
69
- "@rom-weaver/win32-arm64-msvc": "0.7.2",
70
- "@rom-weaver/win32-ia32-msvc": "0.7.2",
71
- "@rom-weaver/win32-x64-msvc": "0.7.2"
66
+ "@rom-weaver/darwin-arm64": "0.9.0",
67
+ "@rom-weaver/darwin-x64": "0.9.0",
68
+ "@rom-weaver/linux-arm64-musl": "0.9.0",
69
+ "@rom-weaver/linux-ia32-musl": "0.9.0",
70
+ "@rom-weaver/linux-x64-gnu": "0.9.0",
71
+ "@rom-weaver/linux-x64-musl": "0.9.0",
72
+ "@rom-weaver/win32-arm64-msvc": "0.9.0",
73
+ "@rom-weaver/win32-ia32-msvc": "0.9.0",
74
+ "@rom-weaver/win32-x64-msvc": "0.9.0"
72
75
  },
73
76
  "scripts": {
74
- "docs:toc": "bash scripts/update-markdown-toc.sh",
77
+ "docs:toc": "node scripts/update-markdown-toc.mjs",
75
78
  "dev": "mise run dev",
76
79
  "preview": "mise run preview",
77
- "hooks:install": "lefthook install",
80
+ "hooks:install": "node scripts/lefthook-install.mjs",
78
81
  "hooks:run": "lefthook run pre-commit --force",
79
82
  "hooks:validate": "lefthook validate",
80
83
  "prepack": "mise run manpages",