+++ title = "htmx 1.x → htmx 2.x Migration Guide" +++ The purpose of this guide is to provide instructions for migrations from htmx 1.x to htmx 2.x. We place a very high value on backwards compatibility, so in most cases this migrations should require very little, if any, work. * If you are using htmx in a module setting, we now provide module-type specific files for all three of the major JavaScript module types * ESM Modules: `/dist/htmx.esm.js` * AMD Modules: `/dist/htmx.amd.js` * CJS Modules: `/dist/htmx.cjs.js` * The `/dist/htmx.js` file continues to be browser-loadable * All extensions have been removed from the core htmx distribution and are distributed separately on [their own website](https://extensions.htmx.org). While many 1.x extensions will continue to work with htmx 2, you must upgrade the SSE extension to the 2.x version, and it is recommended that you upgrade all of them to the 2.x versions. * If you are still using the legacy `hx-ws` and `hx-sse` attributes, please upgrade to the extension versions * Default Changes * If you want to retain the 1.0 behavior of "smooth scrolling" by default, revert `htmx.config.scrollBehavior` to `'smooth'` * If you want `DELETE` requests to use a form-encoded body rather than parameters, revert `htmx.config.methodsThatUseUrlParams` to `["get"]` (it's a little crazy, but `DELETE`, according to the spec, should use request parameters like `GET`.) * If you want to make cross-domain requests with htmx, revert `htmx.config.selfRequestsOnly` to `false` * Convert any `hx-on` attributes to their `hx-on:` equivalent: ```html ``` becomes: ```html Note that you must use the kebab-case of the event name due to the fact that attributes are case-insensitive in HTML. ``` * The `htmx.makeFragment()` method now **always** returns a `DocumentFragment` rather than either an `Element` or `DocumentFragment` * If you are an extension author and your extension was using `selectAndSwap` method from internal API, it was removed and replaced with `swap` method, which is available from both internal and public htmx APIs To do a swap using new method, you need to simply use ```js let content = "