Compatibility
Compatible with iOS 8.0 +
Description
Provides polyfills for some JavaScript features that are not available on old iOS versions.
Check out this page for recommended experimental WebKit features to enable to further enhance web compatibility.
In 2025, iOS 15 and lower are considered "old". A lot of websites would outright stop working on these versions as they no longer provide necessary polyfills.
Avoid installing version 1.5.0 to 1.9.0 on iOS 15 and lower as there is a high CPU usage bug.
Changelog
2.20.0:
Added polyfill for MediaQueryList.addEventListener (< 14.0, contributed by @mgefimov)
Added HTMLElement.inert polyfill (< 15.5, contributed by @mgefimov)
Added support for global blacklist (disabling all polyfills for specific websites)
Added screen.orientation polyfill (< 16.4)
Added experimental support for adding Sec-Fetch-* headers to improve website compatibility (>= 11.0, < 16.4)
Added experimental support for Media Query Range Syntax (< 16.4)
Updated structuredClone polyfill to the latest version (< 15.4)
Fixed screen.orientation polyfill not working in some cases (< 16.4)
Fixed CSS layers polyfill causing infinite loading on some websites (< 15.4)
Fixed TestFlight apps being broken (< 16.4, contributed by iCraze)
Made web-streams-polyfill target iOS < 14.5 instead of iOS < 14.1 (< 14.5, contributed by @mgefimov)
2.16.0: Added ability to enable/disable and blacklist websites from each polyfill from the tweak settings
2.15.0:
Added conditional polyfills for AbortSignal and AbortController (< 15.4)
Added experimental support for oklch color space (< 15.4)
Added "Spoof User Agent" option in tweak settings to manually spoof user agent to iOS 16.3 (Some websites could break with user agent spoofing enabled such as pinterest.com)
Improved BroadcastChannel polyfill in strict website policy (< 15.4)
Improved viewport CSS workaround (< 15.4)
Fixed Document Fullscreen API polyfill breaking in strict website policy (< 16.4)
Fixed Document Fullscreen API polyfill breaking some websites (< 16.4)
Fixed String.startsWith and String.endsWith polyfills not working (< 9.0)
Disabled user agent spoofing if the existing spoofing targets higher than iOS 16.3 (< 16.4)
Made scripts from the same folder (scripts, scripts-priority or scripts-post) loaded all at once
Moved globalThis polyfill to priority scripts (< 12.1)
2.12.0:
Added support for priority scripts (loaded before any other scripts)
Added navigator.hardwareConcurrency polyfill (< 15.4)
Added support for smooth behavior in Scrolling API (< 15.4)
2.11.0:
Improved safety checks in Document Fullscreen API polyfill (< 16.4)
Added Crypto.subtle polyfill (< 11.0)
2.10.0:
Added Document Fullscreen API polyfill (< 16.4)
Fixed broken functionalities in BroadcastChannel polyfill (< 15.4)
2.9.0:
Added Float16Array polyfill (< 18.2)
Fixed CompressionStream polyfill not working in some cases (< 16.4)
Improved BroadcastChannel polyfill error handling (< 15.4)
2.8.1: Spoofed iOS version to 16.3 for devices running under iOS 16.3
2.8.0:
Added support for extended ISO 8601 date format (< 16.0)
Removed `max-width: 100% from viewport CSS workaround
2.7.0:
Added structuredClone polyfill (< 15.4)
Added String.matchAll polyfill (< 13.0)
Added globalThis polyfill (< 12.1)
Added Reflect polyfill (< 10.0)
Added Object.getOwnPropertyDescriptors, String.padStart and String.padEnd polyfills (< 10.0)
Added Number.{EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,NEGATIVE_INFINITY,POSITIVE_INFINITY}, Number.isInteger and Number.isSafeInteger polyfills (< 9.0)
2.5.0:
Included iOS 15.2 - 15.3 for viewport CSS workaround
Made viewport CSS workaround apply to only mobile devices
Added Array.flat, String.trimStart, String.trimEnd and Symbol.description polyfills (< 12.0)
Added Promise.finally polyfill (< 11.1)
Simplified NodeList.forEach polyfill (< 10.0)
2.4.0:
Added RegExp.escape polyfill (< 18.2)
Added Array.toSorted, Array.toSpliced and Array.with polyfills (< 16.0)
Added Promise.any polyfill (< 14.0)
Added Object.fromEntries polyfill (< 12.1)
Fixed Element.matches compatibility workaround still not working correctly (< 15.6)
Included iOS 15.0 - 15.1 for viewport CSS workaround
2.3.1: Added RegExp Lookbehind (Polyfills) tweak as a dependency
2.3.0:
Removed RegExp lookbehind polyfill as it is now part of a separate package RegExp Lookbehind (Polyfills)
Added dynamic import polyfill (< 15.2)
Added Object.getOwnPropertySymbols polyfill (< 9.0)
2.2.3: Fixed app crash due to problematic RegExp (< 16.4)
2.2.2: Fixed RegExp lookbehind polyfill breaking some websites (< 16.4)
2.2.1: Improved RegExp lookbehind polyfill (< 16.4)
2.2.0:
Made CSS Cascade layers workaround work for dynamically added stylesheets
Added EventTarget polyfill (< 14.0)
Readded viewport CSS workaround (< 15.0)
Fixed HTMLDialogElement stub polyfill not working (< 15.4)
2.1.0:
Made the JS code injected as soon as it is loaded from the filesystem
Simplified polyfill for CompressionStream
2.0.0:
Made all JS code loaded from files only when needed by that iOS version to reduce memory footprint on injection
Added Array.group, Array.groupBy, Array.groupToMap, Object.groupBy, Map.groupBy and Promise.withResolvers polyfills (< 17.4)
Fixed Element.matches compatibility workaround not working on iOS 15.4 - 15.5 (< 15.6)
1.12.0:
Worked around CSS dynamic viewport units not working by replacing `{d,s,l}v{w,h} with just v{w,h} (< 16.4)
Worked around CSS Cascade layers not working by stripping `@layer` from stylesheets (< 15.4)
Prevented HTMLDialogElement stub polyfill from being injected if its corresponding experimental WebKit feature is enabled (< 15.4)
1.11.0:
Added the settings page to enable/disable the tweak
Disabled RegExp lookbehind polyfill on twitter.com to avoid breaking the website (< 16.4)
1.10.0:
Fixed requesting desktop website not working in Safari
Added Array.from (< 9.0), Array.fromAsync (< 16.4) and Array.includes (< 9.0) polyfills
Added CSS.escape polyfill (< 10.1)
Added NodeList.forEach polyfill (< 10.0)
Added Object.assign (< 9.0), Object.entries (< 10.1) and Object.values (< 10.1) polyfills
Added Proxy polyfill (< 10.0)
Added String.startsWith, String.endsWith and String.includes polyfills (< 9.0)
Added Symbol.asyncIterator polyfill (< 11.1)
Added WeakSet polyfill (< 9.0)
1.9.2:
Fixed user agent spoofing not working (regression of 1.9.1)
Fixed Safari crashing on iOS 8
1.9.1:
Added RegExp lookbehind polyfill (< 16.4)
Added BroadcastChannel polyfill (< 15.4)
Added Array.toReversed polyfill (< 16.0)
Spoofed iOS version to 16.0 for devices running under iOS 16.0
Fixed websites always loading in desktop mode
Fixed polyfill compatibility with iOS 13.0 and lower
Fixed Array.at, Array.findLast and Array.findLastIndex polyfills
Fixed the same polyfill scripts being injected multiple times
Restricted certain polyfills to execute only on the maximum unsupported iOS version and lower
Restricted CompressionStream polyfill to iOS 16.3 and lower
Restricted ReadableStream, WritableStream and TransformStream polyfills to iOS 14.0 and lower
Restricted WebStreams polyfill to iOS 14.0 and lower
1.4.0:
Added missing polyfill for Web Streams (necessary for CompressionStream)
Added Element.checkVisibility polyfill (< 17.4)
Removed problematic viewport CSS workaround
1.3.0:
Allows polyfills to be injected into iframes
Added CompressionStream polyfill (< 16.4)
Fixed support for old iOS versions
1.2.0: Added Promise.allSettled and the meta viewport min-width polyfills
1.1.1: Removed the code that removes all other user scripts
1.1.0:
Minified all JavaScript codes before injecting
Added support for injecting JavaScript after the document is loaded
Added Array.findLast, Array.findLastIndex and Object.hasOwn polyfills (< 15.4)
Added String.replaceAll polyfill (< 13.1)
Added viewport CSS workaround to fix incomplete page width on iOS 14 and lower