Releases: reactnativecn/react-native-update-cli
Release list
v2.22.9
- Native package upload (
pushy package upload/publish --package): the slim package is now built by copying the bundle and asset entries byte-for-byte from the apk / ipa / app instead of re-deflating each of them, so it is bound by disk I/O rather than CPU. Archives that would need zip64 keep the previous repack path. - Dropped the
semverdependency (version comparisons usecompare-versions).
v2.22.8
Performance and robustness batch across the CLI:
Startup
- The npm "newer version" check no longer blocks every command: 1-day cache, background request, hint printed after the command.
pushy helpgoes from ~0.5 s to ~0.09 s; offline commands (hdiff,parseApk, …) no longer ping the API endpoints or resolve dependency versions at startup.
Bundle / Hermes delta mode
hermes-base-error.log(full hermesc output of a failed base attempt) is written next to the intermediate directory — it used to be packed into the ppk.- Base selection starts only after Metro is spawned; the JS bundle is no longer copied twice; the packager map is renamed instead of copied;
compose-source-mapsruns asynchronously while the disassembly check runs. - A failed verification compile keeps the base compile (reported separately) instead of dropping it and compiling a third time. A base still downloading when Metro finishes is waited for at most 60 s (
PUSHY_HERMES_BASE_WAIT_MS). - A base whose content differs from the server-recorded hash is rejected immediately instead of triggering two full archive downloads; cache hits for legacy/native-package bases verify the HBC version; downloads and Range requests have timeouts; stale cache staging files are cleaned.
- New
--resetCache falseskips Metro's--reset-cachefor much faster repeated bundles. - Zip payload deflate level 9 → 6 (≈4× less CPU for 0.6 % larger ppk).
Diff
- Moved-file detection requires equal size in addition to equal CRC32 (a CRC collision could ship the wrong file).
- A failing diff no longer leaves a truncated patch file or an open handle behind.
- The streaming diff transforms Hermes bytecode on disk section by section; no full bundle is held in memory.
Network
- Uploads have a size-scaled timeout and one retry on transient errors;
publishoverlaps the upload with hashing and git. - Range reads of remote archives use less memory, skip re-fetching cached bytes, send
If-Range, and always prefetch the central directory in one request.
v2.22.7
Hermes delta-mode (-base-bytecode) pipeline speedups:
- The base compile and the
--verifyHermesBaseplain compile now run concurrently, and a rejected base reuses the plain output instead of compiling a third time. - The base lookup and download run while Metro bundles instead of after it.
- Base downloads over HTTP Range need fewer requests (tail aligned with yauzl, central-directory prefetch for large apk/ipa, header + bundle in one request), and native packages uploaded by this version can be fetched with a single Range request (requires the matching server release).
- Cheaper disassembly comparison, single sha256 per bundle, cached hermesc HBC-version probe.
v2.22.6
Hermes base downloads now fetch only the bundle instead of the whole base package: a single HTTP Range request when the server knows where the bundle sits inside the ppk (reported at publish time), otherwise the zip central directory plus the bundle entry over Range (ppk / apk / ipa), falling back to the full download when the storage ignores Range or verification fails. Publishing reports the bundle location alongside the existing Hermes chain metadata.
v2.22.5
v2.22.4
Fix Hermes base equivalence verification for UIntSwitchImm jump-table offsets. Tighten StringSwitchImm/UIntSwitchImm normalization so semantic operands remain checked, with regression coverage for IDs, labels, ranges, and malformed switch shapes.
v2.22.3
Fix: publish no longer sends JSON null for the Hermes chain metadata (baseVersionId / baseHash / bytecodeVersion) when no base was used — servers rejected that with "Expected baseHash string". Fields are now omitted, which every server version accepts.
v2.22.2
v2.22.1
Fix: the Hermes delta-mode verification (--verifyHermesBase) reported false mismatches when the base came from a different lineage (wider GetById/LoadConstString variants, moved switch jump tables) and needlessly fell back to a plain compile. No behavior change otherwise.
v2.22.0
Hermes delta mode (-base-bytecode)
bundlenow compiles Hermes bundles against the app's previous HBC (--hermesBase auto, default), keeping Hermes string IDs stable across versions: hot-update patches shrink 5–30×. Base comes from the server (GET /app/:id/hermesBase), is verified by sha256 and cached under.pushy/cache/<sha256>(500 MB / 20 files,--cacheMaxMb,PUSHY_CACHE_DIR).--hermesBase nonedisables it;--hermesBase <file.hbc|.ppk|.apk|.ipa>uses a local artifact (e.g. the store build) as base.--verifyHermesBase(default on) compares the delta build's disassembly with a plain compile and silently falls back on any mismatch — the feature can never block a release.- hermesc always runs with
-output-source-map: debug info is stripped from the bytecode (15–40% smaller, same as RN release builds); the Hermes .map stays in the intermediate directory. publish/uploadApk/uploadIpa/uploadAppreportbundleHash,bytecodeVersion,baseVersionId,baseHashand seed the local cache.- New command:
pushy cache [clean].