HTMX: HTML-first web development framework

HTMX là gì? HTML-first web development framework

Trong kỷ nguyên React, Vue, Svelte, developer đã quen “JavaScript là chủ, HTML là phụ” — bundle 200KB+ JS chỉ để render một dynamic list. HTMX đưa triết lý ngược lại: HTML là giao diện chính, JS chỉ là enhancement. Thư viện 14KB (gzipped) cho phép bạn tạo hypermedia-driven apps chỉ với HTML attributes, không cần build tool, không cần virtual DOM, không cần client-side routing.

HTMX ra đời năm 2020 do Carson Gross phát triển, tác giả của Intercooler.js (phiên bản tiền nhiệm). Hiện đang được adopt bởi các team muốn đơn giản hóa stack: Django, Rails, Phoenix, Go templates.

Cách HTMX hoạt động: hypermedia over complex APIs

REST API trả JSON → frontend JS render HTML. HTMX đổi hướng: server trả trực tiếp HTML partials, client chỉ swap DOM fragment. Ví dụ:



Khi click button, HTMX gửi POST request, server trả HTML partial (một

  • hoặc
    ), HTMX chèn vào #task-list. Không cần fetch(), không cần innerHTML, không cần state management.

    Cơ chế này hoạt động bằng cách sử dụng hypermedia như engine của ứng dụng. Thay vì server trả về JSON và client phải render lại UI, server trả về HTML fragment đã render sẵn. HTMX intercept các click, form submit, và thay thế chúng bằng AJAX request, sau đó swap kết quả vào DOM. Điều này loại bỏ hoàn toàn nhu cầu về client-side template rendering.

    HTMX sử dụng các HTML attributes đặc biệt như hx-get, hx-post, hx-put, hx-delete để định nghĩa hành vi AJAX. Attributes hx-target và hx-swap điều khiển kết quả được chèn vào đâu và cách nào. Hệ thống attribute này tạo nên một declarative API hoàn toàn trong HTML, giúp developer dễ dàng hiểu và bảo trì code mà không cần nhảy qua lại giữa template và JavaScript logic.

    HTMX request flow diagram showing button click to POST request to HTML partial response to DOM swap
    HTMX request flow: button click → POST request → HTML partial response → DOM swap

    Extensions: htmx-ext

    HTMX core đủ cho 80% use cases. Phần 20% còn lại có thể xử lý bằng htmx-extensions:

    • ws: WebSocket support cho real-time updates.
    • sse: Server-Sent Events cho streaming.
    • loading-states: CSS class tự động thêm khi request pending.
    • preload: Prefetch links khi hover.

    Extensions cài đặt như attribute bình thường: . Không cần build, không cần npm install.

    So sánh HTMX với React, Vue, LiveView

    Tiêu chí HTMX React Phoenix LiveView
    Client JS bundle 14KB (core) 40KB+ (React + ReactDOM) 0KB (server-driven)
    Build tool Không cần Bắt buộc (Vite, webpack) Không cần (Elixir only)
    State management HTML attributes Redux, Zustand, Jotai… Server process state
    SSR Mặc định (server render) Cần Next.js, Remix Mặc định
    Real-time Extensions (ws, sse) React Query, Socket.io Built-in (channels)
    Learning curve Thấp (1-2 ngày) Trung bình Cao (Elixir + OTP)

    Sự khác biệt cốt lõi là HTMX xem HTML là format truyền tải state, trong khi React/Vue xem HTML là output của JavaScript. Với HTMX, state sống trên server (HTML được render từ server), client chỉ hiển thị và gửi user actions. Điều này đơn giản hóa mental model: không có two-way binding, không có virtual DOM diffing, không có hydration mismatch.

    Code editor showing HTMX HTML attributes in VS Code
    Code editor showing HTMX HTML attributes in VS Code

    Khi nào dùng HTMX?

    HTMX phù hợp nhất với:

    • CRUD apps: Admin dashboard, internal tools, CMS — phần lớn là form và table.
    • Legacy migration: Server-rendered app cần thêm interactivity mà không rewrite toàn bộ sang SPA.
    • Small team, big product: Một backend developer có thể handle cả server + UI.

    HTMX không phù hợp cho: game, 3D visualization, heavy canvas drawing, real-time multiplayer với state phức tạp. Những use case này vẫn cần SPA framework.

    Ví dụ thực tế: Todo app với HTMX + Go

    Server Go render template:

    func listTasks(w http.ResponseWriter, r *http.Request) {
        tasks := db.GetTasks()
        tmpl.ExecuteTemplate(w, "task_list.html", tasks)
    }

    Template task_list.html:

      {{range .}}
    • {{.Title}}
    • {{end}}

    Không cần useState, không cần useEffect, không cần npm run dev. Chỉ HTML + server.

    Khi user click nút “Xóa”, HTMX gửi DELETE request đến /tasks/{{.ID}}. Server xử lý xóa trong database và trả về empty response. HTMX nhận response và thực hiện hx-swap="outerHTML" trên element li gần nhất, loại bỏ nó khỏi DOM. Toàn bộ logic chỉ trong template HTML và handler Go, không có một dòng JavaScript nào.

    Để thêm task mới, bạn có thể dùng form với hx-post và hx-swap="afterbegin" để chèn task mới vào đầu list. Form submit sẽ được HTMX intercept, gửi qua AJAX, server tạo task mới và trả về HTML của task đó, HTMX chèn vào #task-list. User experience mượt mà như SPA nhưng code server-side hoàn toàn truyền thống.

    Kết luận

    HTMX không phải “React killer” — nó giải quyết một problem space khác. Khi bạn cần interactivity nhưng không cần heavy client-side logic, HTMX cho bạn productivity gấp 2-3 lần: không chọn framework, không config bundler, không xử lý hydration mismatch.

    Triết lý “HTML over everything” đang quay lại, không phải vì developer thích retro, mà vì HTML đã đủ mạnh cho 90% UI patterns. Còn 10% còn lại — hãy dùng đúng tool cho đúng job.

    Nguồn tham khảo: HTMX docs, Carson Gross blog, Phoenix LiveView comparison, “Hypermedia Systems” book.

  • Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

    Bài viết liên quan

    Ghostty: Terminal GPU-rendered thay thế iTerm2 và Alacritty

    Ghostty: Terminal GPU-rendered thay thế iTerm2 và Alacritty Ghostty là terminal emulator mới phát hành phiên bản 1.0 vào cuối 2024, được viết bằng Zig và sử dụng GPU rendering…

    Xem thêm

    Feather Robotics: Nền tảng robot mô-đun giá 30k USD cho developer

    Feather Robotics, khởi nghiệp humanoid do cựu kỹ sư Tesla và founder trước của 1X thành lập, đang định vị mình là “Android of robotics” — cung cấp nền tảng…

    Xem thêm

    Tauri 2.0: Ứng Dụng Desktop Rust Chạy Trên WebView Hệ Thống

    Tauri 2.0: Ứng dụng Desktop Rust chạy trên WebView hệ thống Tauri 2.0 là bản phát hành ổn định tháng 10/2024 của framework ứng dụng desktop đa nền tảng mã…

    Xem thêm
    0 0 đánh giá
    Article Rating
    Theo dõi
    Thông báo của
    guest
    0 Comments
    Cũ nhất
    Mới nhất Được bỏ phiếu nhiều nhất