Gumroad ने htmx क्यों नहीं चुना
(htmx.org)- Gumroad ने अपने नए प्रोजेक्ट Helper में हल्के फ्रंटएंड की उम्मीद के साथ htmx पर विचार किया, लेकिन जटिल UX जरूरतें बढ़ने पर React/Next.js पर शिफ्ट कर गया
- सरल interactions के लिए htmx promising था, लेकिन dynamic validation और conditional fields वाले forms में server-side logic लंबा हो गया और development flow अप्राकृतिक लगा
- workflow builder का drag-and-drop, real-time collaboration, complex state management, और dynamic form generation React ecosystem और component model में ज्यादा सीधे तौर पर लागू हुए
- problem-solving resources और AI tool support Next.js और React की तरफ ज्यादा भरपूर थे, जबकि htmx open source training data की कमी के कारण development speed में disadvantage पर था
- htmx मौजूदा server-rendered apps या simple interaction models के लिए सही हो सकता है, लेकिन Helper जैसे state-heavy interfaces के लिए React और Next.js ज्यादा फिट थे
Helper में htmx पर विचार करने की पृष्ठभूमि
- Gumroad ने नया प्रोजेक्ट Helper शुरू करते समय htmx को frontend candidate के रूप में देखा
- शुरुआती उम्मीद React जरूरत से ज्यादा भारी है वाले पुराने अनुभव से आई थी, और माना गया कि htmx simple interactions को हल्के तरीके से जोड़ने का रास्ता हो सकता है
- team के अंदर यह राय भी थी कि htmx जटिल हो चुके JavaScript ecosystem पर कटाक्ष करने वाले meme जैसा है
- जैसे Tailwind inline CSS की अलग syntax जैसा दिखता है, वैसे ही htmx भी inline JavaScript की अलग syntax के करीब है—ऐसा नजरिया था
- Tailwind Gumroad के tool system में जगह बना चुका था, लेकिन htmx Helper के उद्देश्य के अनुरूप scale नहीं हुआ और ग्राहकों के लिए सबसे अच्छा user experience नहीं दे पाया
जहां React/Next.js ज्यादा natural लगा
-
Development experience और form handling
- htmx से भी सही implementation संभव था, लेकिन Gumroad को लगा कि Next.js में features को काम में लाने की प्रक्रिया ज्यादा intuitive है
- dynamic validation और conditional fields वाले complex forms में React का client-side work ज्यादा सरल था, जबकि htmx में server-side logic लंबा हो गया
-
UX और interaction constraints
- htmx apps को Rails/CRUD तरीके की ओर धकेलने की प्रवृत्ति रखता है, जिससे default experience साधारण या generic form का हो जाना आसान था
- workflow builder का drag-and-drop interface htmx में workaround implementation मांगता था, और React libraries से मिलने वाले smooth experience की तुलना में rough लगा
-
AI tools और problem solving speed
- AI tools Next.js से परिचित हैं, लेकिन htmx से कम; इसकी वजह open source training data की कमी बताई गई
- React/Next.js की तरफ resources ज्यादा होने से समस्या आने पर solution खोजने की speed ज्यादा तेज थी
-
Complexity और scalability
- project जितना complex होता गया, htmx की simplicity advantage से ज्यादा constraint जैसी लगने लगी
- real-time collaboration और complex data visualization जुड़ने पर, htmx के server-centric approach में कई components के बीच state management धीरे-धीरे मुश्किल होता गया
Helper के features के हिसाब से दिखे फर्क
- drag-and-drop: React ecosystem का
react-beautiful-dndकम setup में smooth और accessible drag-and-drop देता है - complex state management: हर workflow step की settings और conditional logic को real time में UI में reflect करने के लिए
useStateया Redux जैसे React state management तरीके ज्यादा direct थे - dynamic form generation: step type के हिसाब से अलग settings forms बनाना और user input के अनुसार उन्हें बदलना React component model में ज्यादा intuitive तरीके से handle हुआ
- real-time collaboration: कई users के एक साथ workflow edit करने का feature WebSockets और React से अपेक्षाकृत direct तरीके से implement हुआ, जबकि htmx में ज्यादा complex server-side logic और custom JavaScript की जरूरत थी
- performance optimization: workflow बड़ा और complex होने पर React के virtual DOM,
useMemo,useCallbackजैसे hooks से rendering को fine-grained तरीके से optimize किया जा सकता था
ecosystem और अंतिम फैसला
- React/Next.js ecosystem बड़ा और mature है, और Gumroad के सामने आई लगभग हर समस्या का solution देता है
- htmx में features पर compromise करने या उन्हें खुद फिर से बनाने की स्थितियां ज्यादा थीं, और third-party services व libraries के integration में भी कई बार React bindings तो थे लेकिन htmx equivalent नहीं था
- React/Next.js पर जाने के बाद Gumroad ने माना कि complex UX बनाने के लिए यह ज्यादा fit choice थी
- वे तेजी से आगे बढ़ सके, ज्यादा immersive user experience बना सके, और existing tools व libraries का लाभ उठा सके
- Helper के core customers के लिए app user experience भी काफी सुधार सके
- htmx की सीमाएं असंभव रूप से पार न होने वाली नहीं हैं, लेकिन उन्हें हल करने की प्रक्रिया htmx की strengths से दूर जाकर JavaScript-centric environment में ज्यादा natural solutions की ओर ले गई
- htmx simple interaction models या existing server-rendered apps के ऊपर बने projects के लिए अच्छा choice हो सकता है
- Helper जैसे complex और state-heavy interfaces में React और Next.js ज्यादा उपयुक्त थे, और Gumroad मानता है कि जरूरतों में बदलाव और नई technologies के अनुसार tech stack को लगातार फिर से evaluate किया जा सकता है
1 टिप्पणियां
Hacker News की राय
यह बात मैंने एक दूसरे थ्रेड में लिखी थी: Gumroad CEO ने Twitter पर कहा था कि उन्होंने किसी प्रोजेक्ट में htmx आज़माया, लेकिन आखिर में NextJS चुना
मैं htmx वेबसाइट पर डालने लायक कोई सोच-समझकर लिखा गया नकारात्मक अनुभव ढूंढ रहा था, इसलिए उनसे पूछा कि क्या वे अपना अनुभव लिख सकते हैं, और शुक्रिया कि उन्होंने खुशी-खुशी मान लिया
हर चीज़ के लिए खुद को सबसे अच्छा समाधान बताने वाले दूसरे प्रोजेक्ट्स की तुलना में यह ताज़गी भरा है
खासकर drag and drop से जुड़ी बात को लेकर उत्सुक हूं: क्या वे सच में मानते हैं कि htmx में यह मुश्किल है, और अगर हां, तो क्या इसे हल करने की कोई योजना है
जबकि ऐसा नहीं है कि Rails और React को साथ इस्तेमाल नहीं किया जा सकता
यह लेख खुद htmx के नकारात्मक अनुभव से ज़्यादा ऐसा लगता है कि drag and drop और real-time collaboration आते ही शुरुआत में htmx को प्रयोग के तौर पर चुनना ही शायद गलत था
screenshot क्या दिखाने की कोशिश कर रहा है, यह भी मुझे ठीक से समझ नहीं आया, लेकिन फिर भी मुझे लगता है कि htmx वेबसाइट पर डालने के लिए यह अच्छा लेख है
मेरे लिए htmx, React का विकल्प कम और jQuery का विकल्प ज़्यादा है
htmx और jQuery डॉक्यूमेंट में इंटरैक्शन जोड़ते हैं, जबकि React पूरा डॉक्यूमेंट ही बनना चाहता है
काम के हिसाब से टूल बदलना चाहिए
“AI और टूल सपोर्ट: यह भी worth noting है कि AI टूल्स Next.js से काफी परिचित हैं, लेकिन htmx से उतने परिचित नहीं” वाला हिस्सा कमी की तरह शांत ढंग से लिखा गया था, लेकिन development tools, libraries, frameworks और languages के भविष्य के लिए यह काफी डरावना संकेत है
मेरा अनुमान है कि large language models मौजूदा winner-takes-all और first-mover effects को और बढ़ाएंगे, और ज़्यादा व बेहतर training data की वजह से open source tools के इस्तेमाल को भी और प्रोत्साहित करेंगे
large language models से पहले भी React का फायदा यह था कि ज़्यादातर सवाल StackOverflow पर पहले से मौजूद थे, और लगभग हर काम के लिए mature libraries उपलब्ध थीं
अब बस कुछ लोग वही सवाल, जो पहले StackOverflow पर पूछते, large language models से पूछ रहे हैं; नतीजा वही है
जो चीज़ बाकी लोग ज़्यादा इस्तेमाल करते हैं, उसे इस्तेमाल करने से फायदे मिलते हैं
लेकिन software engineer career की लंबी अवधि की रणनीति के तौर पर मुझे यह बिल्कुल अच्छा दांव नहीं लगता
मैंने सोचा है कि शायद यह अच्छी बात भी हो सकती है
software industry latest tools, language features और frameworks के पीछे भागने में बहुत ज़्यादा समय लगाती है
थोड़ा ठहराव आना और हर 6 महीने में नया हथौड़ा बनाने के बजाय मौजूद tools से काम पूरा करना सकारात्मक भी हो सकता है
comments से यह पता नहीं चलता कि क्या सच में AI को HTMX संभालने में दिक्कत हुई, या बात बस दूसरे resources की कमी पर चली गई
large language models अक्सर general-purpose translators की तरह बहुत अच्छी तरह काम करते हैं
वे popular frameworks के common patterns और concepts सीख लेते हैं, और अगर उन्हें छोटे framework की syntax कुछ हद तक पता हो, तो अनुभव के हिसाब से वे काफी अच्छा niche framework code भी बना देते हैं
यह वैसा ही है जैसे pirates training data में कभी न बताए गए विषयों पर भी pirate अंदाज़ में बात कर सकते हैं
“dynamic validation और conditional fields वाले complex forms बनाते समय, React में जो साधारण client-side काम होता, उसे संभालने के लिए हमें complex server-side logic लिखना पड़ा” वाला हिस्सा देखकर Anakin Padme meme याद आता है
“फिर भी server-side validation भी implement कर रहे हो न… कर रहे हो न?”
React में आसान लेकिन htmx में कठिन form की कल्पना मुझे मुश्किल लगती है, सिवाय उस स्थिति के जहां आप React-style global application state ठूंसकर library से 90% काम निपटा देना चाहते हों
बस यह हर page पर नहीं, बल्कि submit करते समय एक बार होता है
“मैंने सोचा था कि frontend को बहुत हल्का रखने के लिए htmx अच्छा समाधान हो सकता है” वाली बात के उलट, ऐसा लगता है कि lightweight frontend छोड़ते ही htmx फिट नहीं रहा
complex UI/UX और state management render करने के लिए उन्होंने third-party libraries इस्तेमाल करनी शुरू कर दीं
साथ ही “React में X करना ज़्यादा आसान था” कहना, अगर आपने वह third-party library से किया, तो fair comparison नहीं है
बस इसलिए आपको खुद नहीं करना पड़ा क्योंकि किसी और ने कर दिया था
लेख से काफी सहमति है, लेकिन अगर पहले से पता था कि complex state और rendering चाहिए, तो htmx शुरू से ही अच्छा समाधान नहीं था
मुझे htmx पसंद है, लेकिन यह लेख दिखाता है कि लेखक की technical understanding काफी सीमित थी
ये वे फायदे-नुकसान नहीं थे जो web platform और htmx.org docs को थोड़ा भी जानने पर दिख जाते; बल्कि यह ज़्यादा ऐसा लगता है कि माहौल देखकर HTMX आज़माना चाहते थे
Gherkin language सरल मामलों में अच्छी लगती है और सिद्धांततः complex मामलों तक भी extend की जा सकती है, लेकिन जैसे-जैसे abstraction levels की कई परतें संभालनी पड़ती हैं, pure Python वाला pytest ज़्यादा सुविधाजनक हो जाता है
project scope बिल्कुल भी “simple” नहीं था, और मेरे मामले में मैं सीधे React चुनता
“workflow builder के लिए drag-and-drop interface लागू करना htmx में बड़ी चुनौती था, और React libraries से मिलने वाले smooth experience की तुलना में भद्दे workarounds की ज़रूरत पड़ी” वाले हिस्से पर: HTMX तब बेहतर है जब frontend bundle बस उतना ही करे जितना ज़रूरी हो, उससे ज़्यादा नहीं
htmx.onLoadevent से connect करने के बाद loaded content के अंदर attributes लगे markup—जैसे columns, cards, tasks आदि—ढूंढकर attach कर देंउदाहरण के लिए rendered markup पर sortable.js bind कर सकते हैं, और sortable events को HTMX के ज़रिए state updates से जोड़ सकते हैं
यह काफ़ी सरल है, और docs में ठीक ऐसा ही example भी है: https://htmx.org/docs/#3rd-party
आधुनिक, stateful और dynamic websites HTMX के साथ बिल्कुल भी असंगत नहीं हैं
लेख पढ़कर लगता है कि team backend development की तुलना में frontend development से ज़्यादा परिचित है
पुराने ढंग के developer के नज़रिए से देखें तो कभी-कभी frontend developers के सोचने के तरीके में थोड़ा डर और कुछ गलतफहमी दिखती है
सच कहूँ तो मुझे लगता है कि यह तरीका कैसे काम करता है, समझने के लिए बस सोच में थोड़ा सा adjustment चाहिए, लेकिन यह भी समझता हूँ कि बहुत लोगों ने अपने पूरे career में सामान्य client/server approach देखी ही नहीं है
फिर भी तैयार React components की value और docs/help आसानी से मिल जाने का फायदा नज़रअंदाज़ नहीं किया जा सकता
designers की एक generation ने mobile और web को बहुत मिलता-जुलता design किया है, और implementation complexity developers पर डाल दी है
लेकिन web, जहाँ संभव हो, mobile से अलग होना चाहिए और अलग हो भी सकता है
लेख में कहा गया है कि design CRUD app जैसा बहुत “generic” था, लेकिन क्या यह वाकई बुरा है?
हमारे पास सार्वभौमिक रूप से अपनाया गया document model जैसी बड़ी उपलब्धि है, जिससे सभी sites पर predictable user experience बनाया जा सकता है, लेकिन हम उसे सिर्फ “boring” मानते हैं
जैसे boring होना अपने-आप में कोई मूलभूत समस्या हो
mobile app जैसा महसूस होने वाला unique और branded experience मांगने वाला market pressure समझ आता है, लेकिन सोचता हूँ कि अगर designers React-style thinking जितनी ही WWW-style thinking भी कर पाते तो कैसा होता
अच्छा लगता है कि HTMX ऐसे और मिलते-जुलते लेख अपनी site पर publish करता है
लगता है कि सिर्फ HTMX इनके लिए ठीक से fit न होने के कई उचित कारण थे
मैं frontend expert नहीं हूँ, लेकिन कुछ विचार हैं
पहला, क्या backend पर भी form validation करनी ही नहीं पड़ती?
मुझे जिज्ञासा है कि backend system से frontend को results pass करना इतना मुश्किल क्यों था
कई मामलों में frontend और backend दोनों जगह form validation करने के अच्छे कारण होते हैं, तो ऐसे में सिर्फ HTMX पर्याप्त नहीं होगा, लेकिन इस समस्या का वर्णन थोड़ा confusing है
दूसरा, सिर्फ HTMX इस्तेमाल करने पर app कुछ हद तक इसी दिशा में धकेली जा सकती है, और कुछ cases में यह अच्छी बात होती है, लेकिन लगता है इन्होंने customers के लिए अलग तरीका ज़रूरी माना
तीसरा, मैं और जानना चाहूँगा कि यह team AI tools का इस्तेमाल कैसे कर रही थी कि उन पर निर्भरता main issue बन गई
आगे चलकर AI development tools महत्वपूर्ण हुए तो यह भी दिलचस्प सवाल है कि किसी नए framework या programming language को adopt कराने लायक tools और integrations पाने की bar बहुत ऊँची हो जाएगी या नहीं
चौथा, HTMX के बारे में आम शिकायत की तरह, कुछ projects को HTMX जो देता है उससे ज़्यादा चाहिए होता है
पाँचवाँ, Django और Python पसंद होने की एक वजह उनकी गहरी community, integrations और add-on ecosystem भी है
concept में मिलती-जुलती लेकिन HTMX से ज़्यादा features वाली https://unpoly.com/ जैसी चीज़ शायद इनके लिए बेहतर fit होती
“Next.js का development process natural लगा” वाली बात पर, मुझे समझ नहीं आता कि इस ReactJS syntax का कौन-सा हिस्सा natural है
यह familiar हो सकता है, लेकिन natural नहीं है
useEffect(() => { const timer = setInterval(() => { setCount((prevCount) => prevCount + 1); }, 1000); return () => clearInterval(timer); }, []);आखिरकार JavaScript से awkward तरीके से जोड़ना ही पड़ेगा
अगर variable timeout वाला custom hook चाहिए, तो यह कहीं ज़्यादा जटिल हो सकता है
Dan को भी इस topic पर लंबा लेख लिखना पड़ा था: https://overreacted.io/making-setinterval-declarative-with-r...
क्या code लिखकर दिखा सकते हैं?
htmx.org ने इस लेख को host किया, यह सराहनीय है
आखिरकार अगर कोई htmx उठाकर इस्तेमाल करे और फिर अपनी ज़रूरतें पूरी न होने पर नाराज़ हो, तो अब दिखाने के लिए एक resource भी है
मैंने अपने कुछ projects में htmx इस्तेमाल किया है और अनुभव काफ़ी अच्छा रहा
ऐसे लेख rare तरीके से दिखाते हैं कि htmx कहाँ अच्छा करता है और कहाँ कम पड़ता है, इसलिए उल्टा htmx इस्तेमाल करने को लेकर मेरा confidence बढ़ता है
तीसरा point डरावना लगता है
मैं ऐसी दुनिया की कल्पना करता हूँ जहाँ companies पैसे देकर अपने framework को model training set में over-sampled करवाएँ, और फिर उसी के आधार पर contracts बेचें
यह कुछ-कुछ search engine optimization के development tools के अंदर baked in होने जैसा है