Bun, a nova runtime JavaScript
Bun!
Já ouviu falar do Bun
?
Bun
é uma nova runtime JavaScript desenvolvida para ser um substituto do Node.js. Implementando nativamente centenas de APIs do Node.js e da Web, incluindo fs
, path
, Buffer
e muito mais.
Bun
é um toolkit
para JavaScript e TypeScript, que permite a criação de aplicações web, CLI, e muito mais.
Os três principais objetivos para o desenvolvimento
1 - Velocidade:
Bun
foi desenvolvido para ser rápido. Ela foi estendida do JavaScriptCore, desenvolvido inicialmente para o Safari.
2 - Elegância:
Bun
fornece um pacote mínimo pré-configurado de apis altamente otimizadas para o desenvolvimento de tasks comuns, como inicialização de um servidor HTTP e escrita de arquivos.
3 - DX coeso:
Bun
é um toolkit completo para o desenvolvimento de apps JavaScript, incluindo gerenciamento de pacotes, testes runners e bundlers.
Pontos altos do Bun
-
Drop-in Node.js compatibility: Bun busca compatibilidade completa com a API Node.js. A maioria dos pacotes npm destinados a ambientes Node.js funcionarão com Bun imediatamente; a melhor maneira de saber com certeza é experimentá-lo.
-
Trabalha com
node_modules
: ComBun
, ainda é possível utilizarnode_modules
epackage.json
para gerenciar dependências. -
Web-standard APIs: Bun implementou algumas apis padrões que são muito utilizadas, como
fetch
,ReadableStream
,Request
,Response
,WebSocket
eFormData
. -
Fast running performance: Bun herdou a engine do
JavaScriptCore
, engine criada para o Safari, com funcionalidades nativas de velocidade construídos em Zig -
Sem mais loucuras: Não há necessidade de entender como funciona
CommonJS
,ESM
, extensão de arquivos, prioridade para resolução e configurações dopackage.json
.Bun
apenas funciona. -
JSX: JSX funciona perfeitamente. Bun intermanete transpila a sintaxe JSX para vanilla JS, como TS. Bun suporta React por padrão mas respeita
custom
JSX transform definido no tsconfig.json. -
TypeScript: TS por padrão, podendo executar arquivos
.ts
e.tsx
sem configuração adicional, respeitando otsconfig.json
. -
Watch mode: O CLI
bun run
providencia uma flag--watch
que automaticamente reinicia a aplicação quando um arquivo é modificado.
Benchmark
Comparação com Node.js e Deno
Server-side rendering
Websocket chat server
Query Data
Instalação
curl -fsSL https://bun.sh/install | bash
# para macOS, Linux, e WSL
QuickStart
Crie uma pasta hello-bun
e entre nela:
mkdir hello-bun && cd hello-bun
Execute o comando $ bun init
Ao término do processo vai ser gerado os arquivos iniciais de configuração e um arquivo index.ts
Abra o arquivo index.ts
e substitua o conteúdo por:
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Bun!");
},
});
console.log(`Listening on http://localhost:${server.port} ...`);
Execute no terminal $ bun index.ts
Uma mensagem vai aparecer: Listening on http://localhost:3000 ...
Isso indica que o servidor está pronto e executando na porta 3000.
bun run
é aproximadamente 28x mais rápido que npm run
(6ms vs 170ms de overhead).
Conclusão
O objetivo do Bun
é executar a maioria das aplicações server-side JavaScrpit e providenciar ferramentas para performance, reduzindo complexidade e aumentando a produtividade do desenvolvedor.
Para um primeiro olhar a ferramenta parece ser muito promissora, mas não acredito que vá substituir o Node, é muito cedo para afirmar algo assim. Node já é bastante robusto, possui 14 anos que estão no mercado com milhares de aplicações em produção e uma comunidade gigantesca. Bun
está dando seus primeiros passos, assim como o Deno
Ainda não tenho uma opinião forte sobre o Bun
, mas acredito que vale a pena acompanhar o projeto e ver como ele vai evoluir. Com o tempo irei trazer novidades e testes com a ferramenta.
Mas para saber se ela é boa ou não, só testando e vendo como ela se comporta. Todavia não recomendo o uso em produção, ainda é muito cedo para isso e a v1.0 foi lançada a pouco tempo.
Mas é ótimo ver novas ferramentas surgindo e trazendo novas possibilidades para o desenvolvimento de aplicações JavaScript.