htmx-knowledge-patch

Installation
SKILL.md

htmx Knowledge Patch

Claude Opus 4.6 knows htmx through 1.9.x (hx-get/post/put/patch/delete, hx-trigger, hx-target, hx-swap, hx-boost, hx-push-url, hx-select, hx-vals, hx-headers, hx-confirm, hx-indicator, hx-swap-oob, hx-on:, hx-ext, SSE/WebSocket extensions). It is unaware of the features below.

Index

Topic Reference Key features
htmx 2.0 changes references/htmx2-changes.md DELETE query params, selfRequestsOnly, extensions repo, hx-on removal, htmx.swap()
Attributes & inheritance references/attributes-and-inheritance.md :inherited suffix, :append, hx-action, hx-method, hx-config, hx-ignore, hx-validate, hx-status, attribute renames/removals
Responses & swapping references/responses-and-swapping.md Error responses swap by default, <hx-partial>, innerMorph/outerMorph/textContent/delete swap styles, OOB order change
Events, extensions & API references/events-extensions-api.md htmx:phase:action event naming, htmx.registerExtension(), header changes, JS method changes, config renames, history changes, compat extension

Quick Reference: htmx 2.0 Breaking Changes

Change Details
DELETE body Query params instead of form-encoded body. Revert: htmx.methodsThatUseUrlParams = ['get']
Self-requests only htmx.config.selfRequestsOnly defaults true
Scroll behavior htmx.config.scrollBehavior defaults 'instant' (was 'smooth')
Extensions Moved to extensions.htmx.org; hx-sse/hx-ws attributes removed (use extensions)
hx-on removed Use hx-on: prefix syntax only
htmx.swap() New public API replacing internal selectAndSwap()

Quick Reference: htmx 4.0 Migration

Attribute Renames (do BEFORE upgrading)

htmx 2.x htmx 4.0 Purpose
hx-disable hx-ignore Skip htmx processing on element
hx-disabled-elt hx-disable Disable form elements during requests

Removed Attributes

hx-vars → use hx-vals with js: prefix | hx-params → use htmx:config:request event | hx-prompt → use hx-confirm with js: prefix | hx-ext → include extension script directly | hx-disinherit/hx-inherit → not needed | hx-request → use hx-config | hx-history/hx-history-elt → removed

Event Renames (htmx 4.0)

htmx 2.x htmx 4.0
htmx:beforeRequest htmx:before:request
htmx:afterSwap htmx:after:swap
htmx:configRequest htmx:config:request
htmx:afterProcessNode / htmx:load htmx:after:init
htmx:responseError / htmx:sendError / htmx:timeout htmx:error

Header Changes

htmx 2.x htmx 4.0
HX-Trigger (request) HX-Source (format: tagName#id)
HX-Trigger-Name Removed
New: HX-Request-Type ("full" or "partial")
New: explicit Accept: text/html
HX-Trigger-After-Swap (response) Removed, use HX-Trigger
HX-Trigger-After-Settle (response) Removed, use HX-Trigger

Config Renames

htmx 2.x htmx 4.0
defaultSwapStyle defaultSwap
globalViewTransitions transitions
historyEnabled history
timeout defaultTimeout (default 60s)
includeIndicatorStyles includeIndicatorCSS

Explicit Inheritance (htmx 4.0)

Attributes no longer inherit down the DOM implicitly. Use :inherited suffix:

<div hx-confirm:inherited="Are you sure?">
  <button hx-delete="/item/1">Delete</button>
</div>

Use :append to add to an inherited value:

<div hx-include:inherited="#global-fields">
    <form hx-include:inherited:append=".extra">...</form>
</div>

Revert: htmx.config.implicitInheritance = true


<hx-partial> Multi-Target Updates (htmx 4.0)

New element for explicit multi-target responses (alternative to hx-swap-oob):

<!-- Server response -->
<hx-partial hx-target="#messages" hx-swap="beforeend">
  <div>New message</div>
</hx-partial>
<hx-partial hx-target="#count">
  <span>5</span>
</hx-partial>
<form id="my-form"><!-- main content --></form>

Template-friendly alternative: <template hx type="partial" hx-target="..." hx-swap="...">


hx-status Per-Status-Code Behavior (htmx 4.0)

<form
  hx-post="/save"
  hx-status:422="swap:innerHTML target:#errors select:#validation-errors"
  hx-status:5xx="swap:none push:false"
></form>

Keys: swap:, target:, select:, push:, replace:, transition:. Supports wildcards (5xx, 50x).


New Swap Styles (htmx 4.0)

Swap style Description
innerMorph Morph using idiomorph algorithm (preserves state)
outerMorph Outer morph with idiomorph
textContent Set text content (no HTML parsing)
delete Remove the target element
before Alias for beforebegin
after Alias for afterend
prepend Alias for afterbegin
append Alias for beforeend

Extension API (htmx 4.0)

htmx.defineExtension()htmx.registerExtension(). Event-hook based, no hx-ext needed:

htmx.registerExtension("my-ext", {
    init: (internalAPI) => { /* called once */ },
    htmx_before_request: (elt, detail) => {
        // return false to cancel
    },
    htmx_after_request: (elt, detail) => {},
    handle_swap: (swapStyle, target, fragment, swapSpec) => {
        // return true if handled
    },
});

Extensions load by including the script. Optionally restrict:

<meta name="htmx-config" content='{"extensions": "sse,ws"}'>

Compatibility Extension

Load htmx-2-compat for gradual migration from htmx 2.x to 4.0:

<script src="/path/to/htmx.js"></script>
<script src="/path/to/ext/htmx-2-compat.js"></script>

Restores implicit inheritance, old event names, and previous error-swapping defaults.

Related skills
Installs
2
GitHub Stars
19
First Seen
Apr 7, 2026