6 Punkte von GN⁺ 2024-01-08 | 1 Kommentare | Auf WhatsApp teilen
  • PocketBase ermöglicht es, kleine Backends schnell aufzusetzen, indem es Echtzeitdatenbank, Authentifizierung, Dateispeicher und Admin-Dashboard in einer Datei bündelt
  • Die integrierte Datenbank bietet Schema Builder, Datenvalidierung, Echtzeit-Subscriptions und REST API und reduziert damit den Aufwand für eine separate Backend-Konfiguration
  • Die Nutzerverwaltung unterstützt Registrierung per E-Mail/Passwort sowie OAuth2-Registrierung mit Google, Facebook, GitHub und GitLab
  • Dateien können lokal oder in S3-Speicher abgelegt werden; Medien lassen sich an Datenbank-Records anhängen und Thumbnails sofort erzeugen
  • Nach dem Start als eigenständige App lässt es sich mit Go- und JavaScript-Hooks erweitern, wodurch sich leicht ein individuelles portables Backend erstellen lässt

Backend-Funktionen in einer einzigen Datei

  • PocketBase ist ein Open-Source-Backend, das Echtzeitdatenbank, Authentifizierung, Dateispeicher und Admin-Dashboard in einer einzigen Datei bereitstellt
  • Integrierte Datenbank

    • Die integrierte Datenbank mit Fokus auf Performance enthält einen Schema Builder
    • Sie bietet Datenvalidierung, Echtzeit-Subscriptions und eine einfach nutzbare REST API

Nutzerauthentifizierung und Registrierung

  • App-Nutzer lassen sich verwalten und Registrierungen auf Basis von E-Mail/Passwort abwickeln
  • Auch OAuth2-Registrierung wird unterstützt, einschließlich Google, Facebook, GitHub und GitLab

Dateispeicherung und Medienverarbeitung

  • Dateien können lokal oder in S3-Speicher gespeichert werden
  • Medien lassen sich an Datenbank-Records anhängen, und Thumbnails können sofort erzeugt werden

Nutzung und Erweiterung

  • PocketBase kann als eigenständige App verwendet werden
  • Bei Nutzung wie ein Framework lässt es sich über Go- und JavaScript-Hooks erweitern
  • Auf diese Weise kann ein individuelles portables Backend erstellt werden

Beispiel für das JavaScript SDK

  • Das JavaScript SDK importiert PocketBase und erstellt einen Client für eine Adresse wie http://127.0.0.1:8090
  • Mit pb.collection('example').getList() kann eine Liste von Collection-Records abgefragt und durchsucht werden
    • Das Beispiel verwendet den Filter title != "" && created > "2022-08-01" und die Sortierung -created,title
  • Mit getOne('RECORD_ID'), delete('RECORD_ID') und create() werden einzelne Records abgefragt, gelöscht und erstellt
  • Mit subscribe('*', ...) werden Änderungen an Collection-Records abonniert, und mit unsubscribe() wird das Abonnement beendet

1 Kommentare

 
GN⁺ 2024-01-08
Meinungen auf Hacker News
  • Ich habe PocketBase als Backend/Datenbank für eine App verwendet, und es war großartig; im Frontend nutze ich React und Vite.
    Ich nutze es hauptsächlich für Authentifizierung und zur Nachverfolgung von kostenpflichtigen/kostenlosen Accounts. Das Hosting ist sehr einfach, und es war weniger aufwendig, als Appwrite oder Supabase selbst zu hosten. Supabase war besonders knifflig; Appwrite ließ sich mit CapRover zwar schnell hochziehen, war für meine Anforderungen aber überdimensioniert.
    Mit View Collections war es einfach, nur einen Teil der benötigten Daten zurückzugeben; ich nutze es zum Beispiel so, dass ich die Collections für Nutzer und zahlende Nutzer joine und nur den bezahlten Zeitraum zurückgebe: https://pocketbase.io/docs/collections/#view-collection
    Da es sich mit Go oder JS erweitern lässt, scheint man bei nicht allzu komplexen Anforderungen sogar ganz auf ein eigenes Backend verzichten zu können: https://pocketbase.io/docs/use-as-framework/

    • Dass das Hosting sehr einfach ist, sollte man noch stärker betonen. Es reicht im Grunde, ein einzelnes Binary auf den Server zu legen und loszulegen; ich wünschte, mehr Tools wären so schlicht.
  • Ich entwickle seit zwei Monaten mit PocketBase und werde voraussichtlich in ein bis zwei Monaten in Produktion gehen.
    Ich baue eine Web-App für die Firma eines Freundes und wollte ein simples System, das sich leicht übergeben lässt; das Ganze läuft mit PocketBase als einzelnem Binary. Webserver, serverseitiges JavaScript (kompiliertes TypeScript) und SQLite-Datenbank laufen in einem Prozess, gehostet bei Vultr für 12 Dollar im Monat. Das Frontend ist mit dem statischen Adapter von SvelteKit + Svelte + TypeScript geschrieben.
    PocketBase ist gut gemacht, und der Autor hat auf Fragen sehr schnell und klar geantwortet. Allerdings hat die Dokumentation ein paar Lücken, den CSV-Loader musste ich selbst schreiben, und wenn man viele Objekte über das CRUD-Interface schreibt, wird es langsam. Mit serverseitigem Code kann man schneller schreiben. Serverseitige JavaScript-Unit-Tests musste ich ebenfalls etwas mit Gewalt hineinzwängen, und ich wünschte, Copilot/ChatGPT könnten Fragen dazu besser beantworten.
    Außerdem gibt es keine Möglichkeit, die 404-Seite des Webservers zu konfigurieren, und die Position des Binarys im Dateisystem ist relevant, was etwas eigenartig ist. Es gibt Teile, die für die eigenen Zwecke des Autors entworfen wurden, und diese Entscheidungen muss man akzeptieren.
    Trotzdem passte es exakt zu meinen Anforderungen. Es ist einfach, und ich konnte den gesamten Code in einer Sprache, TypeScript, schreiben. Hochperformant ist es nicht, aber das brauchte ich auch nicht; wenn die Arbeit abgeschlossen ist, will ich auch ein Side Project mit PocketBase bauen. So einfach ist es. Als Teil des Vertrags hat sich die Firma meines Freundes außerdem vorgenommen, an PocketBase zu spenden.

  • Ich nutze PocketBase seit einigen Monaten in Produktion, mit alpinejs im Frontend.
    Die Entwicklungsphilosophie passt für mich genau. Es ist angenehme, praktische Software, die ihren eigentlichen Zweck gut erfüllt, und sie wird jede Woche verbessert, ohne Feature-Bloat.
    Allerdings sieht man, dass Diskussionen und Issues anstrengender werden, je mehr es in den Mainstream rückt; ich mache mir Sorgen, dass der Autor ausbrennt, wenn er weiterhin Support auf dem bisherigen Niveau leisten muss.
    Wer damit Geld verdient, sollte das Projekt über Open Collective unbedingt unterstützen.

    • Mich würde interessieren, welche anderen Technologien du in deinem Stack verwendest.
  • Ich beobachte PocketBase seit den Anfängen, und das Beste an diesem Projekt ist, dass es Komplexität aktiv vermeidet und sich auf einen einfachen, minimalistischen Ansatz konzentriert.
    Auch die einfache Bereitstellung, bei der man nur ein einzelnes Binary auf den Server legt, ist attraktiv. Seit JavaScript-Unterstützung im Backend hinzugekommen ist, fühlt es sich für mich wie ein ernstzunehmender Kandidat an, der Frameworks wie Remix oder Next.js herausfordern kann. Ich freue mich auf v1.

    • Inzwischen nutze ich PocketBase fast überall, wo ich ein Backend brauche. Einmal musste ich selbst einen SQL-Join schreiben; es war überraschend einfach, URL-Parameter einzusetzen und eine Query zu schreiben, die nur anhand des authentifizierten Nutzers auswählt.
      Ehrlich gesagt hätte ich auch alle Daten holen und in Node verarbeiten können, aber es war einfach genug, das direkt in PocketBase zu lösen. Ich würde es nicht als Ersatz für Next oder Remix sehen, aber ich empfehle es sehr, um es dem Stack hinzuzufügen und ihn zu vereinfachen.
  • Ich war auf der Suche nach einem Frontend, das man direkt auf eine SQLite-Datenbank setzen kann. Ich habe Vivino gelöscht, weil es über 800 Partner gab, mit denen meine Daten geteilt wurden.
    Für den Zweck, meine Weinsammlung zu entwerfen und zu speichern, sieht die Kombination aus einzelner ausführbarer Datei, Admin-Interface und Datenbank, die ich auf meinem Laptop behalten und in Backups einschließen kann, genau nach dem aus, was ich wollte. Deshalb komme ich immer wieder zu HN zurück.

  • Es ist schön zu sehen, dass es in diesem Bereich immer mehr gute Open-Source-Projekte gibt. Grist und NocoDB sind ebenfalls erwähnenswert; beide legen den Fokus stärker auf Datenbankverwaltung.
    Beeindruckend ist auch, dass der Einstieg in Form einer einzelnen Datei oder als Electron-App sehr simpel angeboten wird.
    https://github.com/gristlabs
    https://nocodb.com/

    • Beide kannte ich nicht. Für kleine Projekte habe ich bisher Baserow genutzt, aber in solchen Fällen scheint PocketBase deutlich besser zu passen.
  • Ich habe die Dokumentation überflogen, aber mir ist nicht klar, wie einige Dinge gehandhabt werden.
    Zum Beispiel interessiert mich Zugriffskontrolle auf Zeilenebene, damit Nutzer nur auf ihre eigenen Daten zugreifen können, externe Integrationen wie E-Mail-Versand oder Trigger, CSV-Export/-Import und Internationalisierung. Ich würde gern wissen, ob das alles möglich und intuitiv ist oder ob dafür jeweils Go- oder JS-Erweiterungen nötig sind. Das Tool selbst sieht gut aus.

    • Ich entwickle seit zwei Monaten mit PocketBase.
      Wie andere schon gesagt haben, lässt sich Zeilenzugriff über API Rules steuern. E-Mails versenden, Timer setzen und Requests an andere Webserver schicken ist ebenfalls möglich. Ich habe es selbst nicht ausprobiert, aber es gibt Dokumentation dazu: https://pocketbase.io/docs/js-sending-emails/
      CSV-Import musste ich selbst schreiben, und ich überlege, ihn als Open Source zu veröffentlichen. Internationalisierung hängt davon ab, welche Funktionalität man möchte, wirkt aber im Allgemeinen eher wie etwas fürs Frontend.
    • Schau dir API Rules und Hooks an.
      API Rules: https://pocketbase.io/docs/api-rules-and-filters/#api-rules
      Hooks: https://pocketbase.io/docs/js-overview/
      Im Admin-Panel gibt es Daten-Backups sowie Import/Export von Collection-Schemas.
    • Der erste Punkt, Authentifizierung/Zugriffskontrolle, wird auch im nicht erweiterten Basis-Framework über Filter Rules gehandhabt.
      Für den Rest braucht man, abgesehen von Authentifizierungs-E-Mails, im Allgemeinen Erweiterungen; die einfachste Form einer Erweiterung besteht aber nur darin, einfache JavaScript-Funktionen an Lebenszyklusereignisse von Records zu hängen. Sie laufen typischerweise vor oder nach Einfügen/Ändern/Löschen. Mehrere Go-APIs für Dateisystem-, Kryptografie-, HTTP- und E-Mail-Aufgaben werden der JavaScript-Runtime bereitgestellt.
      Internationalisierung lässt sich mit Templates und der Datenbank umsetzen.
  • Unter allen PaaS-Angeboten, die ich ausprobiert habe, einschließlich Supabase und Appwrite, war PocketBase das beste. Es ist performant, die Funktionen sind intuitiv, es lässt sich tatsächlich selbst hosten, und die Bereitstellung macht Spaß.

  • Ich nutze PocketBase seit einigen Monaten in Produktion für eine Mobile App, und bisher war es sehr angenehm.
    Zusammen mit dem JS SDK ist es inzwischen mein Standard-Backend-Framework für alle Fälle, in denen ich keine speziellen Bibliotheken wie für Machine Learning brauche.

  • PocketBase ist großartig, deshalb habe ich einen kleinen Nuxt-3-Starter gebaut: https://github.com/fayazara/pocketbase-nuxt
    Die Beispiele enthalten Authentifizierung, Route Rules, CRUD-Aktionen, Echtzeit-Events und Stores. Es braucht Refactoring, aber die Arbeit daran hat wirklich Spaß gemacht, und ich möchte Stripe-Abos hinzufügen, um die Grenzen der Route Rules auszureizen. Ich weiß noch nicht, wie, aber ich werde es herausfinden.