OPEN-SOURCE ZIP TOOLKIT · MIT

Turn files and URLs
into one ZIP.

Eazip packages files or remote URLs into a single ZIP, right in the browser — no backend, no zip server. Reach for the cloud only when a job outgrows the tab.

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

function Exporter({ files }) {
  const zip = useEazip()

  return (
    <>
      <button onClick={() => zip.download({ files })}>
        Download as ZIP
      </button>

      {/* progress, cancel & retry — built in */}
      <EazipTray />
    </>
  )
}

Live <EazipTray /> — click Download as ZIP to watch it work.

Files or URLs

Zip local blobs and remote URLs into one archive — mix and match freely.

Runs in the browser

Packaged entirely client-side. No backend, no zip server to run.

Cloud when you scale

Thousands of files or many GB? Switch strategy: 'cloud'.

Two packages · one mental model

A few lines of core, or one component

@eazip/core

The framework-agnostic engine

Feed it files, blobs, or remote URLs; get back a ZIP the browser downloads. ESM-only, tree-shakeable, 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()
App.tsx
import { useEazip, EazipTray } from '@eazip/react'

const zip = useEazip()
zip.download({ files })          // fire & forget

// drop the tray in once; it owns its states
<EazipTray />

// huge job? one option — same tray, same UX
zip.download({ files: urls, strategy: 'cloud', publicKey })
@eazip/react

Or a single component

A useEazip() hook plus a self-contained <EazipTray/> that narrates progress, retries and the download. Flip one option to cloud when you outgrow the browser.

Quickstart

From install to download

The same four moves behind the demo above. Copy, paste, ship.

  1. Installnpm i @eazip/react

    Add the package. No build step, no config.

  2. Start a downloadzip.download({ files })

    Files, blobs, URL strings — anything goes in.

  3. Drop in the tray<EazipTray />

    Progress, retries and download — handled.

  4. Scale if neededstrategy: 'cloud'

    Hand huge jobs to Eazip Cloud.

Recipes

common jobs, mapped outBrowse all →

Ship your first ZIP today.

Free and MIT-licensed. When a job outgrows the browser, Eazip Cloud is one option away — same API, same tray, same UX.