Repository navigation
v1.0.0 — first stable npm release
zipnative v1.0.0
Released 2026-09-02
The first stable release — and the first npm publication. zipnative 1.0.0 adds no engine behavior over v0.9.0: it is the freeze itself. Everything shipped across 0.1 → 0.9 — random-access reads, secure-by-default extraction, deterministic write, incremental modification, workers, forward streaming, the resumable inflater, one-call verification — becomes a semver commitment: the 77-export API surface, the 39-code error vocabulary and the deterministic: true output bytes are frozen (removing, renaming or changing any of them is semver-major; the promise is written down in SECURITY.md). 100% backward-compatible with v0.9.0. Zero runtime dependencies, 385+ tests, 93.9% statement coverage, published from CI with provenance.
Highlights
- On npm at last — published via Trusted Publishing (OIDC): no long-lived token, the entire quality gate re-runs in the publish workflow, the package carries a provenance attestation (verify with
npm audit signatures), and a CycloneDX SBOM is attached to the GitHub Release. A laptopnpm publishfails by design. - The conformance authority gate ("veraZIP") — ZIP had no veraPDF (JHOVE never shipped a ZIP module;
zip -Tis an alias ofunzip -tqq), so zipnative ships the first open clause-by-clause ISO/IEC 21320-1:2015 validator (npm run validate:zip— an independent raw parser, never the engine's own) plus the existing Archivematica-grade six-parser extraction matrix. Every archive zipnative writes conforms to the ISO profile, verified on Linux and Windows in CI and again before every publish; hostile-but-spec-valid archives (zip-slip et al.) are called out for what they are — conformance is not safety. Full story: the new conformance guide. - The freeze, made checkable — every one of the 77 exports carries TSDoc (a new verify rule fails the build on an undocumented export); the API registry (
api.json), the error registry (errors.json) and the determinism contract are the machine-readable form of the promise. - A new face — the "zipper-cut Z" logo: the Z monogram's diagonal carries interlocking zipper teeth in negative space (reads "Z" at a glance, "zip" up close), declined across favicon, og-image and a new GitHub social preview.
Security
- No parser or writer change — the security posture is exactly v0.9.0's.
- feat(ci): supply-chain hardening around the release: OIDC Trusted Publishing (no
NPM_TOKENsecret to steal), provenance attestations (SLSA-aligned, Sigstore), CycloneDX SBOM per release, SHA-pinned actions, and the full gate (audit included) re-run between the Release click andnpm publish. - docs(security): SECURITY.md now states the supported-versions policy (
1.0.x), how to verify release integrity, and the three-part compatibility promise.
Added
- feat(conformance):
validate:zip— the ISO/IEC 21320-1:2015 validator (the Table-1 structural clauses + APPNOTE well-formedness cross-checks, two-sided expectations,declared.iso21320coverage canary, foreign integrity pass) — blocking inconformance.ymlandpublish.yml; new conformance guide. - feat(agents):
docs/agent-brief.md(paste-ready coding-agent briefing + "Copy as prompt" on the landing) and the completed token budget inllms-index.json(errors.json + agent-brief now listed with byte/approx-token sizes);.github/prompts/quality-gate.prompt.md. - feat(ci):
.github/workflows/publish.yml— Release-triggered, OIDC, full gate re-run, SBOM,npm publish --provenance --access public. - feat(docs): the
tsdoc-completeverify rule (22 rules total); TSDoc for the five previously-undocumented exports. - feat(docs): the zipper-cut Z identity —
logo.svg,favicon.svg, regeneratedog-image, newsocial-preview.svg/png(1280×640). - feat(meta):
release-notes/draft/PR-v1.0.0.md— the release PR with the measured verification table and the human go-live runbook.
Changed
- docs(meta): documentation flipped to the stable-era stance — "through 1.0"/"pre-1.0" → "in 1.x" everywhere; README status is the semver freeze statement; satellites read "planned".
- docs(meta): badges harmonised on the pdfnative set (CI, CodeQL, npm, bundle size, provenance, website; Scorecard on the landing — the npm-fed ones self-heal at first publication);
persist-credentials: falseon every CI checkout. - chore(meta): the npm package now ships
CHANGELOG.md,SECURITY.mdandTHIRD-PARTY-NOTICES.md(21-file tarball, inspected); sourcemaps deliberately included;ecosystem.jsonrecords the freeze contracts.
Install
npm install zipnative@1.0.0Upgrade
No breaking changes. Drop-in replacement for v0.9.0 — and for every 0.x tag: the API at 1.0.0 is the 0.9.0 API, frozen.
Known limitations
- store+bit3, encrypted+bit3 and custom-codec+bit3 remain refused in forward reading — structurally undelimitable without the central directory.
- Zip64 streaming (
addStream> 4 GiB) remains a typed refusal — designed (roadmap ADR), implemented in a 1.x minor. - No encryption in 1.x by policy (ZipCrypto is broken); encrypted entries are detected and refused with a typed error.
- A worker playground is deliberately absent (build-tooling changes; a 1.x docs item).
Downstream integration notes
The satellites can now exist: zipnative-cli and zipnative-mcp pin zipnative ^1.0.0. Their contract inputs are all machine-readable — docs/assets/api.json (surface), docs/data/errors.json (the --json envelope's err.code source of truth), and verifyZip's report shape for a future verify --json.