Revision code

Changes Version 2.2.0
Released on August 05, 2021 with 118 commits

Reduced file size

The size of unpoly.js has been reduced significantly. It now weighs 41.6 KB (minified and gzipped).

To achieve this unpoly.js is now compiled with modern JavaScript syntax that works across all modern browsers (Chrome, Firefox, Edge, Safari, Mobile Chrome, Mobile Safari).

ES5 build for legacy browsers

If you need support for Internet Explorer 11 you can either use a transpiler like Babel or use Unpoly's ES5 build. To use the ES5 build, load unpoly.es5.js instead of unpoly.js. There is also a minified version unpoly.es5.min.js.

Like in earlier versions of Unpoly, supporting IE11 requires a polyfill for the Promise API. No additional polyfills are required by this version.

The future of IE11 support

Microsoft is going to retire IE11 in June 2022.

After that date Unpoly will remove support for IE11 and no longer provide ES5 builds. It may be possible to keep supporting IE11 through polyfills and transpilation, but the Unpoly maintainers will no longer support or test with IE11.

This step will allow Unpoly to use modern web APIs and reduce its bundle size even further.

Other changes

  • When going back in history, Unpoly reloads the <body> instead of the :main element. You can customize this behavior in up.history.config.restoreTargets.
  • The function up.util.times() has been deprecated. Use a classic for statement instead.
  • The function up.Params.wrap() has been removed without replacement.
  • Unpoly no longer loads when the browser is in quirks mode.
  • When Unpoly cannot load, it prints a reason to the error log.


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.