HTMX, कृपया इसे कम-से-कम एक बार आज़माइए
(pleasejusttryhtmx.com)- आधुनिक web development में HTML और बड़े JavaScript frameworks के बीच एक झूठी द्विआधारी पसंद ने डेवलपर्स को बेवजह की जटिलता में धकेल दिया है
- HTMX सिर्फ HTML attributes से AJAX requests, partial updates, और animation transitions को संभालता है, जिससे server से लौटे HTML को सीधे स्क्रीन पर लागू किया जा सकता है
- इसे मौजूदा codebase में बड़े बदलाव के बिना धीरे-धीरे अपनाया जा सकता है, जिससे frontend की जटिलता घटती है और productivity और maintainability बढ़ती है
- React-आधारित SPA की तुलना में code volume, dependencies, build time, और loading speed में बड़े सुधार के उदाहरण वास्तविक production में देखे गए हैं
- ज़रूरत से ज़्यादा framework चुनने के बजाय सरल hypermedia-आधारित approach लंबे समय में productivity और maintainability के लिए अधिक फायदेमंद है
समस्या: web development में झूठे विकल्प
- web development की चर्चाओं में बार-बार सिर्फ दो चरम विकल्प सामने आते हैं: या तो केवल HTML, या React जैसे बड़े frameworks
- शुद्ध HTML में links, forms,
dialogजैसी बुनियादी क्षमताएँ मजबूत हैं, लेकिन partial updates और तुरंत responsiveness में इसकी सीमाएँ हैं - React·Vue·Angular चुनते ही सैकड़ों dependencies, धीमे builds, और जटिल state management की बहस शुरू हो जाती है
- साधारण CRUD·dashboard·form-केंद्रित apps पर भी हद से ज़्यादा भारी toolchain लागू कर दी जाती है
HTMX की मुख्य अवधारणा
- HTMX एक ऐसा tool है जो HTML elements में विशेष attributes जोड़कर server के साथ asynchronous communication करता है
- उदाहरण के लिए,
hx-get,hx-postattributes के जरिए request भेजी जाती है और response को किसी खास DOM क्षेत्र में डाला जाता है
- उदाहरण के लिए,
- यह हर HTML element को HTTP request का स्रोत बनने के लिए विस्तार देता है
- server JSON के बजाय सीधे HTML fragments लौटाता है, और लौटे HTML को तय की गई जगह पर अपने-आप replace या insert किया जाता है
- JavaScript सीधे लिखे बिना सिर्फ HTML attributes की declaration से behavior परिभाषित किया जा सकता है
- library का आकार लगभग 14kb(gzip) है, यानी बहुत हल्का
- अलग build tools या framework configuration के बिना मौजूदा HTML document में सीधे लागू किया जा सकता है
- यह server-rendering केंद्रित पारंपरिक web development शैली के साथ अच्छी तरह मेल खाता है
मुख्य सुविधाएँ
- AJAX request handling: केवल HTML attributes से GET, POST requests चलाना
- DOM update: server से लौटे HTML को तय किए गए element में अपने-आप लागू करना
- Event handling: click, input जैसी user events के आधार पर server calls जोड़ना
- History management: browser के back और forward व्यवहार के साथ एकीकरण
वास्तविक उपयोग के उदाहरण और आँकड़े
- Contexte ने React-आधारित SaaS को Django + HTMX में बदला
- कुल lines of code में 67% कमी (21,500 → 7,200)
- JavaScript dependencies में 96% कमी (255 → 9)
- build time में 88% कमी (40 सेकंड → 5 सेकंड)
- page loading speed में 50~60% सुधार
- codebase का दो-तिहाई हटा दिया गया, और app बेहतर हो गया
- frontend और backend को अलग किए बिना सभी developers full-stack काम कर सके
आम आपत्तियों का जवाब
- "क्या जटिल client-side state management की ज़रूरत नहीं पड़ेगी?"
- वास्तव में, ज़्यादातर मामलों में बात सिर्फ forms, lists, और click पर दिखने वाले elements तक सीमित होती है, जिन्हें HTMX से पर्याप्त रूप से संभाला जा सकता है
- Google Docs जैसे real-time collaborative tools अपवाद हैं, लेकिन अधिकांश लोग CRUD apps की ज़रूरतों को बढ़ा-चढ़ाकर आँकते हैं
- "React ecosystem के फायदे का क्या?"
- विशाल ecosystem अक्सर कई GB के node_modules, अंतहीन विकल्पों, और state management बहसों तक ले जाता है
- HTMX का ecosystem बस आपकी चुनी हुई एक server-side language तक सीमित है
- "क्या SPA अनुभवजन्य रूप से तेज़ नहीं लगता?"
- शुरुआत में बड़ी JavaScript files को download, parse, execute, और hydrate करना पड़ता है
- HTMX शुरुआत से तेज़ होता है, और बाद में भी सिर्फ बदले हुए हिस्से को replace करके response speed बनाए रखता है
- "अगर कोई खास React feature वाकई ज़रूरी हो तो?"
- कुछ मामलों में React उपयुक्त हो सकता है
- लेकिन व्यवहार में अक्सर लोग पूरी समस्या के सिर्फ एक छोटे हिस्से के लिए ज़रूरी tool को आदतन हर जगह चुन लेते हैं
- HTMX क्यों चुनें?
- टीमें असफल गलत framework की वजह से नहीं, बल्कि frameworks की अति-चयन प्रवृत्ति की वजह से होती हैं
- HTMX सरलता पर दांव लगाता है, और लंबे समय में यही सरलता maintainability और productivity में लाभ देती है
जहाँ HTMX उपयुक्त नहीं है
- real-time collaborative editing tools (Google Docs, Figma)
- ऐसे applications जिन्हें बड़े पैमाने पर client-side computation चाहिए (video editors, CAD tools)
- offline-first architecture (हालाँकि कई approaches को मिलाया जा सकता है)
- ऐसे मामले जहाँ UI state सचमुच बहुत जटिल हो
- लेकिन, क्या आप सच में वही बना रहे हैं?
- या आप बस forms, tables, और lists से बना एक और dashboard, admin panel, e-commerce site, blog, या SaaS app बना रहे हैं?
- ऐसी चीज़ों के लिए HTMX सचमुच हैरान कर देने जितना बढ़िया है — इतना कि मन करे कहें, "इसे इतना जटिल क्यों बनाया था?" और "हे भगवान, मैंने अब तक कितना समय बर्बाद किया"
तो, एक बार इसे आज़माइए
- React भी इस्तेमाल किया है, Vue भी, और Angular इस्तेमाल करके पछतावा भी किया होगा, है न?
- इस हफ्ते Hacker News पर चल रहा कोई meta-framework भी शायद आप पहले ही छू चुके होंगे
- HTMX को बस एक बार आज़माइए
- वीकेंड का एक दिन लगाइए
- कोई side project चुनिए, या
- कोई ऐसा internal tool उठाइए जिसकी किसी को बहुत परवाह न हो, या
- कुछ ऐसा निकालिए जिसे आप लंबे समय से फिर से बनाने की सोचते रहे हों
<script>tag एक बार जोड़िए औरhx-getattribute लिखकर खुद देखिए कि यह कैसे काम करता है- सबसे बुरे हाल में आपका सिर्फ एक वीकेंड का दिन जाएगा, नुकसान बहुत बड़ा नहीं है
- लेकिन आपको यह बुरा नहीं लगेगा
- बल्कि संभव है कि आप सोचने लगें कि web development आखिर इतना जटिल बना ही क्यों दिया गया
8 टिप्पणियां
मैंने PyCon में इस पर एक संबंधित टॉक सुनी थी, और मुझे याद है कि वक्ता ने भी कहा था कि उन्होंने अभी तक इसे वास्तविक काम में इस्तेमाल नहीं किया है।
Rust, कृपया बस एक बार इस्तेमाल करके देखें?
मैंने Alpine.js आज़माया है, लेकिन ज़्यादातर मामलों में state management की ज़रूरत पड़ी...
अगर शुरू से ही backend में state manage करने के लिए डिज़ाइन न किया जाए, तो step-by-step state, conditional state वगैरह को संभालना काफ़ी सिरदर्द लगता था—ऐसा मुझे याद है।
मैं हर बात से सहमत हूँ, लेकिन htmx की तरफ़ हाथ ही नहीं बढ़ता :(
Hacker News की राय
मैं htmx का निर्माता हूँ। बढ़ा-चढ़ाकर लिखे गए लेख की वजह से ध्यान मिल रहा है, इसके लिए आभारी हूँ, लेकिन इस तरह का हाइप मुझे खास पसंद नहीं है
वेबऐप बनाने के कई तरीके हैं और हर एक के अपने फायदे-नुकसान हैं। htmx की ताकत और कमजोरियाँ मैंने इस लेख में समेटी हैं
एक और शानदार hypermedia-oriented library Unpoly भी ज़रूर आज़माने लायक है
(जोड़) लेख को फिर से देखा तो वह उम्मीद से बेहतर लगा। फिर भी चाहूँगा कि htmx पर थोड़ा और संयत माहौल में बात हो
dropdown से field update करना, modal बनाना, autocomplete search box — सब आसान है
लेकिन RIA frontend की जटिलता असल में इस बात में होती है कि data बदलने पर frontend को कैसे update किया जाए।
backend में कुछ समायोजन चाहिए होते हैं, और अगर कई partial updates को साथ संभालने वाली संरचना हो तो और अच्छा रहता है
मैं इस समय Rails + Stimulus के साथ side project कर रहा हूँ, और Stimulus थोड़ा ज़्यादा भारी लग रहा है। Inertia या Stimulus कब चुनना चाहिए, यह जानना चाहता हूँ
यह Alpine.js plugin है जो links और forms में बुनियादी AJAX functionality जोड़ देता है
उन लेखों से थक गया हूँ जो “Hello World” उदाहरण लेकर कहते हैं कि यह React से बेहतर है
साधारण उदाहरणों में तो कुछ भी अच्छा चलता है। लेकिन असल दुनिया में ज़्यादातर backend में dependencies बहुत होती हैं और UI भी जटिल होता है
बुनियादी demo अच्छे हैं, लेकिन यह भी दिखना चाहिए कि ज़्यादा जटिल feature जोड़ते समय इसे कैसे बढ़ाया जा सकता है
JS कहाँ जोड़ेंगे, build step चाहिए या नहीं, और htmx के paradigm से कितनी बंधनकारी स्थिति बनेगी — यह जानना चाहूँगा
यह React से बेहतर होने की बात नहीं, बल्कि एक दूसरा approach है
DOM के हिस्से बदलने वाला paradigm बहुत सरल और सहज है
उदाहरण: effect-ts ताकतवर है, लेकिन साधारण output तक जटिल है
हमारे startup ने HTMX अपनाया था, लेकिन अब आखिरकार React पर migrate कर रहे हैं
HTMX में response handling की complexity ज़्यादा है, और हर endpoint को कई HTML fragments लौटाने पड़ते हैं
documentation और उदाहरण कम हैं, और बड़े पैमाने की best practices भी नहीं हैं।
React mature है, और AI coding के साथ इसका मेल भी अच्छा है। HTMX छोटे प्रोजेक्ट्स के लिए ठीक है, लेकिन उससे आगे मुश्किल लगता है
हर endpoint सिर्फ एक काम करता है, और Optimistic UI से तुरंत प्रतिक्रिया मिलती है
error handling को सरल रखता हूँ,
hx-swap-oobका इस्तेमाल न्यूनतम करता हूँtechnology चुनने का मूल बिंदु trade-offs को कम से कम करना है
इसलिए मैं backend-centered validation रखता हूँ, और frontend को सिर्फ display की भूमिका देता हूँ
मुझे SSR नहीं चाहिए। backend सिर्फ JSON API दे, और frontend उसे consume करे
SSR एक overhyped अवधारणा है। यह cloud services बेचने की दिशा में धकेलने वाली रणनीति जैसा लगता है
Demo 3 Live Search उदाहरण में scroll jank की समस्या काफ़ी गंभीर है।
नतीजे सीधे document में insert हो रहे हैं, इसलिए लगता है layout बार-बार recalculate हो रहा है
React काफ़ी ठीक है। साधारण projects में भी कोई दूसरी paradigm सीखने की खास वजह नहीं है
जबकि HTMX में 15 मिनट में concept समझ सकते हैं, और 10 साल तक काम में ला सकते हैं
इतिहास बताता है कि हल्के paradigms ही बाज़ार में जीतते हैं। React भी कभी ऐसा ही था
मैं HTMX नहीं बल्कि Alpine.js पर पूरी तरह फ़िदा हो गया हूँ
server-rendered HTML को enhance करने का विचार बहुत सही लगा
dropdown, show/hide जैसी चीज़ें सब सहज हैं और build step की ज़रूरत नहीं पड़ती
यह सहज है और बड़े projects में भी manage करना आसान है
HTML में inline JS डालते-दालते maintenance मुश्किल हो जाती है, और state management भी implicit हो जाता है
Hotwire या Stimulus संगठन के पैमाने पर कहीं बेहतर लगते हैं
बड़े apps में HTMX इस्तेमाल करने पर server load और cost को लेकर जिज्ञासा है
चूँकि HTML server पर render होता है, इसलिए JSON की तुलना में processing ज़्यादा लगती होगी
कई बार यह JSON serialization से भी ज़्यादा efficient होती है, और client पर deserialization की cost भी होती है
HTMX, Alpine.js जैसे tools के साथ मिलकर, जटिल state भी आसानी से संभाल सकता है
यह हर स्थिति के लिए नहीं है, लेकिन कई मामलों में बहुत अच्छा काम करता है
framework evangelism वेब ecosystem की सबसे खराब संस्कृति है
अगर कोई solution सच में अच्छा है, तो उसे अपनाया ही जाएगा। उसके लिए प्रचारक जैसा व्यवहार करने की ज़रूरत नहीं है
npm हमलों की बात भी बढ़ा-चढ़ाकर कही जाती है। htmx भी आखिर npm का इस्तेमाल कर सकता है
दुनिया में marketing और visibility के बल पर अपनाए गए बहुत से खराब solutions हैं
अगर असली craftsmanship बचानी है, तो ऐसे biases का सामना करना होगा
HTMX मुझे दोनों दुनियाओं की कमियाँ जोड़ देने जैसा लगता है
SSR में cohesion होता है, CSR में separation, लेकिन HTMX दोनों को मिलाकर implicit coupling पैदा करता है
अगर उसी data को दूसरे format में दिखाना हो, तो क्या backend पर दो endpoints बनाने पड़ेंगे — यह सवाल है
ज़्यादातर apps में backend state ही काफ़ी होती है, और UX सुधार के अलावा बड़ा फ़ायदा नहीं मिलता
अगर पूरा page server से compose हो रहा है, तो data पहले से उसी में मौजूद होता है
पिछले साल मैंने ऐसा एक प्रेज़ेंटेशन किया था। सुनने वाले ज़्यादा नहीं थे^^
https://www.slideshare.net/slideshow/htmx-2024/274315966
PoC स्तर पर मैंने ऐसा कुछ भी बनाया था
https://github.com/iolo/hx
लेकिन कोई भी htmx का इस्तेमाल नहीं करता, हाहा
यह अफ़सोस की बात है कि एक बार हालात परिचित हो जाने और उसके अनुरूप इतना बड़ा ecosystem बन जाने के बाद चीज़ें जड़ हो गई हैं, और अब innovation की दिशा में कोई हलचल नज़र नहीं आती।
स्लाइड्स मज़ेदार हैं, प्रेज़ेंटेशन नहीं देख पाया इसलिए अफ़सोस है हाहा