:main or :layer can now be used in a compound target, e.g. :main .child.:main will no longer match in the region of the interaction origin). It will now always use the first matching selector in up.fragment.config.mainTargets.<body> instead of the main element.:has() selector where available. Unpoly's polyfill for :has() will remain included for the time being. It will be removed as Firefox' :has() support has reached the majority of users (available on Nightly now).script[type="application/ld+json"] elements is considered a meta tag that will be updated with history changes.script[type="application/ld+json"] elements in are now preserved in new fragments with up.fragment.config.runScripts = false.Content-Security-Policy-Report-Only.X-Up-Validate header value exceeds 2048 characters, it is now set to :unknown.
This is to prevent web infrastructure from rejecting an overly long request line with an 413 Entity Too Large error.up:assets:changed would be emitted for every response when configuring up.fragment.config.runScripts = false.up.form.isSubmittable() now returns false for forms with a cross-origin URL in their [action] attribute.up.util.contains() now works on NodeList objects.up.fragment.config.runScripts = false.
If you're upgrading from an older Unpoly version you should load unpoly-migrate.js
to polyfill deprecated APIs.
Changes handled by unpoly-migrate.js are not considered breaking changes.
See our upgrading guide for details.