21 पॉइंट द्वारा GN⁺ 2025-12-19 | 8 टिप्पणियां | WhatsApp पर शेयर करें
  • आधुनिक 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-post attributes के जरिए 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-get attribute लिखकर खुद देखिए कि यह कैसे काम करता है
  • सबसे बुरे हाल में आपका सिर्फ एक वीकेंड का दिन जाएगा, नुकसान बहुत बड़ा नहीं है
    • लेकिन आपको यह बुरा नहीं लगेगा
    • बल्कि संभव है कि आप सोचने लगें कि web development आखिर इतना जटिल बना ही क्यों दिया गया

8 टिप्पणियां

 
ryj0902 2025-12-22

मैंने PyCon में इस पर एक संबंधित टॉक सुनी थी, और मुझे याद है कि वक्ता ने भी कहा था कि उन्होंने अभी तक इसे वास्तविक काम में इस्तेमाल नहीं किया है।

 
aer0700 2025-12-21

Rust, कृपया बस एक बार इस्तेमाल करके देखें?

 
bbulbum 2025-12-20

मैंने Alpine.js आज़माया है, लेकिन ज़्यादातर मामलों में state management की ज़रूरत पड़ी...
अगर शुरू से ही backend में state manage करने के लिए डिज़ाइन न किया जाए, तो step-by-step state, conditional state वगैरह को संभालना काफ़ी सिरदर्द लगता था—ऐसा मुझे याद है।

 
roxie 2025-12-20

मैं हर बात से सहमत हूँ, लेकिन htmx की तरफ़ हाथ ही नहीं बढ़ता :(

 
GN⁺ 2025-12-19
Hacker News की राय
  • मैं htmx का निर्माता हूँ। बढ़ा-चढ़ाकर लिखे गए लेख की वजह से ध्यान मिल रहा है, इसके लिए आभारी हूँ, लेकिन इस तरह का हाइप मुझे खास पसंद नहीं है
    वेबऐप बनाने के कई तरीके हैं और हर एक के अपने फायदे-नुकसान हैं। htmx की ताकत और कमजोरियाँ मैंने इस लेख में समेटी हैं
    एक और शानदार hypermedia-oriented library Unpoly भी ज़रूर आज़माने लायक है
    (जोड़) लेख को फिर से देखा तो वह उम्मीद से बेहतर लगा। फिर भी चाहूँगा कि htmx पर थोड़ा और संयत माहौल में बात हो

    • अगर आप 1990 के दशक के आखिर या 2000 के शुरुआती दौर की वेबऐप बनाने की शैली से परिचित हैं, तो HTMX से कम मेहनत में interactive features जोड़ना आसान है
      dropdown से field update करना, modal बनाना, autocomplete search box — सब आसान है
      लेकिन RIA frontend की जटिलता असल में इस बात में होती है कि data बदलने पर frontend को कैसे update किया जाए।
      backend में कुछ समायोजन चाहिए होते हैं, और अगर कई partial updates को साथ संभालने वाली संरचना हो तो और अच्छा रहता है
    • HTMX Sucks नाम का एक लेख भी है। दिलचस्प नज़रिया है
    • Unpoly सच में बहुत बढ़िया लग रहा है। अभी तक HTMX इस्तेमाल नहीं किया, लेकिन Django या Rails जैसे framework की UX समस्याओं को हल्के ढंग से हल करने वाली बात पसंद आई
      मैं इस समय Rails + Stimulus के साथ side project कर रहा हूँ, और Stimulus थोड़ा ज़्यादा भारी लग रहा है। Inertia या Stimulus कब चुनना चाहिए, यह जानना चाहता हूँ
    • जानकारी के लिए, मैं htmx का CEO हूँ, और ऐसे बढ़ा-चढ़ाकर लिखे गए लेख मुझे सच में बहुत पसंद हैं
    • Unpoly का documentation भी शानदार है, लेकिन थोड़ा जटिल लगा। ज़्यादा सरल मामलों में मैं Alpine AJAX इस्तेमाल करता हूँ।
      यह Alpine.js plugin है जो links और forms में बुनियादी AJAX functionality जोड़ देता है
  • उन लेखों से थक गया हूँ जो “Hello World” उदाहरण लेकर कहते हैं कि यह React से बेहतर है
    साधारण उदाहरणों में तो कुछ भी अच्छा चलता है। लेकिन असल दुनिया में ज़्यादातर backend में dependencies बहुत होती हैं और UI भी जटिल होता है

    • ultra-simple framework को लेकर developers का डर आखिरकार scalability की सीमा से टकराने को लेकर होता है
      बुनियादी demo अच्छे हैं, लेकिन यह भी दिखना चाहिए कि ज़्यादा जटिल feature जोड़ते समय इसे कैसे बढ़ाया जा सकता है
      JS कहाँ जोड़ेंगे, build step चाहिए या नहीं, और htmx के paradigm से कितनी बंधनकारी स्थिति बनेगी — यह जानना चाहूँगा
    • Fizzy जैसे apps भी हैं जिन्हें 37signals ने Hotwire से बनाया है।
      यह React से बेहतर होने की बात नहीं, बल्कि एक दूसरा approach है
    • हमारा intranet Python + HTMX के साथ चलता है। अभी तक ऐसा कुछ नहीं मिला जो किया न जा सके
      DOM के हिस्से बदलने वाला paradigm बहुत सरल और सहज है
    • उल्टा, कुछ तकनीकें इतनी जटिल होती हैं कि “Hello World” से ही मुश्किल शुरू हो जाती है
      उदाहरण: effect-ts ताकतवर है, लेकिन साधारण output तक जटिल है
    • Go + Htmx से बना real-time planning poker app भी है। लगभग 500 lines code में बनाया गया है
  • हमारे startup ने HTMX अपनाया था, लेकिन अब आखिरकार React पर migrate कर रहे हैं
    HTMX में response handling की complexity ज़्यादा है, और हर endpoint को कई HTML fragments लौटाने पड़ते हैं
    documentation और उदाहरण कम हैं, और बड़े पैमाने की best practices भी नहीं हैं।
    React mature है, और AI coding के साथ इसका मेल भी अच्छा है। HTMX छोटे प्रोजेक्ट्स के लिए ठीक है, लेकिन उससे आगे मुश्किल लगता है

    • मैंने HTMX के साथ काफ़ी smooth architecture pattern पाया है
      हर endpoint सिर्फ एक काम करता है, और Optimistic UI से तुरंत प्रतिक्रिया मिलती है
      error handling को सरल रखता हूँ, hx-swap-oob का इस्तेमाल न्यूनतम करता हूँ
      technology चुनने का मूल बिंदु trade-offs को कम से कम करना है
    • frontend और backend को हर scenario पर सहमत होना ही पड़ता है।
      इसलिए मैं backend-centered validation रखता हूँ, और frontend को सिर्फ display की भूमिका देता हूँ
    • Hypermedia Systems किताब इस सबको ज़्यादा एकीकृत तरीके से समझाती है
    • जिस niche solution को ठीक से समझा ही नहीं, उसे चुनकर फिर किसी और जटिल चीज़ पर जाना, असल में trade-offs को दोहराना ही है
    • सिर्फ “AI coding के लिए अच्छा है” कहकर technology चुनना थोड़ा दुखद है
  • मुझे SSR नहीं चाहिए। backend सिर्फ JSON API दे, और frontend उसे consume करे
    SSR एक overhyped अवधारणा है। यह cloud services बेचने की दिशा में धकेलने वाली रणनीति जैसा लगता है

  • Demo 3 Live Search उदाहरण में scroll jank की समस्या काफ़ी गंभीर है।
    नतीजे सीधे document में insert हो रहे हैं, इसलिए लगता है layout बार-बार recalculate हो रहा है

  • React काफ़ी ठीक है। साधारण projects में भी कोई दूसरी paradigm सीखने की खास वजह नहीं है

    • React भी आखिरकार HTML में ही render होता है, इसलिए HTML/CSS सीखना ज़रूरी है। बस एक abstraction मौजूद है
    • React ecosystem इतना बड़ा है कि लगातार सीखो और भूलो वाली थकान होती रहती है
      जबकि HTMX में 15 मिनट में concept समझ सकते हैं, और 10 साल तक काम में ला सकते हैं
    • React या Angular की संरचना MVC के ऊपर एक और MVC रखने जैसी है। बेवजह जटिल
    • हर जगह भारी solution इस्तेमाल करना अप्रभावी है।
      इतिहास बताता है कि हल्के paradigms ही बाज़ार में जीतते हैं। React भी कभी ऐसा ही था
    • वजह सीधी है — performance
  • मैं HTMX नहीं बल्कि Alpine.js पर पूरी तरह फ़िदा हो गया हूँ
    server-rendered HTML को enhance करने का विचार बहुत सही लगा
    dropdown, show/hide जैसी चीज़ें सब सहज हैं और build step की ज़रूरत नहीं पड़ती

    • Alpine में Alpine AJAX plugin भी है, जो HTMX जैसी functionality देता है
    • मैं भी Alpine.js इस्तेमाल करता हूँ और इससे frontend फिर से मज़ेदार लगने लगा है
      यह सहज है और बड़े projects में भी manage करना आसान है
    • लेकिन commercial projects में Alpine दुःस्वप्न बन सकता है
      HTML में inline JS डालते-दालते maintenance मुश्किल हो जाती है, और state management भी implicit हो जाता है
      Hotwire या Stimulus संगठन के पैमाने पर कहीं बेहतर लगते हैं
    • declarative approach ही सही रास्ता है
  • बड़े apps में HTMX इस्तेमाल करने पर server load और cost को लेकर जिज्ञासा है
    चूँकि HTML server पर render होता है, इसलिए JSON की तुलना में processing ज़्यादा लगती होगी

    • लेकिन ज़रूरी नहीं कि ऐसा हो। template rendering बहुत तेज़ हो सकती है
      कई बार यह JSON serialization से भी ज़्यादा efficient होती है, और client पर deserialization की cost भी होती है
      HTMX, Alpine.js जैसे tools के साथ मिलकर, जटिल state भी आसानी से संभाल सकता है
      यह हर स्थिति के लिए नहीं है, लेकिन कई मामलों में बहुत अच्छा काम करता है
  • framework evangelism वेब ecosystem की सबसे खराब संस्कृति है
    अगर कोई solution सच में अच्छा है, तो उसे अपनाया ही जाएगा। उसके लिए प्रचारक जैसा व्यवहार करने की ज़रूरत नहीं है
    npm हमलों की बात भी बढ़ा-चढ़ाकर कही जाती है। htmx भी आखिर npm का इस्तेमाल कर सकता है

    • htmx बिना dependency की single file है, इसलिए npm अनिवार्य नहीं है
    • “अच्छे solution अपने-आप अपनाए जाते हैं” — यह बात गलत है।
      दुनिया में marketing और visibility के बल पर अपनाए गए बहुत से खराब solutions हैं
    • लोकप्रियता, बजट और inertia ही technology adoption तय करते हैं।
      अगर असली craftsmanship बचानी है, तो ऐसे biases का सामना करना होगा
  • HTMX मुझे दोनों दुनियाओं की कमियाँ जोड़ देने जैसा लगता है
    SSR में cohesion होता है, CSR में separation, लेकिन HTMX दोनों को मिलाकर implicit coupling पैदा करता है
    अगर उसी data को दूसरे format में दिखाना हो, तो क्या backend पर दो endpoints बनाने पड़ेंगे — यह सवाल है

    • यह सोच छोड़नी होगी कि frontend state हमेशा ज़रूरी है
      ज़्यादातर apps में backend state ही काफ़ी होती है, और UX सुधार के अलावा बड़ा फ़ायदा नहीं मिलता
    • Splitting Your APIs लेख देखें, तो यह उल्टा एक अच्छी बात लगती है
    • Jinja जैसे server templates इस्तेमाल करें तो एक ही rendering में कई presentation formats संभाले जा सकते हैं
      अगर पूरा page server से compose हो रहा है, तो data पहले से उसी में मौजूद होता है
 
iolothebard 2025-12-20

पिछले साल मैंने ऐसा एक प्रेज़ेंटेशन किया था। सुनने वाले ज़्यादा नहीं थे^^
https://www.slideshare.net/slideshow/htmx-2024/274315966

PoC स्तर पर मैंने ऐसा कुछ भी बनाया था
https://github.com/iolo/hx

लेकिन कोई भी htmx का इस्तेमाल नहीं करता, हाहा

 
shakespeares 2025-12-21

यह अफ़सोस की बात है कि एक बार हालात परिचित हो जाने और उसके अनुरूप इतना बड़ा ecosystem बन जाने के बाद चीज़ें जड़ हो गई हैं, और अब innovation की दिशा में कोई हलचल नज़र नहीं आती।

 
roxie 2025-12-20

स्लाइड्स मज़ेदार हैं, प्रेज़ेंटेशन नहीं देख पाया इसलिए अफ़सोस है हाहा