All posts
Mar 20, 2026 · 5 min read

Introducing Bunle — image galleries that stream like video

We built a new image container format where photos appear as data arrives, layout is instant, and any page is one HTTP Range request away.

Cover image

The problem with sharing photos today

You take 300 photos at a wedding. Now you need to send them to the client. What are your options?

  • WeTransfer: Upload, wait, share a link. Client downloads a ZIP, extracts it, then browses. No preview.
  • Google Drive: Upload to a folder, share the link. Google compresses your images. Client gets nagged to sign in.
  • Email: Attach a ZIP. Hits the 25 MB limit on photo #3.

Every option requires the full file before anyone sees anything. That's the problem we set out to solve.

How Bunle works

Bunle packs your images into a single .bnl file — a binary container optimized for HTTP Range requests. The file has a small index at the beginning that describes every image: dimensions, format, byte offset.

When someone opens your link, the browser fetches the index first (a few hundred bytes). It knows every image's size instantly — so the gallery layout renders immediately. Then it streams the actual image data progressively.

The first photo appears in under 100ms. The rest stream in as data arrives. No spinner, no blank screen.

No re-encoding

Your WebP, JPEG, and JXL files pass through byte-for-byte. Bunle doesn't touch your pixels. What you upload is exactly what the viewer sees.

Random access

Want to jump to photo #50? The viewer sends a single Range request for that image's bytes. No need to download photos 1–49 first.

Try it yourself

The fastest way to try Bunle is to drop some photos here. You'll get a link in seconds — no account needed.

If you're a developer, check out the SDK documentation. It's 3 KB, zero dependencies, and works in any browser.

const bnl = await Bunle.open(url)

for await (const { index, blob } of bnl.stream()) {
  images[index].src = URL.createObjectURL(blob)
}

What's next

We're working on:

  • View analytics — see who viewed your galleries and when
  • Custom domains — serve galleries from your own domain
  • Team workspaces — collaborate on galleries with your team

Bunle is open source. The format spec, CLI, and JS SDK are all MIT licensed. The cloud service is what we charge for — hosting, CDN, and convenience features.

We'd love to hear what you think. Open an issue or drop us a line at hi@bunle.cloud.

Ready to try Bunle?

Free. 100 photos. No account needed.

Share photos now