Browser support
f.js is built to target ES2018, which sets a practical floor of:
- Safari 12+
- Chrome 66+
- Firefox 60+
- Edge 79+ (Chromium-based Edge)
This covers effectively all real-world traffic — these versions are years old at this point — but it's worth being explicit about what happens for the small tail of visitors on something older.
What happens below the floor
f.js is a single JavaScript file, and a browser that doesn't support ES2018 syntax simply cannot parse it. The <script> tag fails to execute — nothing on the rest of your page is affected, and no page-breaking error is thrown. The practical effect is a graceful no-op: the banner does not render, window.consentfolio is never defined, and any script gated behind data-cf-consent or a dashboard-configured category stays inert, because nothing ever grants it consent.
This is the same fail-closed outcome as an ad blocker preventing f.js from loading (see adblock-itp.md): non-essential scripts never activate without consent having actually been recorded. Below the browser floor, you lose the banner (and therefore any chance of that visitor granting consent) — you don't lose compliance.