[{"data":1,"prerenderedAt":464},["ShallowReactive",2],{"project-48660267":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":46,"post_text":48,"what":49,"said":92,"maker_in_thread":212,"shape":222,"grid":226,"attempts":427,"same_week":428,"maker_shows":42,"maker_hidden":456,"reader_version":457,"card":458},"48660267","Nub","A Bun-like all-in-one toolkit for Node.js","title","Show HN: Nub – A Bun-like all-in-one toolkit for Node.js","https:\u002F\u002Fgithub.com\u002Fnubjs\u002Fnub","github.com","colinmcd",1782310458,2026,277,81,167,4366,4,"legend","dev_tools","node.js toolkit","cli",[24,25,26,27,28],"node.js","typescript","javascript runtime","bun alternative","package manager","mixed",0.234,{"positive":32,"neutral":32,"mixed":33,"critical":34},14,1,7,36,{"performance":37,"idea":40,"execution":43,"docs":44,"design":45},{"positive":38,"critical":39},2,0,{"positive":41,"critical":42},8,3,{"positive":33,"critical":39},{"positive":39,"critical":33},{"positive":39,"critical":39},[39,47,42,42,42,47,39,39,39,39,39,39,39,39,42,39,39,33,33,47,33,42,47,47,42,39,39,39,42,42,42,42,47,47,47,42,39,47,47,42],5,null,{"problem":50,"audience":48,"pricing":48,"motivation":60,"time_to_build":48,"stack":68,"openness":89,"stage":90,"team_size":91},{"value":51,"source":52,"evidence":53},"Adds Bun-like DX (TypeScript, polyfills, tooling) on top of stock Node.js without Nub-specific APIs","maker",[54,57],{"id":55,"by":11,"text":56},"48666446","Indeed, Nub intentionally introduces no Nub-specific APIs: no Nub global, no nub: prefixed built-in modules, no Nub-named config file \u002F lockfile, no \"nub\" field in package.json,…",{"id":58,"by":11,"text":59},"48660434","Colin here, creator of Nub. I’ve had the general shape of this in mind for years. Nub runs your code with stock `node`, augmented with a `--require` preload hook[0] that adds a…",{"value":61,"source":52,"evidence":62},"Make Node.js experience as good as Bun's while staying on stock Node",[63,64,67],{"id":58,"by":11,"text":59},{"id":65,"by":11,"text":66},"48661387","Yep, full support on macOS, Linux, Windows. No official image yet (I'll start on this now) but you can get started with something like this. ``` FROM node:26-slim RUN npm i -g…",{"id":55,"by":11,"text":56},[69,81,85],{"value":70,"source":71,"evidence":72},"Rust","commenter",[73,77],{"id":74,"by":75,"text":76},"48661550","gorjusborg","Very smart. You can't lose all your customers for vibe-coding a migration to Rust if you are already written in Rust ;)",{"id":78,"by":79,"text":80},"48666167","afavour","I assume speed. But also, I know “rewrite in Rust” is a meme but if you’re doing something new, why not? I can’t see a good argument that a pile of shell scripts would be a…",{"value":82,"source":52,"evidence":83},"oxc transpiler",[84],{"id":58,"by":11,"text":59},{"value":86,"source":52,"evidence":87},"Node.js",[88],{"id":58,"by":11,"text":59},"open_source","launched","unknown",{"praise":93,"objections":122,"requests":149,"questions":167,"alternatives":186},[94,109,116],{"value":95,"source":71,"evidence":96},"Clever name and approach of building on existing Node mechanisms",[97,101,105],{"id":98,"by":99,"text":100},"48800150","sgammon","love this, and the name \"nub\" is conceptually perfect (1) adopts existing tech and improves, rather than a greenfield project with worse compat (2) the way it uses existing node…",{"id":102,"by":103,"text":104},"48661336","sgarrity","I didn't even click on the link. I just came to give the author a hat-tip on the project name. Well played.",{"id":106,"by":107,"text":108},"48665080","haburka","I actually really like this! Great choices all around.",{"value":110,"source":71,"evidence":111},"Very fast, monorepo migration went smoothly",[112],{"id":113,"by":114,"text":115},"48660963","ssalbdivad","Just merged a PR migrating our entire monorepo to nub. 0 issues, ridiculously fast.",{"value":117,"source":52,"evidence":118},"Full pnpm compatibility",[119],{"id":120,"by":11,"text":121},"48669502","You can continue using pnpm if you don't want. You can also move over to Nub if you want to performance wins. It has complete pnpm compatibility. Flag for flag identical CLI,…",[123,130,138],{"value":124,"source":71,"evidence":125},"Node's built-in TypeScript stripping is limited; Nub adds real type handling",[126],{"id":127,"by":128,"text":129},"48668089","zamadatix","Node's built-in Typescript support is just for type stripping. That works for a massive amount of TypeScript syntax, but not all of it. It also doesn't bother actually checking…",{"value":131,"source":71,"evidence":132},"Heavy vibe-coding and Claude involvement in the repo",[133,137],{"id":134,"by":135,"text":136},"48665664","maxloh","This project is already highly vibe-coded. Claude is the second contributor of the repo.",{"id":74,"by":75,"text":76},{"value":139,"source":71,"evidence":140},"Websocket server support unclear in readme",[141,145],{"id":142,"by":143,"text":144},"48671176","austin-cheney","The readme says Websockets support is native from Node 22, except Node does not have a native Websockets library. Their link for Websockets standard goes to MDN, which is fine…",{"id":146,"by":147,"text":148},"48671968","soulofmischief","Node supports a built-in WebSocket client since 22, but not a server.",[150,161],{"value":151,"source":71,"evidence":152},"Add nub --compile like Bun",[153,157],{"id":154,"by":155,"text":156},"48662356","montroser","Nice. Can we get `nub --compile` up in there like Bun has?",{"id":158,"by":159,"text":160},"48663377","allthetime","I will seriously consider migrating once this exists! I couldn’t imagine deploying any other way now. I can never go back from SCPing a single binary to my server and just…",{"value":162,"source":52,"evidence":163},"Production build command",[164],{"id":165,"by":11,"text":166},"48664127","Right now, you should use Nub on the backend if you are relying on its augmentations. If you specifically want to disable Nub's augmentations (so you have a guarantee that your…",[168,179],{"value":169,"source":71,"evidence":170},"Does it work in Docker and on Cloudflare Workers",[171,175],{"id":172,"by":173,"text":174},"48661208","GL26","nice ! does this work on docker containers ?",{"id":176,"by":177,"text":178},"48661137","bookernath","Nice, I think this fills a niche. Does it work on cloudflare workers?",{"value":180,"source":71,"evidence":181},"Is it safe and fast enough for production backends",[182],{"id":183,"by":184,"text":185},"48664022","jpambrun","Am I expected to be able to run this in production on the backend, or do I still need to transpile and bundle? Do we expect the performance and memory overhead to be negligible.…",[187,198,205],{"value":188,"source":71,"evidence":189},"Bun",[190,194],{"id":191,"by":192,"text":193},"48666226","pier25","Very cool idea which makes a lot of sense. Bun provides more (eg db drivers) but the DX is certainly a big part of its appeal. For reference, the main author of Nub is Colin…",{"id":195,"by":196,"text":197},"48668418","nsonha","what's wrong with bun? And how is this better?",{"value":199,"source":71,"evidence":200},"Deno",[201],{"id":202,"by":203,"text":204},"48683485","BrunoBernardino","This is _very_ interesting, thanks for building and sharing it, Colin! I've got a couple of decent-sized products running on Deno (and I've been a fan since it came out, not so…",{"value":206,"source":71,"evidence":207},"jiti",[208],{"id":209,"by":210,"text":211},"48665138","Onavo","There's also the option of using Jiti https:\u002F\u002Fgithub.com\u002Funjs\u002Fjiti It would add an extra dependency though",{"comments":213,"answered":47,"key":214},13,[215,216,219],{"id":55,"text":56},{"id":217,"text":218},"48668200","Exactly this. TypeScript also ended being being many users' entrypoint to JSX, decorators, etc as it became a catchall transpiler surface for large projects. Plus there are…",{"id":220,"text":221},"48664558","EDIT: Sorry, I understand you're talking about package.json. Would be fun to try to get the Node & package mgmt teams aligned to add support for comments in the package.json. Bun…",{"commenters":223,"max_depth":224,"maker_replies":213,"first_comment_mins":225,"lifespan_hours":14},54,6,10,[227,229,231,233,237,240,241,243,247,248,249,252,256,259,261,264,266,268,272,275,277,280,283,285,288,291,294,296,298,301,304,306,308,311,314,315,318,320,323,326,328,330,332,334,337,340,343,348,351,353,356,359,361,363,366,368,369,371,373,377,381,386,388,392,396,398,400,401,405,408,410,413,417,420,422,424,426],[191,39,39,228,192,39],"commenter\u002Fpositive\u002Fidea",[55,39,39,230,11,33],"maker\u002Fneutral\u002Fdesign",[113,33,47,232,114,39],"project\u002Fpositive\u002Fperformance",[234,38,42,235,236,39],"48666801","project\u002Fneutral\u002Fidea","vmsp",[238,38,42,235,239,39],"48667480","conartist6",[127,38,42,235,128,39],[217,38,39,242,11,33],"project\u002Fpositive\u002Fidea",[244,38,33,245,246,39],"48672338","project\u002Fcritical\u002Fidea","chirsz",[202,42,47,242,203,39],[98,18,47,242,99,39],[250,47,47,242,251,39],"48662005","ivanjermakov",[253,47,39,254,255,39],"48662501","other\u002Fneutral\u002Fnone","hungryhobbit",[257,47,39,254,258,39],"48662753","johnfn",[220,47,39,260,11,33],"maker\u002Fneutral\u002Fidea",[262,47,39,254,263,39],"48665333","matt_kantor",[265,47,39,254,239,39],"48667692",[267,47,39,254,79,39],"48666118",[269,47,39,270,271,39],"48667314","commenter\u002Fneutral\u002Fnone","thayne",[273,47,39,270,274,39],"48666285","jdxcode",[276,47,39,254,258,39],"48662732",[278,47,39,254,279,39],"48663341","hootz",[281,47,39,270,282,39],"48663997","psygn89",[284,47,39,254,11,33],"48664172",[286,47,39,254,287,39],"48666710","NamlchakKhandro",[289,47,39,254,290,39],"48671613","throw1234567891",[292,47,39,254,293,39],"48666595","llbbdd",[106,224,47,295,107,39],"project\u002Fpositive\u002Fnone",[74,34,33,297,75,39],"project\u002Fcritical\u002Fnone",[299,34,39,254,300,39],"48661861","Zambyte",[302,34,39,254,303,39],"48662818","airstrike",[305,34,39,254,159,39],"48663356",[307,34,39,254,303,39],"48663425",[309,34,33,297,310,39],"48662711","lacoolj",[312,34,39,254,313,39],"48662870","skrebbel",[134,34,33,245,135,39],[316,34,33,245,317,39],"48665971","coneonthefloor",[78,34,47,319,79,39],"project\u002Fpositive\u002Fexecution",[321,34,42,322,192,39],"48666250","project\u002Fneutral\u002Fnone",[324,34,33,297,325,39],"48668179","leobuskin",[142,41,33,327,143,39],"project\u002Fcritical\u002Fdocs",[146,41,42,329,147,39],"project\u002Fneutral\u002Fdocs",[331,41,39,254,143,39],"48673066",[102,333,47,242,103,39],9,[335,333,39,336,11,33],"48661393","maker\u002Fpositive\u002Fnone",[338,333,39,254,339,39],"48668466","gnabgib",[341,225,47,242,342,39],"48662075","kandros",[344,345,42,346,347,39],"48662530",11,"project\u002Fneutral\u002Fexecution","skybrian",[183,349,42,350,184,39],12,"project\u002Fneutral\u002Fperformance",[165,349,39,352,11,33],"maker\u002Fneutral\u002Fnone",[354,349,39,254,355,39],"48666360","BearOso",[357,349,39,254,358,39],"48672505","jitl",[360,349,39,254,355,39],"48687948",[362,349,39,254,358,39],"48688144",[364,213,42,352,365,39],"48664482","esafak",[367,213,39,352,11,33],"48664641",[176,32,42,322,177,39],[370,32,39,352,11,33],"48661271",[209,372,42,235,210,39],15,[374,375,42,346,376,39],"48682943",16,"keks0r",[378,379,39,254,380,39],"48666937",17,"cozzyd",[382,383,42,384,385,39],"48669147",18,"project\u002Fmixed\u002Fidea","zarzavat",[120,383,39,387,11,33],"maker\u002Fneutral\u002Fperformance",[389,390,47,232,391,39],"48691090",19,"Reuben_Santoso",[393,394,47,295,395,39],"48676709",20,"campak",[154,397,47,242,155,39],21,[399,397,39,352,11,33],"48662432",[158,397,47,242,159,39],[402,403,42,235,404,39],"48669472",22,"vivzkestrel",[195,406,39,407,196,39],23,"other\u002Fneutral\u002Fperformance",[409,406,39,407,358,39],"48672516",[58,411,39,412,11,33],24,"project\u002Fneutral\u002Fdesign",[414,411,47,415,416,39],"48661865","maker\u002Fpositive\u002Fidea","awaseem",[418,411,42,412,419,39],"48662515","eyelidlessness",[421,411,39,350,11,33],"48663218",[423,411,47,336,419,39],"48664484",[172,425,42,322,173,39],25,[65,425,39,329,11,33],[],[429,434,438,443,448,452],{"id":430,"name":431,"points":432,"category":433},"48591348","in the Weights",471,"ai",{"id":435,"name":436,"points":437,"category":20},"48645437","TikZ Editor",451,{"id":439,"name":440,"points":441,"category":442},"48616304","Chess-Inspired Roguelike",433,"games",{"id":444,"name":445,"points":446,"category":447},"48608570","TownSquare",278,"web_saas",{"id":449,"name":450,"points":451,"category":442},"48629213","puzzlelair.com",251,{"id":453,"name":454,"points":455,"category":442},"48585739","Gerrymandle",244,false,"v2",{"id":459,"name":5,"line":6,"ai":456,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":460,"top":18,"kw":461,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":462,"url":9,"mix":463,"praise":95,"objection":124,"sub":21},48660267,0.23,[24,25,26,27,28],"0533350000000030011513553000333355530553",[32,32,33,34],1793991157775]