Nub - Node.js के लिए Bun-जैसा ऑल-इन-वन टूलकिट
(github.com/nubjs)- Node.js को बदले बिना उसे बेहतर बनाने वाला ऑल-इन-वन टूलकिट, जो Rust में लिखा गया है और मानक
nodeके ऊपर Bun-जैसा डेवलपमेंट अनुभव देता है - फ़ाइल/स्क्रिप्ट चलाना, dependency install करना, और Node version management को एक ही टूल में एकीकृत करता है; कोई नया runtime, vendor-locked API, या lock-in नहीं
- File runner
nub <file>—.ts,.tsxआदि को build step के बिना चलाता है,nodeके साथ flag-for-flag और var-for-var compatible,tsxकी तुलना में startup 2.9× तेज़- पूरा TypeScript support (
enum,namespace), JSX/TSX, Decorators,.env*auto-loading,.yaml,.toml,.json5आदि के लिए built-in loader - प्रोजेक्ट को जिस Node version की ज़रूरत है उसका auto-detect और install (
.node-version,.nvmrc,package.json#enginesआदि को देखकर)
- पूरा TypeScript support (
- Script runner
nub run—npm/pnpm runका drop-in, JS startup के बिना native Rust binary के रूप मेंpnpm runकी तुलना में लगभग 24× तेज़ dispatch (14.7ms vs 442.7ms)pre/posthook, pnpm workspace--filter,--parallelआदि का पूरा support
- Package runner
nubx—npxऔरpnpm dlxका drop-in, double-Node-spawn penalty हटाकरnpxकी तुलना में लगभग 19× तेज़ execution (11ms vs 226ms) - Package manager
nub install— Aube engine आधारित,pnpmके साथ flag compatible,pnpmसे 2.5× औरnpmसे 3.7× तेज़- डिफ़ॉल्ट security policy built-in — postinstall block, osv.dev malicious package scan, provenance downgrade से इनकार, 24 घंटे का
minimumReleaseAge - npm/pnpm/Yarn/Bun lockfile और settings को auto-detect करने वाले compat-mode में काम करता है
- डिफ़ॉल्ट security policy built-in — postinstall block, osv.dev malicious package scan, provenance downgrade से इनकार, 24 घंटे का
- Node version manager
nub node— version install, ls, uninstall, pin आदि के लिए manual management commands देता है - Package meta-manager
nub pm— Corepack जैसी भूमिका native Rust में निभाता है,npm,yarn,pnpmglobal shim register करता है - MIT लाइसेंस
1 टिप्पणियां
Hacker News की राय
आइडिया बहुत अच्छा है और समझ में आता है। Bun DB driver जैसी चीज़ें और भी देता है, लेकिन यह भी तय है कि developer experience इसकी बड़ी आकर्षक बातों में से एक है
वैसे, Nub के मुख्य लेखक Zod बनाने वाले Colin McDonnell हैं, और वे पहले Bun में भी काम कर चुके हैं
nub:prefix वाले built-in modules, न Nub नाम की config file/lockfile, नpackage.jsonमेंnubfield, और नNUB_environment variablesBun ने जो ज़्यादातर चीज़ें जोड़ी हैं, मेरा मानना है कि उन्हें proper dependency के रूप में रखना बेहतर है
--requirehook का इस्तेमाल करना,--importकी बजाय, थोड़ा surprising है। हो सकता है जब मैं ऐसा ही कुछ बनाने के लिए देख रहा था तब से बहुत कुछ बदल गया हो, लेकिन लगता है कि Nub के ESM support में कोई सूक्ष्म पहलू हो सकता हैउस समय Node का
--importबहुत शुरुआती अवस्था में था, और आम ESM-to-CJS approach में कई ऐसे exceptions थे जिन्हें संभालना पड़ता था। उनमें से ज़्यादातर शायद बहुत niche cases रहे होंगे, लेकिन मुझे लगता है कि top-level await कुछ महत्वपूर्ण users को प्रभावित करेगा--requireका overhead लगभग 0.5ms है, जबकि--importM1 Macbook Pro पर लगभग 4.6ms हैइसी संदर्भ में, Node.js ने हाल ही में 2025 में पुराने async
module.register()API की तुलना में performance सुधारने के लिए resolver hook registration API का sync versionmodule.registerHooks()पेश किया। Nub के लिए यह एक बड़ा blocker हटने जैसा था। रुचि रखने वालों के लिए, async API में 19ms का fixed registration overhead था और हर import पर लगभग 130us का अतिरिक्त overhead जुड़ता थायहाँ Nub कौन-सा flag इस्तेमाल करता है, इसका user code पर बिल्कुल असर नहीं पड़ता, और top-level await वहाँ supported है जहाँ Node.js खुद इसे support करता है
हमने अभी अपना पूरा monorepo nub पर migrate करने वाला PR merge किया है
शून्य समस्याएँ, और बेहिसाब तेज़
क्या Node कुछ versions पहले से TypeScript चला नहीं सकता था? फिर transformer की ज़रूरत क्यों है?
tsconfigजैसी चीज़ें भी खो जाती हैंलगता है यह built-in stripping approach और actual TypeScript processing, दोनों को support करता है
--experimental-transform-typesहटा दिया। इससे native पूर्ण TypeScript support असंभव हो जाता हैhttps://github.com/nodejs/typescript/issues/51#issuecomment-...
Worker,Temporalजैसी APIs के लिए polyfill inject करता हैREADME में लिखा है कि WebSocket support Node 22 से native है, लेकिन Node में native WebSocket library नहीं है। WebSocket standard का link MDN पर जाता है, और वहाँ सिर्फ़ WHATWG user interface समझाया गया है, protocol या WebSocket के काम करने का तरीका नहीं
लगता है कुछ छूटा हुआ है, या फिर सहारे के लिए कोई non-native library इस्तेमाल हो रही है
यह सराहनीय है कि यह मौजूदा technology को अपनाता है और उसका बदतर version फिर से नहीं बनाता। अगर alternatives बनाने में लगी सारी मेहनत Node में जाती, तो सही leadership के तहत हम आज कहाँ तक पहुँच गए होते, यह सोचता हूँ
छोटी और फुर्तीली teams अच्छे ideas साबित कर सकती हैं क्योंकि failure उनके लिए घातक जोखिम नहीं होता। संक्षेप में, fork एक healthy ecosystem का हिस्सा हैं
सरल उदाहरण के तौर on, Node मेरी जानकारी में एकमात्र गंभीर open source software है जिसमें config file के अंदर config को document करने का कोई तरीका नहीं है। यह बेतुका है। Node वालों ने बिना ज़्यादा सोचे JSON अपना लिया, और उसके बाद “JSON with comments” समेत किसी भी alternative पर विचार करने से इनकार कर दिया
जब कोई संगठन बुरे फैसलों में फँस जाता है, तो उसे ठीक करने का एकमात्र तरीका नए सिरे से शुरू करना होता है। जब तक हर कोई Node के ऊपर ही बनाता रहेगा, पूरा JS ecosystem config में documentation नहीं छोड़ पाएगा
Node ecosystem में ऐसी कई समस्याएँ हैं, और config को document न कर पाना बस मेरी निजी चिढ़ का एक बड़ा बिंदु है
मैं Nub और उसके mascot nubnub का fan हूँ। गंभीरता से कहूँ तो यह शानदार project है, और इतना दिलचस्प है कि मैं इसे पिछले हफ्ते से, कम से कम public होने के बाद से, लगातार आज़मा रहा हूँ
चालाकी भरा। अगर यह पहले से ही Rust में लिखा है, तो इसे Rust में migrate करने की vibe coding करते-करते सारे customers खोने का खतरा नहीं रहेगा ;)
जोड़ूँ तो, Bun के खिलाफ़ anti-AI hysteria बहुत दुखद है, और कभी-कभी तो यह संगठित campaign जैसा भी लगता है
package.jsonसे भी किया जा सकता था