Testing

Blob URLs: Browser Support, Features, Limitations

Blob URLs work in Chrome 8+, Edge 12+, Firefox 4+, Safari 6+, IE 10+. See how URL.createObjectURL works, common use cases, and how to revoke a blob URL.

Author

Prince Dewani

May 6, 2026

Blob URLs are a W3C File API scheme that lets a web page reference binary data or media held in browser memory through a blob: URL. They work in Chrome 8+, Edge 12+, Firefox 4+, Safari 6+ on macOS and iOS, Opera 15+, Samsung Internet 4+, and Internet Explorer 10+.

This guide covers what a Blob URL is, browser support, how it works, common use cases, creating and revoking one, and known issues.

What is a Blob URL?

A Blob URL is a string of the form blob:https://example.com/<uuid> that the browser hands back from URL.createObjectURL(). It points at a Blob, File, or MediaSource object held in memory by the page that created it. The W3C File API specifies the scheme.

Which browsers does Blob URLs support?

Blob URLs are baseline widely available. Every major desktop and mobile browser shipped support more than ten major versions ago, and there are no flag-gated rollouts to worry about today.

Loading browser compatibility data...

Blob URL compatibility in Chrome

Chrome supports Blob URLs from Chrome 8 on Windows, macOS, Linux, and ChromeOS, and from the same baseline on Chrome for Android. URL.createObjectURL and URL.revokeObjectURL are unprefixed and on by default.

Blob URL compatibility in Edge

Edge supports Blob URLs from Edge 12 on the legacy EdgeHTML engine and from Edge 79 on the Chromium engine. The Chromium switch did not change the API surface, so existing code keeps working.

Blob URL compatibility in Firefox

Firefox supports Blob URLs from Firefox 4 on Windows, macOS, and Linux, and from the same baseline on Firefox for Android. The early builds exposed the API on URL only; the legacy webkitURL prefix is no longer needed.

Blob URL compatibility in Safari

Safari supports Blob URLs from Safari 6 on macOS and from Safari 6 on iOS. Both platforms ship the API unprefixed. iOS Safari kept the same parity through every later release, so a Blob URL that runs on macOS Safari runs on iOS Safari.

Blob URL compatibility in Opera

Opera supports Blob URLs from Opera 15 on desktop, the first Chromium-based release, and from Opera Mobile on the Chromium baseline. Older Presto Opera 12 also exposed the API behind the URL object.

Blob URL compatibility in Samsung Internet

Samsung Internet supports Blob URLs from Samsung Internet 4 on Android. The browser tracks Chromium, so every later Samsung Internet release ships the same API surface as the matching Chrome version.

Blob URL compatibility in Android Browser

The Android Browser supports Blob URLs from Android 4.4 KitKat on, when the system WebView switched to Chromium. Earlier stock browsers based on the legacy WebKit engine had partial support that tied the URL to the page lifetime.

Blob URL compatibility in Internet Explorer

Internet Explorer supports Blob URLs from IE 10 on Windows 7 and Windows 8. IE 10 and 11 expose URL.createObjectURL but not msSaveOrOpenBlob inside iframes. Microsoft has retired Internet Explorer, so prefer Edge for any modern test pass.

Note

Note: Blob URLs behave the same on paper but break in subtle ways across mobile Safari, IE 11, and older Android WebViews. Test them on real browsers and OS with TestMu AI. Try TestMu AI free!

How does a Blob URL work?

A Blob URL is a short opaque pointer that the browser keeps in a per-document blob store. The page hands the browser a Blob; the browser hands the page back a URL; the URL only resolves inside that document.

Three things happen end to end:

  • Allocation: URL.createObjectURL stores a strong reference to the Blob in the document blob URL store and returns a string of the form blob:<origin>/<uuid>.
  • Resolution: When the page sets the URL on an img.src, video.src, iframe.src, fetch, or anchor href, the browser looks the UUID up in the same store and serves the bytes from memory with no network hop.
  • Release: URL.revokeObjectURL removes the entry. The Blob is then eligible for garbage collection once no other JavaScript reference holds it.

The URL is bound to the origin and the document that created it, which is why pasting a blob: URL into a different tab fails. Blob URLs cannot be sent over the wire either, since the bytes never leave the browser process.

What are the common use cases of Blob URLs?

Anywhere a page holds bytes the user wants to see, save, or stream, a Blob URL is the cheapest handle to that memory. The pattern shows up across upload pickers, media players, and offline tools.

  • Image and file previews: Read a File from an <input type="file"> picker and assign the Blob URL to img.src so the user sees the picture before upload.
  • Client-side downloads: Build a CSV or PDF in the page, wrap it in a Blob, set the Blob URL on an anchor with a download attribute, and click it to trigger a Save dialog without a server round trip.
  • Streaming media playback: Pair a MediaSource object with URL.createObjectURL to feed adaptive bitrate chunks into a video element. YouTube, Twitch, and Vimeo use this path for HLS and DASH.
  • Web Worker bootstrapping: Compile worker source as a string, wrap it in a Blob, and pass the Blob URL to new Worker(url) so the worker runs without a separate file.
  • Capture and recording flows: The MediaRecorder API hands back Blob chunks the page can stitch into a Blob URL for instant playback on a video tag.
  • Image cropping and editors: Canvas.toBlob produces a Blob the page can preview and re-upload via a Blob URL, a pattern Figma and Canva ship in their browser editors.
...

How do you create and revoke a Blob URL?

Creating a Blob URL is one method call; cleaning it up is one more. Skipping the cleanup step is the single most common Blob URL bug, so wire the revoke call up at the same time you write the create call.

  • Build a Blob: Construct a new Blob from raw parts, or pull a File out of an <input type="file"> picker, or read response.blob() from a fetch.
  • Call URL.createObjectURL: Pass the Blob in. The method returns a string that starts with blob: and ends with a UUID; assign it wherever you would assign a regular URL.
  • Use the URL: Drop it on img.src, video.src, an <a download>, an iframe, or a fetch. The browser pulls the bytes straight out of memory.
  • Revoke the URL: Call URL.revokeObjectURL(url) once the asset has loaded or the user has clicked the download. Wrap it in a load handler or a setTimeout so the browser has time to read the bytes.
  • Confirm the cleanup: Take a heap snapshot in DevTools and search for Blob; the Blob should be gone after revoke fires and no other reference holds it.
// Paste into the browser DevTools console on any page.
// Builds a small text Blob, gets a blob: URL, opens it, and revokes it.
const blob = new Blob(["Hello from TestMu AI"], { type: "text/plain" });
const url = URL.createObjectURL(blob);

console.log("Blob URL:", url);
// Example output: blob:https://example.com/2f1e9c8a-7b32-4d11-9c23-c0f9d7e1a801

const link = document.createElement("a");
link.href = url;
link.download = "hello.txt";
link.textContent = "Download sample";
document.body.appendChild(link);

// Always free the memory once the URL is no longer needed.
link.addEventListener("click", () => {
  setTimeout(() => URL.revokeObjectURL(url), 1000);
});

If the snippet logs a blob: URL but the download link does nothing, the page is sandboxed; remove the sandbox attribute on the iframe or run the snippet on the top-level document instead.

What are the known issues with Blob URLs?

Blob URLs look universal on a compatibility chart, but the edges show up the moment a page outlives a single render or crosses a security boundary. Plan for these before you ship.

  • Memory leaks in single-page apps: Each createObjectURL call holds a strong reference to the Blob until you revoke it or close the document. A gallery that swaps thumbnails on scroll without revoking will balloon the renderer process within minutes.
  • Service worker registration is rejected: The spec forbids navigator.serviceWorker.register on a blob: script. The relevant PAA "service worker register blob url not allowed" reflects the error message Chrome and Firefox throw.
  • Sandboxed iframes break the URL: A blob: URL only resolves inside its creator browsing context. Setting it on an iframe that has the sandbox attribute, or pasting it into a new tab, returns ERR_FILE_NOT_FOUND.
  • Cross-origin reads are blocked: A second origin cannot fetch a Blob URL even if it can guess the UUID. CORS is enforced at the blob store layer, not at the network layer.
  • iOS Safari downloads need a user gesture: Programmatically clicking an anchor with a Blob URL during page load is silently ignored on iOS Safari. The click has to fire inside a touch or pointer event handler.
  • Internet Explorer needs msSaveOrOpenBlob: IE 10 and 11 honor URL.createObjectURL, but the download attribute does not work; fall back to navigator.msSaveOrOpenBlob for save dialogs.

In my experience, the leak path is the one that ships to production unnoticed; the security errors are loud, the leak is silent until the tab gets killed for using two gigabytes of memory.

...

Citations

All Blob URL version numbers and behavior notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests