Nub - toolkit tudo-em-um no estilo do Bun para Node.js
(github.com/nubjs)- Toolkit tudo-em-um que complementa, sem substituir, o Node.js, escrito em Rust e que oferece uma experiência de desenvolvimento semelhante ao Bun sobre o
nodepadrão - Integra em uma única ferramenta execução de arquivos e scripts, instalação de dependências e gerenciamento de versões do Node, sem novo runtime, APIs proprietárias dependentes de fornecedor ou lock-in
- File runner
nub <file>— executa.ts,.tsxetc. sem etapa de build, com compatibilidadeflag-for-flagevar-for-varcomnode, e startup 2,9× mais rápido quetsx- Suporte completo a TypeScript (
enum,namespace), JSX/TSX, Decorators, carregamento automático de.env*e loader embutido para.yaml,.toml,.json5etc. - Detecta e instala automaticamente a versão do Node esperada pelo projeto (consultando
.node-version,.nvmrc,package.json#enginesetc.)
- Suporte completo a TypeScript (
- Script runner
nub run— substituto direto denpm/pnpm run, com binário Rust sem startup próprio em JS e despacho cerca de 24× mais rápido quepnpm run(14.7ms vs 442.7ms)- Suporte completo a hooks
pre/post,--filtere--parallelde workspaces do pnpm etc.
- Suporte completo a hooks
- Package runner
nubx— substituto direto denpxepnpm dlx, removendo a penalidade de spawn duplo do Node e executando cerca de 19× mais rápido quenpx(11ms vs 226ms) - Package manager
nub install— baseado no engine Aube, compatível com as flags dopnpm, 2,5× mais rápido quepnpme 3,7× mais rápido quenpm- Política de segurança padrão embutida — bloqueia postinstall, verifica pacotes maliciosos via osv.dev, rejeita downgrade de provenance e aplica
minimumReleaseAgede 24 horas - Opera em compat-mode, detectando automaticamente lockfiles e configurações de npm/pnpm/Yarn/Bun
- Política de segurança padrão embutida — bloqueia postinstall, verifica pacotes maliciosos via osv.dev, rejeita downgrade de provenance e aplica
- Node version manager
nub node— fornece comandos de gerenciamento manual como install, ls, uninstall e pin de versões - Package meta-manager
nub pm— exerce o papel do Corepack em Rust nativo, registrando shims globais denpm,yarnepnpm - Licença MIT
1 comentários
Comentários no Hacker News
A ideia é muito boa e faz sentido. O Bun oferece mais coisas, como drivers de banco de dados, mas a experiência do desenvolvedor certamente é uma grande parte do apelo
Como referência, o autor principal do Nub é Colin McDonnell, criador do Zod, que também trabalhou no Bun por um tempo
nub:, arquivos de configuração/lockfile com nome do Nub, camponubnopackage.json, nem variáveis de ambienteNUB_Acho que a maior parte do que o Bun acrescentou seria melhor como dependências bem definidas
É surpreendente que ele use um hook
--requireem vez de--import. Pode ser que muita coisa tenha mudado desde quando eu estava analisando como criar algo parecido, mas imagino que possa haver sutilezas no suporte a ESM do NubNa época, o
--importdo Node era muito inicial, e havia várias exceções que eu queria tratar na abordagem comum de ESM para CJS. A maioria provavelmente era bem de nicho, mas acho que top-level await afetaria alguns usuários relevantes--requiretem um overhead de cerca de 0,5 ms, enquanto--importfica em torno de 4,6 ms em um MacBook Pro M1Relacionado a isso, em 2025 o Node.js introduziu recentemente
module.registerHooks(), uma versão síncrona da API de registro de hooks do resolver, para melhorar o desempenho em relação à antiga API assíncronamodule.register(). Para o Nub, isso removeu um grande obstáculo. Para quem tiver interesse: a API assíncrona adicionava um overhead fixo de registro de 19 ms, mais cerca de 130 us de overhead adicional por importA flag que o Nub usa aqui não afeta em nada o código do usuário, e top-level await é suportado onde o próprio Node.js o suporta
Acabei de fazer merge de um PR que migra todo o nosso monorepo para o nub
Zero problemas, e é absurdamente rápido
O Node já não consegue executar TypeScript há algumas versões? Por que é necessário um transformador?
tsconfigIsto parece oferecer suporte tanto ao modo nativo de remoção quanto ao processamento real de TypeScript
--experimental-transform-typesno Node.js v26. Com isso, o suporte completo nativo a TypeScript se torna impossívelhttps://github.com/nodejs/typescript/issues/51#issuecomment-...
WorkereTemporalO README diz que o suporte a WebSocket é nativo a partir do Node 22, mas o Node não tem uma biblioteca WebSocket nativa. O link para o padrão WebSocket leva ao MDN, que descreve apenas a interface de usuário WHATWG, não o protocolo nem como o WebSocket funciona
Parece que algo está faltando, ou que uma biblioteca não nativa é usada como suporte
É respeitável o fato de adotarem a tecnologia existente em vez de recriar uma versão pior dela. Fico imaginando onde o Node estaria hoje, sob uma liderança adequada, se todo o esforço gasto em criar alternativas tivesse ido para ele
Equipes pequenas e ágeis conseguem validar boas ideias porque o fracasso não é um risco fatal. Em resumo, forks fazem parte de um ecossistema saudável
Um exemplo simples: o Node é o único software open source sério que conheço em que não há como documentar a configuração dentro do arquivo de configuração. É absurdo. O pessoal do Node adotou JSON sem pensar muito e, depois disso, se recusou a considerar qualquer alternativa, até mesmo “JSON com comentários”
Quando uma organização fica presa a uma decisão ruim, a única forma de corrigir é começar de novo. Enquanto todo mundo continuar construindo em cima do Node, todo o ecossistema JS ficará sem poder deixar documentação na configuração
Há vários problemas assim no ecossistema Node, e o absurdo total de não poder documentar configuração é apenas um ponto que me incomoda pessoalmente
Sou fã do Nub e do mascote nubnub. Falando sério, é um ótimo projeto e bem interessante; venho testando desde a semana passada, pelo menos desde que ficou público
Inteligente. Se já é escrito em Rust, eles não vão perder todos os clientes tentando migrar para Rust via vibe coding ;)
Além disso, a histeria anti-IA em torno do Bun é muito triste e às vezes até parece uma campanha organizada
package.json