---
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
Load Data
```
## Core Attributes
### Request Types
```html
Load Users
Update User
Activate User
Delete User
```
### Targeting
```html
Load
Update Row
Check
Click to Update
```
### Swap Strategies
```html
Loading...
Replace me
Remove
Trigger Action
```
### 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
Click Me
Option 1
Hover for preview
Listens for custom event
```
### Trigger Modifiers
```html
Track mouse
Initialize (only works once)
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
Home
About
```
## Form Handling
### Basic Forms
```html
```
### Including Values
```html
Filter Users
Include both inputs
With Values
Dynamic Value
```
### Form Validation
```html
```
## Out-of-Band Swaps
```html
Main content here
Notification updated!
Updated row content
```
## Indicators
```html
Load Data
Loading...
Load
...
```
## CSS Transitions
```html
Load
```
## WebSockets
```html
```
## Server-Sent Events
```html
Waiting for messages...
Refreshes on 'update' event
```
## Request Headers
```html
With Headers
```
## 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
Click Me
```
## 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