#1254: Incubation: Cross-Origin Storage
Discussions
Log in to see TAG-private discussions.
Comment by @tomayac Aug 7, 2026 (See Github)
If you want to experience Cross-Origin Storage (COS) in two real browsers, I managed to add full imperative COS API support (navigator.crossOriginStorage) to both Servo and Ladybird (personal prototypes). I'm keeping track of the learnings in the implementation notes, which hopefully will be useful for other vendors.
Comment by @tomayac Aug 7, 2026 (See Github)
You can find Web Platform Tests in https://github.com/web-platform-tests/wpt/pull/61811.
Comment by @tomayac Aug 9, 2026 (See Github)
Comment by @tomayac Aug 14, 2026 (See Github)
Comment by @tomayac Aug 17, 2026 (See Github)
Comment by @tomayac Aug 18, 2026 (See Github)
FYI, just sent the Intent to Prototype email for Chromium.
Discussed
Aug 31, 2026 (See Github)
Yves: I've not commented yet, but I have two issues. The first is the prefilled list. It may promote sites that you have a relationship first. The other issue is when you're sharing things and putting them in the cache, if you can check something is there, that gives you 1 bit of info. If you add 10 things to the cache (they could be small) then you have 10 bits of info. If it bypasses the restriction of cross-site sharing, but works in this way, there is still a perfect (if limited) channel for sharing info.
Brian: I left a comment. This is currently a Chrome-only feature. It's only enabled when you have 3pc because it doesn't make the situation any worse. TAG already has expressed an opinion that 3pc have to be removed, so entrenching them should not happen. I had other parts to my comment, but that's the most straightforward.
Yves: I saw the 3pc requirement, but if the spec evolved to work even if 3pc are not set, by using the hash-only checking, then it has the issue that I hightlighted, which is being able to share things bethween colluding sites that may check the same hashes from different origins.
Brian: I commented also that you'd have to specify so many things that aren't specified in order to make this work at all. It sounds like the performance gains from this in cases that are not the AI case are disappointing. I think you'd have to specify things to the degree that this would be a different proposal. I don't think it's possible to address these concerns.
Christian: The idea is that you'd have to show permission prompts if you want to access the cross-origin storage. If you really share data via caching cross origins and the prompts are turned off if 3pc are on, that part is only about the prompting. Good points and I will check out your comments.
Discussed
Sep 21, 2026 (See Github)
Yves: Saw Christian's answer about 3p cookies. It's still doesn't address the fact that you can store things and use the presence to exchange data between site. Maybe having a fixed list, and not updateable, might be a good solution. Curating the list is even more important in that case.
Dan: There are some very different types of things proposed to be in here. Common libraries like React, or Google Fonts, might give very little information. Game engines, AI models, might give more information. The cross-origin thing is a legitimate concern. Explainer might address how AI models used by few people interact with libraries used by a lot. How can browsers limit the number of requests people make into the registry to limit the amount of information they can gather. This makes a lot of sense ... is there a core that would be possible? Chrome already does something like this with "cache sharing for pervasive resources". Can something like this be standardized, with better privacy guarantees?
Lola: How does this differ from shared storage access? https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API A way for cross-site content, in 3p content, to gain access to unpartitioned state that would be available in the 1p context.
Christian: Scope is different because this isn't about cookies and small information, or the iframe boundary, but about sharing large dependencies used by multiple sites across different contexts.
Lola: Storage Access wouldn't be able to be extended to accept bigger resources?
Christian: Not sure; please add it to the brainstorming comment.
Jeffrey: Storage Access gives a third-party iframe access to its first-party sotrage. If it has access to the same iframe as some other iframe, that is not shared. Cross-origin storage is meant to share somethign that is byte-identical across different origins. I think they're different enough to have separate APIs.
Brian: Things they're proposing to be able to do, are pretty different. Not just a JS API or an attribute. Here's how you can make a local proxy/cache and use it through script include, CSS, etc. A lot more dicey than some other things you could do.
Yves: cache with preemptive deduplication
Discussed
Oct 5, 2026 (See Github)
Dan: There's a draft PR on the explainer to make a change to decouple this from 3p cookies, which is one of the main concerns from our and WebKit's end. It's better than 3p cookies, but it's contingent on 3p cookies being enabled. PR had some feedback, and then it was marked as a draft.
Jeffrey: There's a question of whether to keep promoting this as a cross-browser feature, or, as I've suggested, to put it in a Chromium-only place.
Brian: The question of whether you can achieve it without 3rd-party cookies, and the shrug that goes with "it's no worse than 3rd-party cookies". The internal storage that treats a small number of sites specially was controversial among the Blink owners. Have they worked out something that more than just Thomas thinks can work? Even in the Intent, the data for the small list was underwhelming. I have doubts. If you could manage to figure out how to do this, it would be great, but it's not proven yet.
Dan: I can ask what the status is, and whether they intend to move forward with that they have in draft,.
Comment by @dandclark Oct 7, 2026 (See Github)
A quick status question on this: are you still working on any part of https://github.com/WICG/cross-origin-storage/pull/73, or has that been fully subsumed by other changes? I see that there was a separate update to https://github.com/WICG/cross-origin-storage#privacy-considerations such that it no longer suggests a dependency on 3P cookies.
Comment by @tomayac Oct 8, 2026 (See Github)
A quick status question on this: are you still working on any part of WICG/cross-origin-storage#73, or has that been fully subsumed by other changes?
Yes, we're still working on this. Please see privacy.md that lists attacks and mitigations. Note that this file is not on the main branch yet. It's still work in progress and thus non-final, but can maybe serve to show the rough direction of our thinking.
I see that there was a separate update to https://github.com/WICG/cross-origin-storage#privacy-considerations such that it no longer suggests a dependency on 3P cookies.
Yes, the ultimate objective is to make this API implementable with mitigations (as per the above point) with third-party cookies disabled.
Comment by @tomayac Oct 16, 2026 (See Github)
It might not immediately be clear from the explainer, but sharing globally is not the default.
- Omitting
originskeeps the file readable by same-site origins only. This is the default. It fits resources shared across all of an organization's own subdomains. - Passing a list, like
origins: ['https://write.example', 'https://calculate.example'], restricts access to those origins and their same-site origins. This is useful for proprietary resources shared across a company's own properties. With the list form, whoever serves the bytes needs to authorize each origin in the list using theCross-Origin-Storage-Allow-Originheader. - Only passing
origins: '*'makes the file globally available, subject to the availability gating through the Public Hash List.
Same-site and list entries reach only the origins their storing site chose, so reading what other parties stored takes the global scope, where the PHL, GREASE'ing, and the lookup budget apply. Browsers without third-party cookies could offer the first two scopes alone by treating the PHL as empty, rendering the attacks that depend on the global scope infeasible.
OpenedAug 5, 2026
Explainer
https://github.com/WICG/cross-origin-storage/blob/main/README.md
The explainer
Where and by whom is the work is being done?
Feedback so far
You should also know that...
Public Hash List
Companion design document for the Public Hash List (PHL), the mechanism this proposal leans on for its main cross-site-disclosure mitigation: https://github.com/WICG/cross-origin-storage/blob/main/public-hash-list/phl-explainer.md
Public Hash List implementation
A prototype implementation of the Public Hash List is available. The actual Public Hash List is created on a weekly basis based on a GitHub Action.
Browser extensions
Browser extensions that implement the API (including Public Hash List gating) exist for all browsers:
Developer interest
Developer interest is tracked in the Web / Framework developer views notes section of the ChromeStatus entry.
Awesome Cross-Origin Storage
More demos and resources are tracked on the Awesome Cross-Origin Storage list.
<!-- Content below this is maintained by @w3c-tag-bot -->Track conversations at https://tag-github-bot.w3.org/gh/w3ctag/design-reviews/1254