[ Dúvida ] Além do Drizzle ORM, existe algum outro ORM totalmente compatível com TypeScript e Bun?

Dúvida:

Escolher um bom ORM é uma decisão de peso, pois uma vez que implemenar é muito díficl migra-lo para outro ORM, devido a problemas que vocês já devem saber.

O único ORM que eu tive contato foi o Sequelize que é bem fácil de mexer e implementar até certo ponto... Sequelize não tem um suporte legal para TypeScript, apenas uma "ponte" para facilitar, mas nem se compara a algo totalmente escrito em TypeScript. Além disso, não tem suporte a novidade: Bun.

Eu estou iniciando o Back-end de um projeto full-stack para colocar no portfolio, e pensei no Sequelize pois tinha um conhecimento nele, mas eu decidi criar algo mais seguro, limpo e robusto, e obviamente eu pensei logo em procurar algo que tenha suporte a TypeScript e seja mantido.

O projeto utilizá SQLite para armazenamento local. Para armazenamento na Nuvem, eu estou considerando MongoDB no futuro, por causa de costos.

Eu irei escrever tudo em TypeScript, tanto o Front-end, quanto o Back-end. Eu sei que Golang ou Java é um back-end mais robosto, mas foge do meu escopo atual.

Nessas pesquisas eu encontrei o Drizzle, que parece ser tudo o que eu procurei, porém eu estou ainda a procura de alternativas, pois gosto de considerar mais de uma tecnologia antes de tomar a decisão de implementar de fato.

Vocês conhecem alguma alternativa ao Drizzle ou só ele tem suporte a TypeScript e Bun ao mesmo tempo? Eu sei que Bun tem um suporte nativo ao SQLite, porém o meu objetivo nesse projeto é aprender ao menos um ORM completamente, para expandir meu repertório.

Não é a resposta que vc pediu, mas é A resposta se vc quer expandir seu repertório de verdade

Use a api em C nativa do sqlite. Nada de bun::sqlite muito menos ORMs... Use bun::ffi, que inclusive, carregar o sqlite é exemplo da documentação oficial, por que será?!?

Escreva seus próprios "data access objects" DAOs em TS como wrappers ao redor da API do sqlite!!!

Eu estou seguindo mais ou menos a sua dica. Optei por fazer sem `ORM` no fim devido a problemas e devido a seu comentário que abriu minha mente. Eu optei por fazer usando a `API` do Bun para este projeto, e tenho um outro projeto para `Prisma` e mais um que é usando a API Nativa em `C` do SQLite. Organizei por níveis para ir treinando do mais tranquilo até o nível mais baixo. Obrigado pelo o comentário!

Atualmente estou usando o prisma. achei muito facil. ele está sendo usado em projeto grande onde recebo cerca de 50000 mensagens de WhatsApp por mês.

A maior questao ao decidir em relação ao drizzle vs a outros orms, como o lider de mercado hoje que é o prisma, seria a latencia para o cold start do sistema, ou seja, em serviços de banco de dados que usam estratégias de CDN e serverless. Existem outros pros e contras, mas essa seria a maior decisão. Sua arquitetura vai usar algum sistema serverless ou CDN em qualquer ponta? Vai dar deploy em vercel, amplify, etc? Vai usar qual serviço para banco de dados? Isso que tem que ser pesado. Se sim, drizzle é a melhor opcao de longe, ganhando em performance até mesmo uma conexão direta com sqlite que um amigo indicou acima. Se nao, em termos de organização e facilidade de informação e clareza de código, o prisma costuma ser melhor, por isso domina o mercado.

Drizzle tem sido a minha opção número um devido a todas as vantagens. Porém este projeto em especial é feito usando `Bun` completamente. Infelizmente `Drizzle`, apesar de afirmar ter suporte ao `Bun`, não funciona nada bem... O `drizzle-kit` não reconhece a API `bun`, pedindo para instalar o `bettersqlite3`, uma dependência desnecessária apenas para satisfazer o `drizzle`. A pior parte é que eles nunca aprovaram o `pull-request` que resolve isto. No fim optei por usar a `API` do Bun, e ir criando projetos para expandir mais meus conhecimentos com `Prisma` e até API nativa do `SQLite`.

Pelo que pesquisei aqui o Prisma tem. Inclusive na doc do Bun eles falam do prisma: https://bun.sh/guides/ecosystem/prisma

O prisma tem sido muito recomendado, eu dei uma olhada, parece sólido e bem estruturado, entretanto reclamam muito da latência e outras questões. Porém com este link ai que você mandou, cujo eu não encontrei por mim mesmo na `doc` do bun, me deu uma ideia de um outro projeto usando `Prisma`, valeu!
Boa! Aqui na empresa usamos o prisma em produção, e nunca sentimos preblemas de latência com ele. Boa sorte no projeto!

Aqui na empresa usamos Prisma, mas no passado chegamos a testar o TypeORM, mas acho que esse último não é compatível com Bun.

Entre os dois, desconsiderando `Bun`, qual você considera mais eficiente? Eu cheguei a conhecer o `TypeOrm`, mas nunca usei. O `Prisma` me parece ser o pioneiro, porém vejo muito indicativos de ser inferiror quando se trata de performance. Acredito que projetos de larga escala utilize `Prisma` independentemente por ser algo sólido e robosto, apesar dos tradeoff, mas vale a pena discutir mais sobre.
Gostamos de usar o `Prisma` aqui na empresa, é bastante simples e bem robusto realmente. Mas tem essa questão da performance, todo ORM é pesado em relação à comunicação direta com o banco via SQL, alguns mais pesados que outros e o Prisma é um dos mais pesados. Para amenizar esse peso a gente compensa na arquitetura, implementando caches, índices, aumentando um pouco de RAM e processador...

Usa o prisma que não tem erro, integração completa com typescript, sem preocupação de abrir ou fechar conexão com db, suporte a Postgres, SQLite, mongo, mysql.

Ainda consegue buscar toda tipagem do PrismaClient.

Se quiser tirar alguma dúvida manda um email honorio.dev@gmail.com

Prisma tem sido o mais recomendado pela a galera, e sem dúvidas deu vontade de tocar, mas em outro projeto. Neste aqui, no fim, optei pela a API do Bun sem ORM. Foi uma ideia interessante de um carinha mais acima que indicou criar sem um ORM.

O que sempre me pergunto é, porque ainda seguir a estratégia de usar ORM. SQL é uma linguagem tão poderosa e o ORM simplifica o que já é simples, como CRUD, por exemplo, mas torna complexo, feio e muitas vezes lento e pesado as consultas que envolvem joins e subqueries complexos.

Foi exatamente isso que me fez escolher a API nativa do `Bun`. Ele simplifica mais do que a API Nativa em `C`, porém ainda usa `SQL`. Eu tentei o `Drizzle`, mas foi tanta dor de cabeça que eu pensei "para que ORM? Uma camada a mais sendo que eu posso tudo nativo e ainda me desafiar". Apesar disso, o pessoal recomendou `Prisma` e deu vontade de implementar em outro projeto.