OPEN-SOURCE ZIP TOOLKIT · MIT

Add “Download as ZIP”
to any web app.

Create ZIPs from files or remote URLs, right in the browser — without any backend code. Eazip handles multi-GB archives and thousands of URLs too — just switch to Eazip Cloud for larger jobs.

Get started
$npm i @eazip/
Loading demo…
import { useEazip, EazipTray } from '@eazip/react'
import { MyFileList } from './MyFileList'

export default function App() {
  const zip = useEazip()

  return (
    <>
      <MyFileList
        onDownload={(files) => zip.download({ files })}
      />

      <EazipTray />
    </>
  )
}

No backend to build

Create ZIP downloads in the browser without running ZIP workers, temporary storage, or download servers.

Production-ready download UX

Use the React tray for progress, cancel, retry, completion, and multiple ZIP downloads.

Scale without a rewrite

Keep the same API and UI when moving large, long-running, or resumable jobs to Eazip Cloud.

Two integrations · one ZIP engine

Choose the integration that fits your app

@eazip/react

For React apps

Use the useEazip() hook and drop-in <EazipTray /> for progress, cancel, retry, and completed downloads.

App.tsx
import { useEazip, EazipTray } from '@eazip/react'
import { MyFileList } from './MyFileList'

export default function App() {
  const zip = useEazip()

  return (
    <>
      <MyFileList
        onDownload={(files) => zip.download({ files })}
      />

      <EazipTray />
    </>
  )
}
@eazip/core

For any JavaScript app

Feed it local blobs and remote URLs, then download the resulting ZIP. Framework-agnostic, ESM-only, and zero config.

export.ts
import { createZip } from '@eazip/core'

// mix local data and remote URLs freely
const result = await createZip({
  files: [
    { url: '/files/report.pdf' },
    { file: svgBlob, filename: 'logo.svg' },
  ],
  zipName: 'export.zip',
})

result.download()
Quickstart

From install to
download in minutes

Three steps, no build config, no server to stand up.

  1. 1
    Installnpm i @eazip/react

    Add the React package. No build configuration or backend required.

  2. 2
    Zip files or URLszip.download({ files })

    Pass local files or remote URLs to the useEazip() hook.

  3. 3
    Show progress<EazipTray />

    Progress, cancel, retry, and completed downloads — handled.

Need multi-GB ZIPs?

Start local. Scale without rewriting.

Browser-first, cloud-ready

Use the MIT-licensed browser strategy for everyday ZIP downloads — no account, backend, or upload step required.

For multi-GB archives, thousands of URLs, CORS-limited sources, or reload-resumable jobs, switch to Eazip Cloud with the same download call. No backend code to write — same API, same React tray.

zip.download({
  strategy: 'cloud',
  publicKey: 'pk_ez_...',
  files: urls,
})
Explore Eazip Cloud →

Guides

common jobs, mapped outBrowse all →

Ship your first ZIP today.

Free and MIT-licensed. Follow the three-step quickstart and add a polished ZIP download in minutes.