PocketBase : un backend open source en un seul fichier
(pocketbase.io)- PocketBase permet de mettre en place rapidement de petits backends en regroupant dans un seul fichier une base de données temps réel, l’authentification, le stockage de fichiers et un tableau de bord d’administration
- La base de données intégrée fournit un schema builder, la validation des données, les abonnements temps réel et une API REST, réduisant la charge liée à la configuration d’un backend séparé
- La gestion des utilisateurs prend en charge l’inscription par e-mail/mot de passe ainsi que l’inscription OAuth2, avec Google, Facebook, GitHub et GitLab
- Les fichiers peuvent être stockés en local ou dans un stockage S3, et il est possible d’attacher des médias aux enregistrements de la base de données ou de générer instantanément des miniatures
- On peut commencer comme application autonome, puis l’étendre avec des hooks Go et JavaScript, ce qui facilite la création d’un backend portable personnalisé
Des fonctionnalités backend dans un seul fichier
- PocketBase est un backend open source qui fournit dans un fichier unique une base de données temps réel, l’authentification, le stockage de fichiers et un tableau de bord d’administration
-
Base de données intégrée
- La base de données intégrée, axée sur les performances, inclut un schema builder
- Elle fournit la validation des données, les abonnements temps réel et une API REST facile à utiliser
Authentification et inscription des utilisateurs
- Il permet de gérer les utilisateurs de l’application et de traiter les inscriptions basées sur e-mail/mot de passe
- Il prend aussi en charge l’inscription OAuth2, notamment avec Google, Facebook, GitHub et GitLab
Stockage de fichiers et traitement des médias
- Les fichiers peuvent être stockés en local ou dans un stockage S3
- Il est possible de joindre des médias aux enregistrements de la base de données et de générer instantanément des miniatures
Utilisation et extension
- PocketBase peut être utilisé comme application autonome
- Utilisé comme un framework, il peut être étendu avec des hooks Go et JavaScript
- Cette approche permet de créer un backend portable personnalisé
Exemple de SDK JavaScript
- Le SDK JavaScript importe
PocketBaseet crée un client avec une adresse commehttp://127.0.0.1:8090 pb.collection('example').getList()permet de récupérer et de rechercher la liste des enregistrements d’une collection- L’exemple utilise le filtre
title != "" && created > "2022-08-01"et le tri-created,title
- L’exemple utilise le filtre
getOne('RECORD_ID'),delete('RECORD_ID')etcreate()permettent respectivement de récupérer, supprimer et créer un enregistrement uniquesubscribe('*', ...)permet de s’abonner aux changements des enregistrements d’une collection, etunsubscribe()d’arrêter l’abonnement
1 commentaires
Avis sur Hacker News
J’ai utilisé PocketBase comme backend/base de données pour une app, et c’était excellent ; côté frontend, j’utilise React et Vite.
Je m’en sers surtout pour l’authentification et le suivi des comptes payants/gratuits. L’hébergement est très simple, et c’était moins lourd que d’auto-héberger Appwrite ou Supabase. Supabase en particulier était pénible ; Appwrite a pu être lancé rapidement avec CapRover, mais c’était excessif par rapport à mes besoins.
Les collections de vues permettaient de renvoyer facilement seulement une partie des données nécessaires ; je les utilise par exemple pour joindre les collections des utilisateurs et des utilisateurs payants afin de ne renvoyer que la période payante : https://pocketbase.io/docs/collections/#view-collection
Comme on peut l’étendre en Go ou en JS, il semble même possible de se passer complètement de backend si les besoins ne sont pas trop complexes : https://pocketbase.io/docs/use-as-framework/
Je développe avec PocketBase depuis 2 mois, et je prévois de passer en production d’ici 1 à 2 mois.
En créant une web app pour l’entreprise d’un ami, je voulais un système simple, facile à transmettre, et tout tourne avec un seul PocketBase sous forme de binaire unique. Le serveur web, le JavaScript côté serveur (TypeScript compilé) et la base de données SQLite sont dans un seul processus, hébergé chez Vultr pour 12 dollars par mois. Le frontend est écrit avec l’adaptateur statique SvelteKit + Svelte + TypeScript.
PocketBase est bien conçu, et l’auteur a répondu aux questions très vite et très clairement. Cela dit, la documentation a quelques lacunes, j’ai dû écrire moi-même le chargeur CSV, et l’interface CRUD devient lente quand on écrit beaucoup d’objets. On peut écrire plus vite via du code côté serveur. J’ai aussi dû bricoler pour intégrer des tests unitaires JavaScript côté serveur, et j’aurais aimé que Copilot/ChatGPT répondent mieux aux questions.
Il y a aussi quelques particularités : impossible de configurer la page 404 du serveur web, et l’emplacement du binaire dans le système de fichiers est important. Certaines parties ont été conçues pour l’usage personnel de l’auteur, il faut donc accepter ces choix.
Malgré tout, cela correspondait exactement aux besoins. C’est simple, et tout le code pouvait être écrit dans un seul langage, TypeScript. Ce n’est pas très performant, mais je n’en avais pas besoin ; une fois le travail terminé, je compte aussi réaliser un projet perso avec PocketBase. C’est aussi simple que ça. Dans le cadre du contrat, l’entreprise de mon ami a également accepté de faire un don à PocketBase.
J’utilise PocketBase en production depuis plusieurs mois, avec alpinejs côté frontend.
Sa philosophie de développement me convient parfaitement. C’est un logiciel agréable et pragmatique, qui remplit bien son objectif réel, et il s’améliore chaque semaine sans accumulation excessive de fonctionnalités.
En revanche, à mesure qu’il devient plus grand public, les discussions et les issues semblent devenir de plus en plus fatigantes ; je crains que l’auteur ne finisse en burnout en essayant de maintenir le niveau de support fourni jusqu’ici.
Si vous gagnez de l’argent avec, je recommande vivement de soutenir le projet sur Open Collective.
Je suis PocketBase depuis ses débuts, et le meilleur aspect de ce projet est qu’il évite activement la complexité pour se concentrer sur une approche simple et minimale.
La facilité de déploiement, qui consiste simplement à déposer un binaire unique sur un serveur, est aussi très séduisante. Depuis l’ajout du support JavaScript côté backend, j’ai l’impression que c’est devenu un candidat sérieux face à des frameworks comme Remix ou Next.js. J’attends la v1 avec impatience.
En réalité, j’aurais pu récupérer toutes les données et les traiter dans Node, mais le faire dans PocketBase était suffisamment simple. Je ne dirais pas que cela remplace Next ou Remix, mais je le recommande vivement pour l’ajouter à une stack et la simplifier.
Je cherchais un frontend pouvant être posé directement sur une base de données SQLite. J’ai supprimé Vivino, car il y avait plus de 800 partenaires avec lesquels mes données étaient partagées.
Pour concevoir et stocker ma collection de vins, la combinaison fichier exécutable unique, interface d’administration et base de données, que je peux garder sur mon ordinateur portable et inclure dans mes sauvegardes, semble exactement correspondre à ce que je voulais. Voilà pourquoi je reviens toujours sur HN.
C’est agréable de voir autant de bons projets open source apparaître dans ce domaine. Grist et NocoDB méritent aussi d’être mentionnés ; ils sont davantage centrés sur la gestion de bases de données.
Leur mode de démarrage, très simple, sous forme de fichier unique ou d’application Electron, est également impressionnant.
https://github.com/gristlabs
https://nocodb.com/
J’ai parcouru la documentation, mais je ne vois pas clairement comment certaines choses sont gérées.
Par exemple, je m’interroge sur le contrôle d’accès au niveau des lignes pour que les utilisateurs n’accèdent qu’à leurs propres données, les intégrations externes comme l’envoi d’e-mails ou les déclencheurs, l’export/import CSV et l’internationalisation. J’aimerais savoir si tout cela est possible et intuitif, ou si tout nécessite des extensions en Go ou JS. L’outil lui-même a l’air bien.
Comme d’autres l’ont dit, on peut contrôler l’accès aux lignes avec les règles d’API. Il est aussi possible d’envoyer des e-mails, de configurer des timers et d’envoyer des requêtes vers d’autres serveurs web. Je ne l’ai pas utilisé moi-même, mais il y a de la documentation : https://pocketbase.io/docs/js-sending-emails/
J’ai dû écrire moi-même l’import CSV, et j’envisage de le publier en open source. Pour l’internationalisation, cela dépend de la fonctionnalité voulue, mais dans l’ensemble ça ressemble plutôt à quelque chose côté frontend.
API Rules : https://pocketbase.io/docs/api-rules-and-filters/#api-rules
Hooks : https://pocketbase.io/docs/js-overview/
Le panneau d’administration propose la sauvegarde des données ainsi que l’import/export des schémas de collections.
Le reste nécessite généralement des extensions, sauf les e-mails d’authentification, mais la forme d’extension la plus simple consiste simplement à ajouter une fonction JavaScript ordinaire aux événements du cycle de vie des enregistrements. Elle s’exécute généralement avant ou après une insertion, une modification ou une suppression. Plusieurs API Go pour le système de fichiers, le chiffrement, HTTP et les opérations d’e-mail sont exposées au runtime JavaScript.
L’internationalisation peut être gérée avec des templates et la base de données.
Parmi tous les PaaS que j’ai essayés, y compris Supabase et Appwrite, PocketBase a été le meilleur. Il est performant, ses fonctionnalités sont intuitives, il est réellement auto-hébergeable, et son déploiement est agréable.
J’utilise PocketBase depuis plusieurs mois en production pour une app mobile, et l’expérience a été très confortable jusqu’ici.
Utilisé avec le SDK JS, c’est désormais le framework backend que je choisis par défaut dans tous les cas où je n’ai pas besoin de bibliothèques spécialisées comme celles de machine learning.
PocketBase est excellent, alors j’ai créé un petit starter Nuxt 3 : https://github.com/fayazara/pocketbase-nuxt
L’exemple inclut l’authentification, les règles de routes, les opérations CRUD, les événements en temps réel et le stockage. Il a besoin d’un refactoring, mais j’ai vraiment pris plaisir à travailler dessus, et j’aimerais y ajouter des abonnements Stripe pour pousser les règles de routes jusqu’à leurs limites. Je ne sais pas encore comment faire, mais je vais chercher.