PocketBase: backend open source em um único arquivo
(pocketbase.io)- PocketBase reúne banco de dados em tempo real, autenticação, armazenamento de arquivos e painel administrativo em um único arquivo, permitindo montar pequenos backends rapidamente
- O banco de dados integrado oferece construtor de esquema, validação de dados, assinaturas em tempo real e API REST, reduzindo a necessidade de configurar um backend separado
- O gerenciamento de usuários oferece cadastro com e-mail/senha e cadastro via OAuth2, com suporte a Google, Facebook, GitHub e GitLab
- Os arquivos podem ser armazenados localmente ou em armazenamento S3, e é possível anexar mídia a registros do banco de dados ou gerar miniaturas instantaneamente
- É possível começar como um app independente e depois expandir com hooks em Go e JavaScript, facilitando a criação de um backend portátil personalizado
Recursos de backend em um único arquivo
- PocketBase é um backend open source que oferece banco de dados em tempo real, autenticação, armazenamento de arquivos e painel administrativo em um único arquivo
-
Banco de dados integrado
- Inclui um banco de dados integrado com foco em desempenho e construtor de esquema
- Oferece validação de dados, assinaturas em tempo real e uma API REST fácil de usar
Autenticação e cadastro de usuários
- É possível gerenciar os usuários do app e processar cadastro baseado em e-mail/senha
- Também oferece suporte a cadastro via OAuth2, incluindo Google, Facebook, GitHub e GitLab
Armazenamento de arquivos e processamento de mídia
- Os arquivos podem ser armazenados localmente ou em armazenamento S3
- É possível anexar mídia a registros do banco de dados e gerar miniaturas instantaneamente
Forma de uso e expansão
- O PocketBase pode ser usado como um app independente
- Se usado como framework, pode ser expandido com hooks em Go e JavaScript
- Dessa forma, fica fácil criar um backend portátil personalizado
Exemplo de JavaScript SDK
- O JavaScript SDK importa
PocketBasee cria um cliente com um endereço comohttp://127.0.0.1:8090 - Com
pb.collection('example').getList()é possível consultar e buscar a lista de registros da coleção- O exemplo usa o filtro
title != "" && created > "2022-08-01"e a ordenação-created,title
- O exemplo usa o filtro
getOne('RECORD_ID'),delete('RECORD_ID')ecreate()realizam consulta, exclusão e criação de um único registro- Com
subscribe('*', ...)é possível assinar alterações nos registros da coleção, e comunsubscribe()interromper a assinatura
1 comentários
Comentários no Hacker News
Usei o PocketBase como backend/banco de dados de um app e ele foi excelente; no frontend estou usando React e Vite
Uso principalmente para autenticação e para acompanhar contas pagas/gratuitas. A hospedagem é muito fácil, e deu menos trabalho do que hospedar Appwrite ou Supabase por conta própria. O Supabase, em especial, foi complicado; o Appwrite consegui subir rapidamente com CapRover, mas era exagerado para o que eu precisava
Com view collections, foi fácil retornar só uma parte dos dados necessários, e estou usando isso, por exemplo, para fazer join entre as coleções de usuários e usuários pagos e retornar apenas o período pago: https://pocketbase.io/docs/collections/#view-collection
Como é possível estender em Go ou JS, se os requisitos não forem complexos, parece até dar para dispensar completamente um backend: https://pocketbase.io/docs/use-as-framework/
Estou desenvolvendo com PocketBase há 2 meses e devo entrar em produção em 1 ou 2 meses
Ao criar um webapp para a empresa de um amigo, eu queria um sistema simples, fácil de entregar, e tudo roda em um único PocketBase como binário único. O servidor web, JavaScript do lado do servidor (TypeScript compilado) e o banco SQLite ficam em um único processo, hospedado na Vultr por US$ 12 por mês. O frontend foi feito com adaptador estático do SvelteKit + Svelte + TypeScript
O PocketBase é bem feito, e o autor respondeu às perguntas de forma muito rápida e clara. Ainda assim, a documentação tem algumas lacunas, tive de escrever meu próprio carregador de CSV, e gravar muitos objetos pela interface CRUD é lento. Dá para gravar mais rápido com código do lado do servidor. Também tive de encaixar meio à força testes unitários para o JavaScript do lado do servidor, e fica a frustração de que Copilot/ChatGPT poderiam responder melhor às perguntas
Há também algumas particularidades: não há como configurar a página 404 do servidor web, e a localização do binário no sistema de arquivos é importante. São partes projetadas para o uso do próprio autor, então é preciso aceitar essas escolhas
Mesmo assim, encaixou exatamente nos requisitos. É simples, e pude escrever todo o código em uma única linguagem, TypeScript. Não é de alta performance, mas eu não precisava disso; quando esse trabalho terminar, penso em fazer um projeto paralelo também com PocketBase. É fácil nesse nível. Como parte do contrato, a empresa do meu amigo também decidiu doar para o PocketBase
Estou usando PocketBase em produção há alguns meses, com alpinejs no frontend
A filosofia de desenvolvimento bate exatamente com o que eu queria. É um software agradável e pragmático que cumpre bem seu propósito real, e melhora toda semana sem inchar de funcionalidades
Porém, à medida que ele se torna mais mainstream, as discussões e issues parecem ficar cada vez mais cansativas, então me preocupo que o autor acabe em burnout tentando manter o mesmo nível de suporte que ofereceu até agora
Se você está ganhando dinheiro com isso, recomendo fortemente apoiar o projeto no Open Collective
Acompanho o PocketBase desde o início, e o melhor deste projeto é que ele evita complexidade ativamente e se concentra em uma abordagem simples e minimalista
A facilidade de fazer deploy apenas colocando um único binário no servidor também é atraente. Depois que o suporte a JavaScript entrou no backend, senti que ele virou um candidato sério para desafiar frameworks como Remix e Next.js. Estou ansioso pelo v1
Na verdade, eu poderia ter buscado todos os dados e processado no Node, mas resolver dentro do PocketBase foi simples o bastante. Não acho que ele substitua Next ou Remix, mas recomendo fortemente adicioná-lo à stack para simplificar
Eu estava procurando um frontend que pudesse usar diretamente em cima de um banco SQLite. Apaguei o Vivino porque havia mais de 800 parceiros com quem meus dados eram compartilhados
Como quero projetar e armazenar minha coleção de vinhos, a combinação de um executável único que posso manter no notebook e incluir no backup, uma interface administrativa e um banco de dados parece exatamente o que eu queria. É por isso que sempre acabo voltando ao HN
É bom ver tantos projetos open source bons surgindo nessa área. Grist e NocoDB também merecem menção; os dois têm foco maior em gerenciamento de banco de dados
Também impressiona o fato de oferecerem formas muito simples de começar, seja como arquivo único ou via Electron
https://github.com/gristlabs
https://nocodb.com/
Dei uma olhada na documentação, mas não ficou claro como algumas coisas são tratadas
Por exemplo, tenho dúvidas sobre controle de acesso em nível de linha para que usuários acessem apenas seus próprios dados, integrações externas como envio de e-mail ou triggers, exportação/importação de CSV e internacionalização. Gostaria de saber se tudo isso é possível e intuitivo, ou se tudo exige extensões em Go ou JS. A ferramenta em si parece boa
Como outra pessoa comentou, dá para controlar acesso por linha com regras de API. Também é possível enviar e-mail, configurar timers e enviar requisições para outro servidor web. Não usei pessoalmente, mas há documentação: https://pocketbase.io/docs/js-sending-emails/
A importação de CSV tive de escrever por conta própria, e estou pensando em publicar como open source. Internacionalização depende de que recurso você quer, mas, em geral, parece mais algo do lado do frontend
API Rules: https://pocketbase.io/docs/api-rules-and-filters/#api-rules
Hooks: https://pocketbase.io/docs/js-overview/
O painel administrativo tem backup de dados e importação/exportação de esquemas de coleção
O restante, exceto e-mails de autenticação, geralmente exige extensão, mas a forma mais simples de extensão é algo como adicionar funções JavaScript comuns a eventos do ciclo de vida dos registros. Normalmente elas rodam antes ou depois de inserções/atualizações/exclusões. Várias APIs Go para operações de sistema de arquivos, criptografia, HTTP e e-mail são expostas ao runtime JavaScript
Internacionalização pode ser tratada com templates e banco de dados
Entre todos os PaaS que já usei, incluindo Supabase e Appwrite, o PocketBase foi o melhor. Tem bom desempenho, recursos intuitivos, é realmente auto-hospedável e fazer deploy é prazeroso
Estou usando PocketBase há alguns meses em produção em um app mobile, e até agora tem sido muito agradável
Usando junto com o JS SDK, ele passou a ser minha escolha padrão de framework de backend para todos os casos que não precisam de bibliotecas especiais, como machine learning
O PocketBase é ótimo, então fiz um pequeno starter para Nuxt 3: https://github.com/fayazara/pocketbase-nuxt
O exemplo inclui autenticação, regras de rota, operações CRUD, eventos em tempo real e storage. Precisa de refatoração, mas foi muito divertido trabalhar nisso, e quero adicionar assinaturas com Stripe para levar as regras de rota até o limite. Ainda não sei como, mas vou descobrir