
HTMX là thư viện JavaScript mã nguồn mở mở rộng HTML bằng các thuộc tính tùy chỉnh, cho phép sử dụng AJAX, CSS Transitions, WebSocket và Server-Sent Events trực tiếp trong markup mà không cần viết JavaScript riêng. Đây là giải pháp giúp lập trình viên xây dựng giao diện web hiện đại với độ phức tạp thấp hơn đáng kể so với React, Vue hay Angular.

HTMX là gì?
HTMX được tạo ra bởi Carson Gross, là phiên bản kế thừa của intercooler.js. Thư viện này hoạt động theo nguyên lý Hypermedia-Driven Application — mở rộng khả năng của HTML thuần túy để xử lý các tương tác mà trước đây buộc phải dùng JavaScript.
Với kích thước chỉ khoảng 16KB min+gzip và hoàn toàn không có dependency, HTMX giúp giảm kích thước codebase tới 67% so với React. Thư viện hiện tại đã ra mắt phiên bản 4.0 và đang được sử dụng rộng rãi trong nhiều dự án production.
Cách HTMX hoạt động
Thay vì chỉ có thể gán yêu cầu HTTP cho thẻ <a> và <form>, HTMX mở rộng điều này cho mọi phần tử HTML. Chỉ cần thêm thuộc tính đặc biệt vào element, bạn có thể:
- Gọi HTTP request từ mọi element: button, div, span, thậm chí cả header đều có thể trigger request
- Sử dụng mọi HTTP verb: GET, POST, PUT, PATCH, DELETE — không chỉ GET và POST
- Trigger từ mọi event: click, submit, blur, keyup, intersect và cả server events
- Cập nhật mọi element: Response HTML có thể thay thế bất kỳ phần tử nào trong DOM, không chỉ toàn bộ trang

Ví dụ thực tế
Để tạo một nút gửi POST request qua AJAX, bạn chỉ cần vài dòng HTML:
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/htmx.min.js"></script>
<button hx-post="/clicked" hx-swap="outerHTML">Click Me</button>
Khi người dùng click vào nút, htmx tự động gửi POST request đến /clicked và thay thế toàn bộ nút bằng HTML trả về. Không cần viết một dòng JavaScript nào.
Các thuộc tính chính
| Thuộc tính | Chức năng |
|---|---|
hx-get |
Gửi GET request đến URL chỉ định |
hx-post |
Gửi POST request |
hx-swap |
Xác định cách thay thế nội dung (outerHTML, innerHTML, beforeend…) |
hx-target |
Chỉ định element cần cập nhật bằng CSS selector |
hx-trigger |
Xác định event nào trigger request (click, submit, load, revealed…) |
hx-indicator |
Hiển thị indicator khi request đang xử lý |
hx-confirm |
Hiển thị hộp thoại xác nhận trước khi gửi |
hx-vals |
Thêm giá trị vào request body dưới dạng JSON |
WebSocket và Server-Sent Events
HTMX hỗ trợ kết nối real-time qua WebSocket và SSE bằng các thuộc tính hx-ws và hx-sse, không cần viết JavaScript:
- hx-sse: Lắng nghe server-sent events và tự động cập nhật DOM khi có event mới
- hx-ws: Kết nối WebSocket hai chiều, hỗ trợ cả gửi và nhận dữ liệu real-time

So sánh HTMX với React và Vanilla JS
| Tiêu chí | HTMX | React | Vanilla JS |
|---|---|---|---|
| Độ phức tạp | Thấp, HTML thuần | Cao, cần JSX + state | Trung bình |
| Kích thước bundle | 16KB | 40KB+ | 0KB |
| Server response | HTML fragments | JSON | Tùy chọn |
| SEO | Tuyệt vời | Cần SSR/SSG | Tuyệt vời |
| Độ khó học | Rất thấp nếu biết HTML | Cần học JSX, hooks, state | Phức tạp cho app lớn |
| Chi phí phát triển | Thấp | Trung bình-cao | Thấp |
Ưu điểm nổi bật
- Giảm JavaScript đáng kể: Không cần state management phức tạp như Redux hay Context API. Server trả HTML, client hiển thị — không cần serialize JSON qua lại
- SEO thân thiện: Vì server trả HTML đầy đủ, crawlers đọc được toàn bộ nội dung mà không cần client-side rendering
- Tương thích mọi backend: Django, Rails, Laravel, Go, Rust — backend chỉ cần trả về HTML fragments
- CSS Transitions tích hợp: Tạo hiệu ứng animation mượt mà chỉ bằng attribute
- Quản lý lịch sử trình duyệt: HTMX xử lý history và caching thông minh tự động
- Đường cong học tập thấp: Biết HTML là biết 90% HTMX
Hạn chế và trường hợp không phù hợp
- Ứng dụng cần offline-first: HTMX phụ thuộc server responses, không phù hợp PWA cần hoạt động offline
- Giao diện tương tác cực cao: Kéo thả phức tạp, realtime collaboration cần JavaScript riêng
- Mobile native apps: HTMX chỉ chạy trên web, không đóng gói thành ứng dụng native
- Team đã quen React/Vue: Chuyển đổi có thể tốn chi phí đào tạo lại
Các backend phổ biến dùng HTMX
- Django + HTMX: Không cần Django REST Framework cho các app server-rendered
- Rails + HTMX: Alternative nhẹ hơn Hotwire/Turbo cho tương tác đơn giản
- Laravel + HTMX: Loại bỏ nhu cầu Livewire hoặc Alpine.js cho tương tác cơ bản
- Go + HTMX: Kết hợp Go templates với HTMX cho hiệu suất cực cao
Mô hình Hypermedia-Driven Application mà HTMX đề xướng đang trở lại phổ biến sau nhiều năm JavaScript framework thống trị. Với developer muốn xây dựng web apps nhanh, maintainable và performant, HTMX đáng để thử nghiệm. Phản hồi từ server chỉ cần là HTML fragments, và HTMX tự động cập nhật DOM — không cần state management phức tạp hay build pipeline nặng nề.
Một thực hành quan trọng khi dùng HTMX trong production: luôn xác thực phía server và sử dụng CSRF token cho mọi POST request, vì HTMX không tự động chặn request giả mạo. Kiểm thử các trường hợp lỗi network và timeout cũng giúp đảm bảo ứng dụng hoạt động ổn định.
