@eazip/react
One hook, one component — zip downloads for React apps.
@eazip/react gives you useEazip() and <EazipTray />: a hook that starts
zip downloads and a self-contained tray component that narrates progress,
completion, partial results, failures, and expiry. No CSS import, no
provider, and no configuration are required to get started.
import { EazipTray, useEazip } from '@eazip/react';
function Gallery({ selectedFiles }: { selectedFiles: File[] }) {
const zip = useEazip();
return (
<>
<button onClick={() => zip.download({ files: selectedFiles })}>
Download as ZIP
</button>
<EazipTray />
</>
);
}npm install @eazip/reactNothing here needs a context provider or a CSS import to work — useEazip()
falls back to a shared internal store, and <EazipTray />'s styles are
injected alongside it. Add EazipProvider later if you want shared config
(a default publicKey or strategy) or per-test isolation; it's additive,
never required.
In this section
useEazip()— the hook:download(), the currenttask, and the actions around it.<EazipTray />— every prop, the three placements, and how to embed it inside your own layout.- Localization — the built-in
en/jacatalogs and per-string overrides. - Persistence & reload-resume — how cloud exports survive a page reload.
- Headless usage — build your own UI on
useEazip()without the tray.
New to Eazip? Getting started walks through install and
a full useEazip() + <EazipTray /> example. Not using React?
@eazip/core is the framework-agnostic engine underneath — this
package is a thin, opinionated layer on top of it, not a reimplementation.