Skip to main content

Bun, a nova runtime JavaScript

· 4 min read
Bruno Carneiro

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: Com Bun, ainda é possível utilizar node_modules e package.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 e FormData.

  • 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 do package.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 o tsconfig.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


Benchmark



Websocket chat server


Benchmark



Query Data


Benchmark



Instalação

curl -fsSL https://bun.sh/install | bash # para macOS, Linux, e WSL

Saiba mais

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.

info

bun run é aproximadamente 28x mais rápido que npm run (6ms vs 170ms de overhead).

Saiba mais

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.

Referências

Bun