PocketBase: backend de código abierto en un solo archivo
(pocketbase.io)- PocketBase integra en un solo archivo una base de datos en tiempo real, autenticación, almacenamiento de archivos y un panel de administración para crear rápidamente backends pequeños
- La base de datos integrada ofrece constructor de esquemas, validación de datos, suscripciones en tiempo real y una API REST, lo que reduce la carga de montar un backend por separado
- La gestión de usuarios admite registro con correo electrónico/contraseña y registro con OAuth2, con soporte para Google, Facebook, GitHub y GitLab
- Los archivos pueden guardarse localmente o en almacenamiento S3, y es posible adjuntar medios a registros de la base de datos o generar miniaturas al instante
- Se puede empezar como una app independiente y luego ampliarse con hooks de Go y JavaScript, lo que facilita crear un backend portátil personalizado
Funciones de backend en un solo archivo
- PocketBase es un backend de código abierto que ofrece en un solo archivo una base de datos en tiempo real, autenticación, almacenamiento de archivos y un panel de administración
-
Base de datos integrada
- Incluye un constructor de esquemas en una base de datos integrada con énfasis en el rendimiento
- Proporciona validación de datos, suscripciones en tiempo real y una API REST fácil de usar
Autenticación y registro de usuarios
- Permite administrar usuarios de la app y procesar registros basados en correo electrónico/contraseña
- También admite registro con OAuth2, incluyendo Google, Facebook, GitHub y GitLab
Almacenamiento de archivos y procesamiento de medios
- Los archivos pueden almacenarse localmente o en almacenamiento S3
- Se pueden adjuntar medios a registros de la base de datos y generar miniaturas al instante
Forma de uso y ampliación
- PocketBase puede usarse como una app independiente
- Si se aprovecha como framework, puede ampliarse con hooks de Go y JavaScript
- De esta forma, es fácil crear un backend portátil personalizado
Ejemplo del SDK de JavaScript
- El SDK de JavaScript importa
PocketBasey crea un cliente con una dirección comohttp://127.0.0.1:8090 - Con
pb.collection('example').getList()se puede consultar y buscar la lista de registros de una colección- El ejemplo usa el filtro
title != "" && created > "2022-08-01"y el orden-created,title
- El ejemplo usa el filtro
- Con
getOne('RECORD_ID'),delete('RECORD_ID')ycreate()se realizan la consulta, eliminación y creación de un solo registro - Con
subscribe('*', ...)se pueden suscribir cambios en los registros de la colección, y conunsubscribe()se detiene la suscripción
1 comentarios
Opiniones en Hacker News
Probé PocketBase como backend/base de datos de una app y me pareció excelente; en el frontend estoy usando React y Vite.
Lo uso principalmente para autenticación y para llevar el seguimiento de cuentas de pago/gratuitas. Es muy fácil de hostear y fue menos pesado que autohostear Appwrite o Supabase. Supabase en particular fue complicado, y Appwrite pude levantarlo rápido con CapRover, pero era demasiado para lo que necesitaba.
Con las colecciones de vista fue fácil devolver solo una parte de los datos que necesitaba; lo estoy usando, por ejemplo, para unir la colección de usuarios con la de usuarios de pago y devolver solo el período pago: https://pocketbase.io/docs/collections/#view-collection
Como se puede extender con Go o JS, si los requisitos no son complicados parece posible omitir por completo el backend: https://pocketbase.io/docs/use-as-framework/
Llevo 2 meses desarrollando con PocketBase y planeo pasarlo a producción dentro de 1 o 2 meses.
Estoy creando una webapp para la empresa de un amigo y quería un sistema simple que fuera fácil de entregar; todo corre con un solo PocketBase, que es un binario único. El servidor web, JavaScript del lado del servidor (TypeScript compilado) y la base de datos SQLite están en un solo proceso, y lo estoy hosteando en Vultr por 12 dólares al mes. El frontend está hecho con el adaptador estático de SvelteKit + Svelte + TypeScript.
PocketBase está bien hecho, y el autor respondió preguntas con mucha rapidez y claridad. Dicho eso, la documentación tiene algunos huecos, tuve que escribir yo mismo el cargador de CSV, y escribir muchos objetos mediante la interfaz CRUD es lento. Con código del lado del servidor se puede escribir más rápido. También tuve que encajar a la fuerza las pruebas unitarias para JavaScript del lado del servidor, y me queda la sensación de que sería bueno que Copilot/ChatGPT respondieran mejor las preguntas.
También hay peculiaridades: no hay forma de configurar la página 404 del servidor web, y la ubicación del binario en el sistema de archivos importa. Son partes diseñadas según el uso del propio autor, así que hay que aceptar esas decisiones.
Aun así, encajó exactamente con mis requisitos. Es simple y pude escribir todo el código en un solo lenguaje, TypeScript. No es de alto rendimiento, pero no lo necesitaba; cuando termine el trabajo, pienso hacer también un proyecto paralelo con PocketBase. Así de fácil es. Como parte del contrato, la empresa de mi amigo también acordó donar a PocketBase.
Llevo varios meses usando PocketBase en producción, con alpinejs en el frontend.
Su filosofía de desarrollo encaja exactamente conmigo. Es software agradable y práctico, que cumple bien un propósito real, y mejora cada semana sin inflarse de funcionalidades.
Dicho eso, a medida que se vuelve más mainstream veo que las discusiones y los issues se están volviendo cada vez más agotadores, y me preocupa que el autor termine con burnout intentando mantener el nivel de soporte que ha ofrecido hasta ahora.
Si alguien gana dinero con esto, recomiendo firmemente apoyar el proyecto en Open Collective.
He seguido PocketBase desde sus inicios, y lo mejor del proyecto es que evita activamente la complejidad y se enfoca en un enfoque simple y minimalista.
También es atractivo lo fácil que es desplegarlo: basta con subir un único binario al servidor. Desde que se agregó soporte para JavaScript en el backend, siento que se convirtió en un candidato serio para competir con frameworks como Remix y Next.js. Espero con ganas la v1.
La verdad, también podría haber traído todos los datos y procesarlos en Node, pero resolverlo dentro de PocketBase fue lo suficientemente simple. No diría que reemplaza a Next o Remix, pero lo recomiendo mucho para agregarlo al stack y simplificarlo.
Estaba buscando un frontend que pudiera montarse directamente sobre una base de datos SQLite. Borré Vivino porque había más de 800 socios con los que se compartían mis datos.
Como quiero diseñar y guardar mi colección de vinos, la combinación de un único ejecutable, una interfaz de administración y una base de datos que pueda tener en mi laptop e incluir en mis backups parece justo lo que quería. Por eso siempre vuelvo a HN.
Da gusto ver que aparecen muchos buenos proyectos open source en este espacio. También vale la pena mencionar Grist y NocoDB; ambos están más enfocados en la administración de bases de datos.
Me impresiona que también ofrezcan una forma de empezar muy simple, como un archivo único o en formato Electron.
https://github.com/gristlabs
https://nocodb.com/
Revisé la documentación por encima y no me queda claro cómo maneja algunas cosas.
Por ejemplo, me interesa el control de acceso a nivel de fila para que los usuarios solo accedan a sus propios datos, integraciones externas como envío de emails o triggers, exportación/importación de CSV e internacionalización. Quisiera saber si todo eso es posible e intuitivo, o si todo requiere extensiones en Go o JS. La herramienta en sí se ve bien.
Como dijo otra persona, se puede controlar el acceso por fila con reglas de API. También se puede enviar emails, configurar timers y hacer requests a otros servidores web. No lo probé personalmente, pero hay documentación: https://pocketbase.io/docs/js-sending-emails/
La importación de CSV tuve que escribirla yo mismo, y estoy pensando en publicarla como open source. La internacionalización depende de qué funcionalidad quieras, pero en general parece más algo del lado del frontend.
API Rules: https://pocketbase.io/docs/api-rules-and-filters/#api-rules
Hooks: https://pocketbase.io/docs/js-overview/
El panel de administración incluye backup de datos e importación/exportación de esquemas de colecciones.
El resto, salvo los emails de autenticación, por lo general requiere extensión, pero la forma más simple de extenderlo es agregar funciones JavaScript comunes a eventos del ciclo de vida de los registros. Normalmente se ejecutan antes o después de insertar/modificar/eliminar. Varias API de Go para tareas de sistema de archivos, criptografía, HTTP y email están expuestas al runtime de JavaScript.
La internacionalización se puede manejar con plantillas y la base de datos.
De todos los PaaS que probé, incluidos Supabase y Appwrite, PocketBase fue el mejor. Tiene buen rendimiento, sus funcionalidades son intuitivas, realmente se puede autohostear y desplegarlo es un placer.
Llevo varios meses usando PocketBase en producción para una app móvil y hasta ahora ha sido muy agradable.
Al usarlo junto con el SDK de JS, ahora lo elijo como mi framework de backend por defecto para todos los casos en los que no necesito librerías especiales como machine learning.
PocketBase es excelente, así que hice un pequeño starter para Nuxt 3: https://github.com/fayazara/pocketbase-nuxt
El ejemplo incluye autenticación, reglas de rutas, operaciones CRUD, eventos en tiempo real y almacenamiento. Necesita refactorización, pero fue realmente divertido trabajar en él, y quiero agregarle suscripciones con Stripe para llevar las reglas de rutas hasta sus límites. Todavía no sé cómo, pero lo voy a investigar.