Published: November 10, 2026
Modern web apps often depend on large assets, such as JavaScript frameworks, game engines, and AI models. Despite the fact sites are using identical assets, each site has to download and store their own copy of each.
With the proposed Cross-Origin Storage API, COS for short, the client specifies the content it's looking for by its hash, and fetches it from any URL to share it across the designated sites (or all sites). This means an exact, known resource can be shared across sites, independent from serving the asset. With this proposal comes security benefits and safety challenges.
Use cases
We've written at-length about the importance of caching models and caching any asset with the Cache Storage API. The Cross-Origin Storage API goes a step further, and could be beneficial when multiple related (or otherwise) websites need access to the same resource:
- AI models: Models like Gemma or Llama variants weigh anywhere from roughly a gigabyte to tens of gigabytes. Storing and retrieving one copy through COS avoids massive duplicate downloads. This is a major motivation behind the proposal.
- Wasm modules: Frameworks like Flutter ship Wasm files that are requested millions of times a day across thousands of distinct origins, always byte-identical.
- Popular JavaScript libraries and frameworks: Bundling vendor code separately and in its entirety (such as the complete, untreeshaken React library) lets multiple apps share one cached copy through COS.
- Game engines: Browser games built on engines like Godot or Unity can share the engine runtime through COS and fetch only game-specific assets over the network. Gaming portals that host many casual games across different origins or iframes benefit the most.
- Large web fonts: Icon fonts, emoji fonts, and fonts with broad Unicode coverage are downloaded across an enormous number of pages. Sharing them once through COS helps both performance and sustainability.
The basic flow of working with COS
The COS API introduces a navigator.crossOriginStorage.getFileHandle() method through which web apps store and retrieve files across origin boundaries, identified by a cryptographic hash. The explainer has an example that shows the basic flow of working with the API.
Try it today
There are two ways to experiment with COS right now:
- Install a browser extension from the Chrome Web Store, Firefox Add-ons, or Safari App Store to polyfill the API surface and all integrations. You can test the API flow in any browser. Or load the extension unpacked from its source code.
- Experiment in Chromium: There's an experimental Chromium implementation. Download it for macOS on Apple silicon or Linux x86_64 from goo.gle/cos-chromium, then open
about://flags, search for "Cross-Origin Storage", set it to Enabled, and restart when prompted. This build includes a DevTools integration: find Cross-origin storage in the Application tab.
Ecosystem interest
COS is an early-stage proposal, and a number of projects already ship experimental support, typically behind an opt-in flag and layered as a progressive enhancement:
- Emscripten shares generated Wasm output.
- Flutter shares its Skia Wasm runtime.
- Transformers.js shares model weights and the Wasm runtimes they depend on.
- WebLLM shares models and runtimes.
- wllama shares AI models.
- Nuxt.js loads shared dependencies from Cross-Origin Storage and maintains a Vite COS plugin.
- Prompt API Polyfill shares AI models across its WebLLM and Transformers.js backends.
- Prebid.js has a COS-ready CDN distribution of the header bidding library.
Standardization
Cross-Origin Storage is an early-stage WICG proposal. You can read the early W3C TAG Design Review.
- Host integrations are filed with their respective standards bodies:
crossoriginstorageattribute andcrossOriginStorageimport attribute with the WHATWG HTML Standardcross-origin-storage()with the CSS Working GroupcrossOriginStoragerequest option with the Fetch Standard
- Cross-browser Web Platform Tests (work in progress)
- Standards positions have been requested from Mozilla and WebKit.
Feedback on the API and the proposal is welcome. You can file issues, show support, or open pull requests in the Cross-Origin Storage repository.
Resources
- Read the explainer for the Cross-Origin Storage API and the spec draft.
- Follow the implementation of COS in Chrome by starring the Cross-Origin Storage umbrella bug and its dependencies.
- Check out the Public Hash List explainer.
- Take the COS security and privacy questionnaire.
- Review the Intent to Prototype and the Chrome Platform Status entry.
Plus, check out this tooling and demos:
Additional background reading
- Gaining security and privacy by partitioning the cache
- Experimenting with the proposed Cross-Origin Storage API in Transformers.js
- HTTP cache partitioning: the same image, downloaded twice by Joan León
- Cross-Origin Storage API: Stop Downloading Twice by Dennis Morello
- I wanted the browser to just ship jQuery. Cross-Origin Storage came for rescue by Ahmad Alfy
Talks and podcasts
- ShopTalk Show 732: Thomas Steiner on New Cross-Origin Storage APIs (podcast)
- Working Draft 723: Cross-Origin Storage API (podcast in German)
- WeAreDevelopers: What is Cross-Origin Storage (podcast)
- Cross-Origin Storage: a shared cache for the web at JSNation US 2026