--- name: htmx description: Adds AJAX, CSS Transitions, WebSockets, and Server Sent Events to HTML using attributes. Use when building hypermedia-driven applications, adding interactivity without JavaScript frameworks, or when user mentions HTMX, hx-boost, or HTML-first development. --- # HTMX High-power tools for HTML - access AJAX, CSS Transitions, WebSockets and Server Sent Events directly from HTML. ## Quick Start ```html
``` ## Core Attributes ### Request Types ```html
``` ### Targeting ```html
``` ### Swap Strategies ```html
Loading...
Replace me
``` ### Swap Modifiers ```html
Fades out, waits 500ms, then swaps
Swaps, then waits 300ms before settling
Scrolls to top after swap
Shows bottom of element
Prevents scroll to focused input
Uses View Transitions API
``` ## Triggers ### Event Triggers ```html
Hover for preview
Listens for custom event
``` ### Trigger Modifiers ```html
Track mouse
Results appear here
Multiple triggers
Auto-refreshes every 5 seconds
Loads on page load
Loads when scrolled into view
Loads when 50% visible
``` ## hx-boost ```html
Page 1 Page 2
External Link
``` ## Form Handling ### Basic Forms ```html
``` ### Including Values ```html
``` ### Form Validation ```html
Loading...
``` ## Out-of-Band Swaps ```html
Main content here
Notification updated!
Updated row content ``` ## Indicators ```html Loading...
...
``` ## CSS Transitions ```html
``` ## WebSockets ```html
``` ## Server-Sent Events ```html
Waiting for messages...
Refreshes on 'update' event
``` ## Request Headers ```html ``` ## Response Headers ```python # Server can control htmx behavior via headers # Redirect response.headers['HX-Redirect'] = '/new-page' # Refresh page response.headers['HX-Refresh'] = 'true' # Push URL to history response.headers['HX-Push-Url'] = '/new-url' # Replace URL without history response.headers['HX-Replace-Url'] = '/new-url' # Retarget the swap response.headers['HX-Retarget'] = '#other-element' # Change swap strategy response.headers['HX-Reswap'] = 'outerHTML' # Trigger client-side events response.headers['HX-Trigger'] = 'myEvent' response.headers['HX-Trigger'] = '{"myEvent": {"key": "value"}}' # Trigger after settle response.headers['HX-Trigger-After-Settle'] = 'settled' # Trigger after swap response.headers['HX-Trigger-After-Swap'] = 'swapped' ``` ## Events ```javascript // Listen for htmx events document.body.addEventListener('htmx:beforeRequest', function(evt) { console.log('Request starting:', evt.detail); }); document.body.addEventListener('htmx:afterSwap', function(evt) { console.log('Swap complete:', evt.detail); }); document.body.addEventListener('htmx:responseError', function(evt) { console.error('Request failed:', evt.detail); }); // Common events: // htmx:configRequest - modify request before sending // htmx:beforeRequest - request about to be made // htmx:afterRequest - request completed // htmx:beforeSwap - about to swap content // htmx:afterSwap - swap completed // htmx:afterSettle - settling completed // htmx:responseError - non-2xx response // htmx:sendError - network error ``` ## Configuration ```html ``` ## Extensions ```html
``` ## Preserve Elements ```html
``` ## Reference Files - [patterns.md](references/patterns.md) - Common HTMX patterns and recipes - [server-integration.md](references/server-integration.md) - Backend integration examples