6 pontos por GN⁺ 2024-01-08 | 1 comentários | Compartilhar no WhatsApp
  • 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 PocketBase e cria um cliente com um endereço como http://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
  • getOne('RECORD_ID'), delete('RECORD_ID') e create() realizam consulta, exclusão e criação de um único registro
  • Com subscribe('*', ...) é possível assinar alterações nos registros da coleção, e com unsubscribe() interromper a assinatura

1 comentários

 
GN⁺ 2024-01-08
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/

    • Vale reforçar ainda mais o ponto de que a hospedagem é muito fácil. É algo no nível de enviar um único binário para o servidor e já começar a usar; eu gostaria que mais ferramentas fossem simples assim
  • 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

    • Fiquei curioso para saber quais outras tecnologias você está usando na stack
  • 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

    • Agora uso PocketBase em praticamente tudo que precisa de backend. Uma vez precisei escrever um join SQL manualmente, e foi surpreendentemente fácil escrever a query com parâmetros na URL e selecionando apenas com base no usuário autenticado
      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/

    • Não conhecia nenhum dos dois. Tenho usado Baserow para projetos pequenos, mas, nesses casos, PocketBase parece se encaixar muito melhor
  • 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

    • Estou desenvolvendo com PocketBase há 2 meses
      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
    • Veja regras de API e hooks
      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 primeiro item, autenticação/controle de acesso, é tratado com regras de filtro mesmo no framework básico, sem extensões
      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