Bun.js REST API: do zero ao CRUD com Elysia
A criar uma API REST real usando Bun.js, ElysiaJS e SQLite, com código moderno, performance absurda e integração nativa. O passo a passo que faltava para quem quer
Por que isso é importante
Bun.js REST API com Elysia + SQLite: `bun init` → `bun add elysia` → rotas tipadas → `t.Object` (TypeBox) → `bun:sqlite` CRUD. Runtime rápido; valide libs nativas antes de migrar produção.
Leitura relacionada: curso de Bun.js · API do zero com Bun e Elysia · curso de Node.js · Clean Vertical Sliced Architecture · como criar API REST com Node.js.
O que você vai construir: REST API com Bun
Você vai construir uma REST API de livros com CRUD: Bun (runtime) + Elysia (rotas tipadas) + bun:sqlite. Do `bun init` ao teste no Postman/cURL.
Atenção
O Bun.js evolui rápido. Instale sempre a versão estável mais recente para evitar erros de sintaxe ou de dependências. Consulte a documentação oficial antes de rodar comandos destrutivos.
Instalar Bun.js e preparar o ambiente
Você precisa do runtime instalado. Para rodar em qualquer SO, execute no terminal: curl -fsSL https://bun.sh/install | bash . Após instalar, reinicie o terminal. Teste: bun --version .
Instalação falhou?
Se sua máquina não reconhece bun , revise as variáveis de ambiente $PATH ou consulte a documentação oficial.
Iniciando seu Projeto: bun init
Rode bun init na pasta do projeto e preencha os dados. Escolha index.ts como entrada principal. Crie desde já interfaces.ts e db.ts na raiz — organização importa desde o início.
Dica
Manter uma estrutura organizada acelera a escalabilidade do seu código e evita retrabalho quando sua API crescer.
ElysiaJS: framework tipado no Bun.js
ElysiaJS é o framework tipado no Bun: `bun add elysia`, rotas com tipos e validação TypeBox. Minimalista como Express, alinhado ao runtime Bun.
Primeiro código: API básica rodando em minutos
No index.ts , adicione:
Atenção
Sempre use rotas REST em minúsculo, sem acentos. Isso evita que clientes HTTP retornem erros inesperados.
CRUD REST: rotas tipadas
Defina as rotas clássicas CRUD. O Elysia permite declarar de forma expressiva e enxuta:
Rotas /livros
Validação com t.Object (TypeBox)
No Elysia, valide body/params com TypeBox via t.Object — padrão que tutoriais (Apidog/SimoneCannella) e o curso-bunjs usam. Exemplo ilustrativo:
app.post('/livros', ({ body }) => db.insert(body), { body: t.Object({ titulo: t.String({ minLength: 1 }), ano: t.Number() }) }) — request sem titulo → 422/validação antes do handler. Params: t.Object({ id: t.String() }) no GET /livros/:id.
Escopo deste artigo: CRUD deployável com validação. JWT/auth fica capítulo opcional no curso — não misture OAuth aqui só para alongar.
Scripts: modo dev automático com hot reload
No package.json , acrescente: Rode bun run dev para desenvolvimento. Ajustes refletem em tempo real.
Recarregar rápido?
O hot reload nativo elimina o tempo de espera. Salve e veja alterações na hora.
Defina o modelo: Interface <em>Livro</em> em TypeScript
Em interfaces.ts :
Modelar dados evita bugs
Tipagem forte do TypeScript previne falhas na manipulação dos registros na API. Use e abuse das interfaces.
bun:sqlite: banco embutido
Instale via bun add bun:sqlite . Em db.ts , crie a classe BookDB que inicializa a tabela de livros e encapsula métodos de acesso ao banco. Exemplo:
Evite SQL Injection
Sempre use binds $param em vez de concatenação direta ao construir queries SQLite no Bun.js.
Integrar: rotas + model + SQLite
Importe o BookDB no index.ts . Para cada rota, chame os métodos da classe conforme o verbo HTTP e retorne o resultado como JSON. Lembre-se do await em métodos assíncronos.
Status HTTP corretos
Sempre retorne o status correto: 200 para sucesso, 201 para criado, 404 para não encontrado, 500 para erro interno.
Testando sua API: use Postman, Insomnia ou cURL
Faça requisições GET , POST , PUT e DELETE pelo Postman. Teste: /livros (tudo), /livros/:id (um), e os demais endpoints CRUD com body em JSON.
Erros comuns no Postman
Se criar ou editar não funciona, revise os métodos e corpos das requisições. Muitos problemas vêm de payload mal formatado (JSON inválido).
Debug: como corrigir erros rápidos em Bun.js
Use console.log intensamente nas rotas e antes dos comandos de acesso ao banco. O runtime exibe logs detalhados no terminal, acelerando seu diagnóstico.
Banco limpo: não repita dados, controle resets com scripts
Crie scripts especiais para zerar ou popular o banco, assim você evita poluir sua API de produção com dados dummy ou duplicados durante os testes.
Deploy: deixar a API portátil
Versione books.db para ambientes de desenvolvimento. Para deploy real, monte um script para criar o banco em cloud ou servidor privado. Planeje variáveis de ambiente e proteja dados sensíveis.
Próximos passos: curso-bunjs e além
Transforme este projeto base numa API real para sua necessidade — filmes, clientes, produtos. Poste, compartilhe e assista a mais códigos direto no canal Dev Doido no YouTube. Aja enquanto está fresco na cabeça!
Aprenda fazendo
Não existe código mágico: só se aprende backend moderno praticando, errando, refazendo.
Fontes
Revisão em agosto de 2026. Bun.js e Elysia evoluem rápido — APIs de `bun init`, SQLite e deploy mudam por versão. Tutorial de API REST; valide no changelog do dia.
<a href="https://bun.sh/docs">Bun docs</a>. <a href="https://elysiajs.com/">Elysia</a>. <a href="https://bun.sh/docs/api/sqlite">Bun — SQLite</a>.
Perguntas frequentes
Como criar uma REST API com Bun.js?
Rode bun init, defina rotas HTTP (ex.: Elysia), valide body com schema tipado e persista com bun:sqlite ou outro DB. Depois auth e deploy.
O que é ElysiaJS?
Framework web para Bun com rotas tipadas e validação (TypeBox). Combina bem com bun:sqlite para CRUD rápido em TypeScript.
Bun substitui Node.js?
Em muitos APIs e scripts, sim. Libs com addons nativos Node podem falhar — cheque compatibilidade antes de migrar produção.
Dá para usar SQLite com Bun e Elysia?
Sim via bun:sqlite: abra o DB, decorate no app Elysia e faça CRUD nas rotas. Bom para MVP; migre para Postgres se precisar multi-instância.