HTMX, Tolong Coba Sekali Saja
(pleasejusttryhtmx.com)- Dalam pengembangan web modern, dikotomi palsu antara HTML dan framework JavaScript besar mendorong developer ke kompleksitas yang tidak perlu
- HTMX menangani request AJAX, pembaruan parsial, dan transisi animasi hanya dengan atribut HTML, sehingga HTML yang dikembalikan server bisa langsung diterapkan ke tampilan
- Strukturnya memungkinkan adopsi bertahap tanpa perubahan besar pada codebase yang ada, mengurangi kompleksitas frontend sekaligus meningkatkan produktivitas dan kemudahan perawatan
- Dibanding SPA berbasis React, peningkatan besar pada jumlah kode, dependensi, waktu build, dan kecepatan loading telah terbukti di produksi nyata
- Dibanding memilih framework secara berlebihan, pendekatan sederhana berbasis hypermedia lebih menguntungkan untuk produktivitas dan maintainability jangka panjang
Mengangkat masalah: pilihan palsu dalam pengembangan web
- Dalam diskusi pengembangan web, yang terus diulang hanyalah pilihan ekstrem antara memakai HTML saja atau framework besar seperti React
- HTML murni kuat dalam fitur dasar seperti link, form, dan
dialog, tetapi punya keterbatasan dalam pembaruan parsial dan respons instan - Saat memilih React·Vue·Angular, yang ikut datang adalah ratusan dependensi, build lambat, dan perdebatan rumit soal state management
- Bahkan untuk app CRUD sederhana, dashboard, dan aplikasi yang berpusat pada form, kenyataannya tooling yang berlebihan tetap dipakai
Konsep inti HTMX
- HTMX adalah alat yang menambahkan atribut khusus pada elemen HTML untuk melakukan komunikasi asinkron dengan server
- Misalnya, atribut
hx-getdanhx-postmengirim request lalu menyisipkan respons ke area DOM tertentu
- Misalnya, atribut
- Diperluas sehingga setiap elemen HTML bisa menjadi pengirim request HTTP
- Server mengembalikan fragmen HTML apa adanya, bukan JSON, lalu HTML yang diterima akan diganti atau disisipkan secara otomatis ke lokasi yang ditentukan
- Perilaku didefinisikan hanya lewat deklarasi atribut HTML tanpa perlu menulis JavaScript secara langsung
- Ukuran library sekitar 14kb(gzip) sehingga sangat ringan
- Bisa langsung diterapkan ke dokumen HTML yang sudah ada tanpa build tool atau konfigurasi framework terpisah
- Strukturnya cocok dengan pendekatan pengembangan web tradisional yang berpusat pada server-side rendering
Fitur utama
- Menangani request AJAX: menjalankan request GET dan POST hanya dengan atribut HTML
- Pembaruan DOM: HTML yang dikembalikan server otomatis diterapkan ke elemen yang ditentukan
- Penanganan event: menghubungkan event pengguna seperti klik dan input dengan pemanggilan ke server
- Manajemen history: terintegrasi dengan aksi back dan forward di browser
Contoh penerapan nyata dan angkanya
- Contexte memigrasikan SaaS berbasis React ke Django + HTMX
- Total baris kode turun 67% (21,500 → 7,200)
- Dependensi JavaScript turun 96% (255 → 9)
- Waktu build berkurang 88% (40 detik → 5 detik)
- Kecepatan loading halaman meningkat 50~60%
- Dua pertiga codebase dihapus, dan aplikasinya justru menjadi lebih baik
- Tanpa pemisahan frontend dan backend, semua developer bisa bekerja full-stack
Ringkasan terhadap sanggahan yang umum
- "Bukankah perlu state management client yang kompleks?"
- Pada praktiknya, kebanyakan hanya sebatas form, list, dan elemen yang muncul saat diklik, dan itu cukup ditangani HTMX
- Untuk tool kolaborasi real-time seperti Google Docs memang pengecualian, tetapi kebanyakan orang melebih-lebihkan kompleksitas app CRUD
- "Bagaimana dengan keuntungan ekosistem React?"
- Ekosistem yang besar juga berarti node_modules berukuran gigabyte, pilihan tanpa akhir, dan debat state management
- Ekosistem HTMX selesai hanya dengan satu bahasa server-side yang dipilih
- "Bukankah SPA terasa lebih cepat?"
- Di awal, harus melewati download, parsing, eksekusi, dan hydration JavaScript berukuran besar
- HTMX cepat sejak loading awal, dan setelah itu juga menjaga respons cepat dengan hanya mengganti bagian yang berubah
- "Bagaimana jika fitur React tertentu memang dibutuhkan?"
- Dalam beberapa kasus, React memang bisa lebih cocok
- Namun dalam praktiknya, sering kali orang secara kebiasaan memilih alat yang sebenarnya hanya dibutuhkan untuk sebagian kecil dari keseluruhan masalah
- Mengapa memilih HTMX?
- Tim gagal bukan karena salah framework, tetapi karena memilih framework secara berlebihan
- HTMX bertaruh pada kesederhanaan, dan dalam jangka panjang kesederhanaan memberi keuntungan pada maintainability dan produktivitas
Kapan HTMX tidak cocok
- Tool editing kolaboratif real-time (Google Docs, Figma)
- Aplikasi yang membutuhkan komputasi client berskala besar (editor video, tool CAD)
- Arsitektur offline-first (meski tentu beberapa pendekatan bisa digabungkan)
- Kasus yang benar-benar membutuhkan state UI yang kompleks
- Tetapi, apakah Anda benar-benar sedang membangun hal seperti itu?
- Bukankah yang Anda buat sebenarnya hanya dashboard lain, panel admin, situs e-commerce, blog, atau app SaaS yang terdiri dari form, tabel, dan daftar?
- Untuk hal-hal seperti itu, HTMX benar-benar sangat bagus, sampai membuat Anda ingin berkata: "Kenapa dulu dibuat serumit ini?" dan "Ya ampun, selama ini terlalu banyak waktu terbuang"
Jadi, cobalah sekali
- Anda sudah pernah memakai React, pernah memakai Vue, dan mungkin pernah mencoba Angular lalu menyesal, bukan?
- Bahkan meta-framework yang sedang tren minggu ini di Hacker News pun mungkin sudah sempat Anda sentuh
- Coba saja HTMX sekali
- Luangkan sekitar satu hari di akhir pekan
- Pilih satu side project
- Atau pilih internal tool yang tidak terlalu diperhatikan siapa pun
- Atau keluarkan lagi sesuatu yang sudah lama Anda tunda untuk dibuat ulang
- Tambahkan satu tag
<script>dan tulis satu atributhx-get, lalu lihat sendiri bagaimana ia bekerja - Dalam skenario terburuk, Anda hanya kehilangan satu hari di akhir pekan, jadi risikonya tidak besar
- Tetapi kemungkinan besar Anda tidak akan membencinya
- Malah bisa jadi Anda akan bertanya-tanya kenapa pengembangan web sampai dibuat serumit ini
8 komentar
Saya pernah mendengar presentasi terkait ini di PyCon, dan saya ingat pembicaranya juga mengatakan bahwa mereka sendiri belum sempat menggunakannya di pekerjaan nyata.
Rust, tolong coba sekali saja?
Saya pernah mencoba Alpine.js, dan sebagian besar waktu saya tetap membutuhkan manajemen state...
Kalau sejak awal tidak dirancang agar state dikelola di backend, saya ingat cukup merepotkan untuk menangani state per langkah, state kondisional, dan semacamnya.
Saya setuju dengan semua yang dikatakan, tapi entah kenapa saya tetap tidak tertarik memakai htmx :(
Opini Hacker News
Saya adalah pencipta htmx. Saya berterima kasih karena mendapat perhatian berkat artikel yang berlebihan seperti ini, tetapi saya sebenarnya tidak terlalu suka hype seperti ini
Ada banyak cara untuk membangun web app, dan masing-masing punya kelebihan serta kekurangan. Saya merangkum kekuatan dan kelemahan htmx di tulisan ini
Saya juga sangat merekomendasikan untuk mencoba Unpoly, library berorientasi hypermedia lain yang sangat bagus
(Tambahan) Setelah melihat lagi isi artikelnya, ternyata lebih bagus dari yang saya kira. Meski begitu, saya tetap berharap htmx dibahas dengan nada yang lebih tenang
Memperbarui field lewat dropdown, membuat modal, kotak pencarian autocomplete, semuanya sederhana
Namun, kompleksitas frontend RIA ada pada bagaimana frontend diperbarui saat data berubah.
Akan lebih baik jika ada sedikit penyesuaian di backend dan struktur yang bisa menangani beberapa partial update sekaligus
Saat ini saya mengerjakan side project dengan Rails + Stimulus, dan Stimulus justru terasa berlebihan. Saya penasaran kapan sebaiknya memilih Inertia atau Stimulus
Ini adalah plugin Alpine.js yang menambahkan fungsi AJAX dasar ke tautan dan form
Saya lelah dengan tulisan yang mengklaim lebih baik dari React hanya lewat contoh “Hello World”
Pada contoh sederhana, apa pun akan terlihat bagus. Namun di dunia nyata, kebanyakan kasus punya backend dengan banyak dependency dan UI yang kompleks
Demo dasar memang bagus, tetapi harus ditunjukkan juga bagaimana ia bisa berkembang ketika fitur yang lebih kompleks ditambahkan
Orang ingin tahu di mana harus menambahkan JS, apakah perlu build step, dan seberapa terikat pada paradigma htmx
Ini bukan soal lebih baik dari React, melainkan hanya pendekatan lain
Paradigma mengganti sebagian DOM sangat sederhana dan intuitif
Contoh: effect-ts memang kuat, tetapi bahkan output sederhana pun rumit
Startup kami sempat mengadopsi HTMX, tetapi akhirnya sedang beralih ke React
HTMX punya kompleksitas tinggi dalam menangani respons, dan setiap endpoint harus mengembalikan beberapa potongan HTML
Dokumentasi serta contoh kasusnya kurang, dan juga belum ada best practice skala besar.
React lebih matang, dan juga lebih cocok dengan AI coding. HTMX cocok untuk proyek sederhana, tetapi sulit untuk lebih dari itu
Setiap endpoint hanya menjalankan satu peran, dan dengan Optimistic UI respons bisa langsung terasa
Penanganan error dibuat sederhana, dan
hx-swap-oobdigunakan seminimal mungkinInti dari pemilihan teknologi adalah meminimalkan trade-off
Karena itu saya menempatkan validasi yang berpusat di backend, dan frontend hanya bertugas menampilkan
Saya tidak menginginkan SSR. Backend cukup menyediakan JSON API, dan frontend mengonsumsinya
Saya menganggap SSR itu terlalu dibesar-besarkan. Rasanya seperti strategi untuk mendorong penjualan layanan cloud
Contoh Demo 3 Live Search punya masalah scroll jank yang cukup parah.
Hasilnya tampaknya disisipkan langsung ke dalam dokumen sehingga layout terus dihitung ulang
React sebenarnya sudah cukup bagus. Bahkan untuk proyek sederhana pun tidak ada alasan kuat untuk mempelajari paradigma lain
Sebaliknya, konsep HTMX bisa dipahami dalam 15 menit, lalu tetap berguna selama 10 tahun
Secara historis, paradigma yang ringan justru menang di pasar. React pun dulu pernah seperti itu
Saya justru benar-benar jatuh cinta pada Alpine.js
Konsep enhance terhadap HTML yang dirender server terasa sangat masuk akal
Dropdown, show/hide, dan sebagainya semuanya intuitif, dan tidak memerlukan build step
Intuitif dan mudah dikelola bahkan pada proyek besar
Jika JS ditaruh inline di HTML, pemeliharaan jadi sulit dan state management pun menjadi implisit
Rasanya Hotwire atau Stimulus jauh lebih baik untuk skala organisasi
Jika HTMX dipakai pada aplikasi berskala besar, saya penasaran soal beban server dan biaya
Karena HTML dirender di server, rasanya throughput akan lebih besar dibanding JSON
Kadang malah lebih efisien daripada serialisasi JSON, dan di sisi klien juga ada biaya deserialisasi
HTMX juga bisa dipakai bersama alat seperti Alpine.js agar state yang kompleks tetap mudah ditangani
Ini memang tidak cocok untuk semua situasi, tetapi sangat bekerja dengan baik dalam banyak kasus
Menginjili framework adalah budaya terburuk dalam ekosistem web
Kalau memang solusi itu bagus, pada akhirnya orang akan mengadopsinya. Tidak perlu bertindak seperti penginjil
Serangan terhadap npm juga dibesar-besarkan. htmx pada akhirnya juga tetap bisa memakai npm
Di dunia ini ada banyak solusi buruk yang diadopsi karena marketing dan pengenalan merek
Kalau ingin menjaga craftsmanship yang sejati, kita harus melawan bias seperti ini
HTMX terlihat seperti menggabungkan kekurangan dari dua dunia
SSR itu kohesif, CSR itu strukturnya terpisah, sedangkan HTMX mencampur keduanya sehingga muncul keterikatan implisit
Jika data yang sama ingin ditampilkan dalam format berbeda, saya bertanya-tanya apakah backend harus membuat dua endpoint
Sebagian besar aplikasi cukup dengan state backend, dan selain peningkatan UX, tidak banyak manfaat besarnya
Jika seluruh halaman disusun di server, datanya sudah ada di dalamnya
Tahun lalu saya pernah membuat presentasi seperti ini. Tapi sepertinya hampir tidak ada yang mendengarkannya^^
https://www.slideshare.net/slideshow/htmx-2024/274315966
Di level PoC, saya juga pernah membuat hal seperti ini
https://github.com/iolo/hx
Tapi tetap saja tidak ada yang memakai htmx hehe
Sayang sekali, setelah situasi yang sudah telanjur terasa nyaman dan ekosistem berskala besar yang sudah terbentuk sebanyak itu, semuanya jadi mengakar dan tampaknya tidak ada lagi dorongan untuk berinovasi.
Slide-nya menarik ya, sayang saya tidak sempat menonton presentasinya hehe