[HN Gopher] Pocketbase: Open-source back end in one file
       ___________________________________________________________________
        
       Pocketbase: Open-source back end in one file
        
       Author : dgudkov
       Score  : 525 points
       Date   : 2024-01-07 06:08 UTC (16 hours ago)
        
 (HTM) web link (pocketbase.io)
 (TXT) w3m dump (pocketbase.io)
        
       | BilalBudhani wrote:
       | I have been following PocketBase since its early day - what I
       | absolutely love about this project is how it actively tries to
       | avoid complexity and focuses on simple yet minimalist approach.
       | Moreover, the ease of deployment by simply uploading a single
       | binary on the server makes it even more attractive.
       | 
       | After they introduced Javascript support in the backend - I feel
       | it became a serious contender to challenge Remix, Next.js etc.
       | frameworks.
       | 
       | Looking forward to v1
        
         | d1sxeyes wrote:
         | I use PocketBase for mostly everything where I need a back end
         | now. I came across a situation where I needed to write a custom
         | SQL join (technically I could have just fetched all the data
         | and done it in Node, I suppose).
         | 
         | I was shocked at how easy it was to write the query even
         | inserting URL parameters and selecting based on the
         | authenticated user only.
         | 
         | Fully recommend for basically everything. Great app. Not sure
         | it would replace Next or Remix, but definitely add to the stack
         | to simplify.
        
           | BilalBudhani wrote:
           | Interesting! I haven't made anything serious yet with the
           | PocketBase (mostly due to lack of time & not anything to do
           | with PB).
           | 
           | I'm curious to know what kind of projects did you build using
           | PB and how was your development experience?
        
             | d1sxeyes wrote:
             | Bits and pieces. A bedtime tracking app for my kid, a
             | microblog, a TikTok clone, a budget app, a text-to-speech
             | app with translation functionality...
             | 
             | Development experience was outstanding. I primarily use
             | SvelteKit and integrate PocketBase for SSR, so I use the
             | SDK almost exclusively and it's fantastic. Everything just
             | works exactly the way you would expect.
             | 
             | I can't imagine anything easier to implement, and as yet, I
             | haven't found any major gaps in what I can do with it,
             | normally with OOB functionality.
             | 
             | Development velocity is very high and the developer is
             | super responsive on GitHub. The documentation is very good
             | and kept up to date pretty well.
             | 
             | My only real concern is that the project has a pretty poor
             | bus factor, otherwise, I'm very impressed.
        
             | ilrwbwrkhv wrote:
             | One of my production projects with around 20,000 customers
             | and 400k arr runs on Pocketbase with zero issues. I cannot
             | recommend it enough.
        
         | harha_ wrote:
         | _it actively tries to avoid complexity_
         | 
         | Sounds refreshing.
        
       | oschvr wrote:
       | Really cool, I'll give it a try
        
       | sonovice wrote:
       | Have been using pocketbase in production for a mobile app for a
       | couple of month now and so far it was a _very_ pleasent
       | experience. Together with the JS SDK it is now my go to backend
       | framework for everything where I don't need specialized libraries
       | (like ML stuff etc.)
        
       | thangngoc89 wrote:
       | I've been using Pocketbase for several projects. While it's a
       | delightful experience for solo-dev to quickly finish a project
       | from backend to complicated frontend, I wish it has bulk-insert
       | out of the box.
        
       | brabel wrote:
       | It seems to me that redbean is a much simpler, vastly lighter
       | one-file web server + sqlite DB: https://redbean.dev/
       | 
       | As a bonus, the same file runs on basically any OS without any
       | dependencies on the local system, not even libc.
        
         | lars_francke wrote:
         | To me it seems as if both tools serve a pretty different
         | purpose.
         | 
         | Redbean doesn't have authentication or the client SDKs at
         | least.
        
           | brabel wrote:
           | The self-described purpose is "opensource backend in one
           | file". They both offer that.
        
         | keb_ wrote:
         | I love redbean, just holding out for ARM support.
        
         | TeddyDD wrote:
         | It's like saying nginx is better than superbase/firebase.
         | Apples to oranges.
         | 
         | You could replicate PocketBase in Readbean, but you would have
         | to implement from scratch: - resources with CRUD API and real
         | time subscriptions - admin UI - authz & authn system
        
           | testless wrote:
           | I think you meant supabase.com instead of superbase.com.
        
           | brabel wrote:
           | I didn't say it's better. Why are people always
           | misinterperting what they read (it's like you've never had
           | text interpretation classes at school, or logic lessons to
           | undestand how to infer implications from logical statements
           | correctly)? Please read again: I said it's vastly simpler
           | (which may not be better for you!) and lighter (just measure
           | it). The comparison is apt for me because the description
           | "open-source backend in one file" matches both projects well
           | and it's something I'm interested in, with readbean being far
           | closer to my alley.
        
             | Philpax wrote:
             | Your initial comment presents Redbean as a comparable
             | solution, which it's not; they serve very different use
             | cases.
             | 
             | Redbean requires you to write server code; Pocketbase does
             | not. Redbean does not offer a realtime database,
             | authentication, an admin dashboard, integrated file
             | storage, or an inbuilt API.
             | 
             | I like Redbean, but it's in a completely different "market
             | sector". It's like comparing a kit car to a luxury car:
             | yes, they both technically serve the same purpose, but one
             | requires much less assembly and offers a much more usable
             | experience out of the box.
        
               | brabel wrote:
               | They are comparable solutions to the problem "Open-source
               | backend in one file". I don't care at all about "realtime
               | database, authentication" and whatever, I care about what
               | the title of the post says. For that purpose, Redbean is
               | a nice alternative.
               | 
               | > It's like comparing a kit car to a luxury car
               | 
               | If all I need is a bicycle, a kit car is already over the
               | top but will do. A luxury car makes no sense. You're
               | thinking like everyone has the same needs that you have
               | or something.
        
             | resoluteteeth wrote:
             | I think people are being a bit harsh but your original
             | comment (especially starting with "It seems to me" which
             | makes it sound like a value judgment) was phrased in a way
             | that did sound a _lot_ like you were implying that redbean
             | was better for the same requirements, although you didn 't
             | actually explicitly say that.
             | 
             | I think you would have gotten a more positive reaction if
             | you said something like "As an alternative take on the idea
             | of an "open-source backend in one file, redbean is a much
             | simpler, vastly lighter one-file web server + sqlite DB:
             | https://redbean.dev/" to make redbean isn't necessarily
             | intended to be the same type of "open-source backend in one
             | file"
             | 
             | Anyway, redbean does look really neat even if it's not
             | necessarily totally interchangeable with pocketbase
        
           | yard2010 wrote:
           | Fruits can be compared
        
       | rolisz wrote:
       | I mostly know Python. Is there something similar in Python? Or
       | the backend language is not relevant, because you mostly use this
       | from JavaScript anyway?
        
         | eternityforest wrote:
         | Packaging this as a Python lib that could run under WSGI/ASGI
         | and use all the awesome python libs would be amazing. I wonder
         | if that's possible?
        
         | ajayvk wrote:
         | I have been building a project https://github.com/claceio/clace
         | which aims to make building hypermedia based web applications
         | easier. Clace is implemented in go, it uses Starlark (python
         | syntax subset) for application configuration. With Clace, the
         | apps are implemented using Starlark and (go) html templates,
         | HTMX is used for web interface, app developer does not need to
         | write any JavaScript.
        
       | 082349872349872 wrote:
       | What minimal front-ends are there that one could combine with
       | this minimal back-end to provide a minimal end-to-end?
        
         | BilalBudhani wrote:
         | I would say
         | 
         | - htmx (https://htmx.org/)
         | 
         | - Alpine.js (https://alpinejs.dev/)
         | 
         | both are minimal and very easy to get started.
        
           | flaviocopes wrote:
           | Been enjoying using PocketBase with Astro + htmx + Alpine
        
             | BilalBudhani wrote:
             | nice! I'm curious to know why would you need Alpine or Htmx
             | if you have one of them in your app? I thought they are
             | mutually exclusive.
        
               | flaviocopes wrote:
               | htmx = client-server networking Alpine = JS sprinkles
               | 
               | Alpine is for example, I want to show/hide a menu on
               | mobile. I want to upload files via drag and drop. I want
               | to have a bin icon over an image when I hover with mouse
               | to delete it. I want to double click an input field to
               | edit it. I want to close an overlay when I click outside
               | of it, or when I press "esc".
               | 
               | Also modals, although you can do them in htmx very nicely
               | too, so that's borderline.
               | 
               | Anything that involves network, htmx. Things that are
               | just frontend, Alpine suits better.
               | 
               | _hyperscript is basically the Alpine equivalent.
               | 
               | It's like the difference between Turbo and Stimulus in
               | the Rails world
        
               | BilalBudhani wrote:
               | Gotcha! I'm gonna dig more into this stack. Thanks for
               | breaking it down for me.
        
               | recursivedoubts wrote:
               | we go into detail on this in the client side scripting
               | chapter of our book:
               | 
               | https://hypermedia.systems/client-side-scripting/
        
           | synergy20 wrote:
           | are you using one of them or both? I'm using htmx and not
           | sure if I really need alpine.js yet.
        
         | kekub wrote:
         | Depends on what you consider minimal, but I enjoy working with
         | PocketBase and VanJS[1]. However there is no component library
         | built in (if this is what you were asking for).
         | 
         | [1]: https://vanjs.org/
        
         | mdnahas wrote:
         | If you want a front-end for a single-page webapp, I loved
         | Svelte. It puts all the HTML, JavaScript/TypeScript, and CSS
         | together in the same place. The tutorial is delightful.
         | 
         | BUT, if you need a multi-page webapp, SvelteKit is complicated
         | and not well documented.
        
       | account-5 wrote:
       | Dart SDK, excellent. Just what I'm looking for.
        
       | WM6v wrote:
       | What are realistic bottlenecks to expect from a backend like
       | this? Eg. a web app serving users that write posts simultaneously
        
         | blackoil wrote:
         | More than one server. Sqlite should be thread safe and simple
         | services can scale to thousands of parallal users. If you are
         | OK with some downtime every 6 months when server goes down it
         | will scale well. Deploy/ rollback will be an effort.
        
           | ozim wrote:
           | Downside with separate SQLite databases will be when you want
           | to have statistics over many users.
        
             | rudasn wrote:
             | I'm in this situation right now. How would one go about
             | solving this?
             | 
             | To keep this simple, I'm thinking exporting just the
             | necessary data from each db and inserting that to a stats
             | db (having a source column to each table, referring to the
             | original db). Then load the stats db with Metabase or
             | something.
             | 
             | Migrations on the stats db may be a bit of a pain, as well
             | as making sure that all data is exported and imported
             | correctly every time.
             | 
             | I'm sure there are better ideas.
        
               | jocaal wrote:
               | Litestream is a library that allows you to easily create
               | backups. You can probably just do analytics queries on
               | the backup data.
               | 
               | https://litestream.io/
        
             | djfobbz wrote:
             | See this: https://news.ycombinator.com/item?id=26581807
        
           | WM6v wrote:
           | Gotcha. And that makes sense for the purpose of the project.
           | Should one have multiple instances of sqlite dbs, what
           | strategies exist to keep them synced?
        
       | eternityforest wrote:
       | Looks like what you hope LibreOffice Base will be, when one first
       | years of the existence of those kinds of tools.
       | 
       | Really nice, looks like something I'd love to work with someday!
        
       | saasjosh wrote:
       | Cool homepage but I don't even understand what this thing does.
        
         | diggan wrote:
         | Are you a developer? Because it seems to be geared towards
         | developers. It's something like a all-in-one backend that you
         | can use as a starting point and extend if needed.
         | 
         | Personally, I think the website is clear and concise. Doesn't
         | even have any marketing filler which is a huge plus in my
         | corner.
        
         | addandsubtract wrote:
         | It's like a smaller Supabase, which was an open source
         | alternative of Firebase. So basically a database,
         | authentication, file storage, and backend in one solution.
        
           | ilrwbwrkhv wrote:
           | It's substantially better than Supabase and much easier to
           | host and deploy.
        
         | mdnahas wrote:
         | It is a simple program that (1) hosts a webserver, (2) runs
         | server-side code, and (3) hosts a database. It also has built-
         | in support for logging in and permissions to data.
         | 
         | Thus, if you want to write a simple website that needs
         | permissions, storage, and server-side code, it's a great
         | backend solution. The limitation is that it isn't high
         | performance.
        
       | Ilasky wrote:
       | Been using Pocketbase for almost all of my projects lately. Its
       | realtime database is especially nice to introduce multiplayer
       | functionality with relative ease.
       | 
       | It plus SvelteKit has been a dream to get up and running using
       | the JS SDK.
        
         | overbytecode wrote:
         | I'm curious how you're integrating it with Sveltekit? Are you
         | using Sveltekit just as a static generator?
        
           | Ilasky wrote:
           | Depends upon the project.
           | 
           | For CRUD apps, sveltekits progressive enhancement and form
           | actions make it quick to to add simple function to the page.
           | You can store the pocketbase instance, pb, in locals and
           | reference it all over the application.
           | 
           | For more multiplayer things, sticking a client-side
           | subscription to a collection allows updates of elements that
           | can be worked with/added/moved around etc.
        
       | doublerabbit wrote:
       | Scouring the documentation there's mention of a way to use
       | PocketBase without JavaScript or Dart. Are they the only methods?
        
         | diggan wrote:
         | It seems to be Golang based from what I can tell? And I'm
         | guessing it either exposes a HTTP or WebSocket API, both which
         | are usable from any language.
        
           | skottenborg wrote:
           | This is correct. It's golang and it exposes a plentiful API.
        
         | eitland wrote:
         | TypeScript is support on the frontend for oldtimers like me who
         | have used plain JS for far too long and refuse to accept the
         | torture of unnecessarily untyped languages any longer.
         | 
         | Also as already mentioned by others there exist web APIs.
        
       | karencarits wrote:
       | It is great to see the number of good opensource projects in this
       | area. Grist and NocoDB deserve mentions, although more targeted
       | towards database management. It is also amazing that they provide
       | so simple ways to get started (single file/electron)
       | 
       | - https://github.com/gristlabs
       | 
       | - https://nocodb.com/
        
         | slig wrote:
         | Did not know about either of those, thanks. I've been using
         | Baserow for small projects that I believe Pocketbase is a way
         | better fit.
        
       | jddj wrote:
       | I've been using Pocketbase in production for a few months now,
       | with alpinejs on the front end.
       | 
       | The development philosophy is on point. It's genuinely pleasant,
       | pragmatic software which serves a real purpose and it improves
       | weekly without feature creep.
       | 
       | I watch the discussions and issues slowly getting more tiresome
       | as it becomes more mainstream and worry that he'll burn out
       | trying to keep up with the level of support he's offered until
       | now.
       | 
       | I would very strongly encourage anyone using this to generate
       | income to support the project on open collective.
        
         | jslakro wrote:
         | What other technologies in the stack you have?
        
           | jddj wrote:
           | There are two C# services which do some background bits and
           | pieces.
           | 
           | This logic could have been put within pocketbase as well, but
           | the body of work they depend on was already .net.
           | 
           | Other than that it's just little JavaScript callbacks in the
           | back and typescript in the front.
           | 
           | There isn't much missing that you truly need to bolt things
           | on for, provided SQLite is appropriate for your usecase.
        
       | bambax wrote:
       | First time I hear about this... looks absolutely fantastic! Will
       | try.
        
       | xsumirx wrote:
       | Didn't know tool like this existed. Thanks for sharing.
        
       | rijavecb wrote:
       | Pocketbase is amazing! So far I had a great experience using it
       | as a backend/database for the app I'm building where I'm using
       | React with Vite for the frontend. I'm using it mainly for auth
       | and for keeping track of paid and free accounts. Some things that
       | I found rather useful:
       | 
       | - It's super easy to host. I was initially thinking of using
       | Appwrite or Supabase but found it a tricky to self-host them,
       | especially Supabase. I could spin up Appwrite quickly via
       | CapRover, but found it an overkill for what I needed.
       | 
       | - View collections [1] make it easy to return just a subset of
       | the data that you need. In my case I'm using a view collection as
       | a join for users and paid_users collections, where I just return
       | their paid through date.
       | 
       | - The fact that you can extend it with Go or JS [2] should make
       | it possible to completely skip having a backend, at least if your
       | needs aren't very complex.
       | 
       | I definitely plan to continue using it for some smaller/side
       | projects. Currently I'm thinking of trying to use it as CMS for
       | an Astro blog and in the future as backend for some browser
       | extensions.
       | 
       | [1] - https://pocketbase.io/docs/collections/#view-collection
       | 
       | [2] - https://pocketbase.io/docs/use-as-framework/
        
         | Daynil wrote:
         | I feel like super easy to host needs to be re-emphasized. We're
         | talking about dropping a single binary into your server and
         | you're off to the races. If only more things were so simple.
        
           | imnotreallynew wrote:
           | Isn't that how any Go project is put online?
        
             | paulgb wrote:
             | The key distinction here seems to be that it uses an in-
             | core database (SQLite), whereas a Go project may depend on
             | an out-of-core database like Postgres, which would then
             | also have to be deployed.
             | 
             | For many projects (especially hobby projects where downtime
             | is tolerable), the former is probably quite sufficient.
        
           | tronikel wrote:
           | Didnt docker make this easy for all projects?
        
             | noodlesUK wrote:
             | Not really because then projects started needing multiple
             | containers and orchestration, and might be fussy about the
             | order the different services come up.
        
             | serf wrote:
             | the +docker step already adds friction, so I can see the
             | point.
        
           | pixelatedindex wrote:
           | Is that the same concept that Deno uses?
        
       | notyoutube wrote:
       | I've skimmed at the docs, and it's not clear to me how it would
       | deal with:
       | 
       | * Something like row-level access control, so that people can
       | only access the data in tables that belong to them (say clients
       | can only view their own purchases, and also not modify them after
       | they checked them out).
       | 
       | * Integration with the rest of the world, e.g. sending email,
       | acting on triggers, etc.
       | 
       | * Something like CSV export/import.
       | 
       | * Internationalization.
       | 
       | Would that all be possible? Straightforward? Do those all require
       | extending (with go or js)?
       | 
       | Looks like a nice tool.
        
         | flaviocopes wrote:
         | Check out
         | 
         | API Rules https://pocketbase.io/docs/api-rules-and-
         | filters/#api-rules
         | 
         | Hooks https://pocketbase.io/docs/js-overview/
         | 
         | Admin panel has backups for data, and import/export of
         | collections schema
        
         | jddj wrote:
         | The first point (authn) is inherent to the unextended framework
         | via filter rules.
         | 
         | Most of the remainder requires extension other than authz
         | emails, but extension at its simplest just means adding a plain
         | old JavaScript function to run on a record lifecycle event of
         | some kind - typically [before/after] [insert/update/delete] of
         | <record>. Various GO APIs are exposed to the JavaScript runtime
         | for doing filesystem, cryptography, http, email, etc work.
         | 
         | For i18n you have templates and a database.
        
         | mdnahas wrote:
         | I've been developing for PocketBase for 2 months.
         | 
         | As someone else mentioned, API rules can control access to
         | rows.
         | 
         | It can send emails. Set timers. And send its own requests to
         | other webservers. (I haven't used any of these features.)
         | https://pocketbase.io/docs/js-sending-emails/
         | 
         | I had to write my own CSV importer. (I'm hoping to open-source
         | it.)
         | 
         | As for internationalization, what specific features did you
         | want? That seems more like a front-end feature.
        
       | TruthWillHurt wrote:
       | Very cool, but this is a security anti-pattern.
       | 
       | Having the auth, db and file server in the same service.. an
       | attacker doesn't even need lateral traversal or privilege
       | escalation once inside..
        
         | deberon wrote:
         | There's something to be said about drastically reducing your
         | threat surface too. Locking down 1 server is easier than
         | locking down a fleet. You can still have security in depth
         | inside your server.
        
       | punnerud wrote:
       | Seems like a JavaScript based version similar to Django (Python)?
        
         | robjan wrote:
         | It's more a self-hosted alternative to Firebase written in
         | golang
        
       | twsted wrote:
       | Pocketbase seems really well done and useful.
       | 
       | I am building something similar but at a lower level and based on
       | PostgreSQL.
       | 
       | https://github.com/sted/smoothdb
       | 
       | It aims to be compatible with the PostgREST API.
        
       | igtztorrero wrote:
       | Good Golang anda Svelte code organization, I Will take as example
        
       | remram wrote:
       | I am a bit confused, is it the backend's backend? E.g. something
       | that is used by the HTTP server app, like a DBMS would be?
       | 
       | Or is it actually the backend, e.g. the frontend (browser) talks
       | to it directly?
        
         | kisamoto wrote:
         | It can be the backend itself if you just need auth (both
         | authentication and authorization) and your SQL tables to be a
         | REST API. This often suits frontend single page applications in
         | JS/TS and Pocketbase also provides a JS SDK to ease this (with
         | realtime updates). It's a similar model to Firebase but without
         | the lock-in.
         | 
         | However if you want to write more logic you can also import
         | Pocketbase as a library and extend it with hooks, custom
         | endpoints etc. all written in Go.
         | 
         | Edit: Added more info about using Pocketbase with a JS SPA
         | frontend.
        
           | szundi wrote:
           | Every tech/stack is a lock-in, you just pay with different
           | currencies and get different challanges at different stages
        
         | ilrwbwrkhv wrote:
         | You would use it instead of things like Supabase and Appwrite.
         | It gives you a server, a db and easy authentication,
         | authorization with real-time queries like firebase.
        
           | remram wrote:
           | Maybe it's not for me, I really don't know what that means.
           | If it only describes itself as "a replacement for <name>" I
           | feel like I'm not the target at all.
        
             | szundi wrote:
             | Maybe it's for you even if you don't get it just now
        
       | chazeon wrote:
       | I feel like this will be super interesting when pairing with
       | static site generator such as eleventy. Using static site
       | generator is sometimes difficult because of lacking a web backend
       | and ghost is too heavy for me.
        
         | Fire-Dragon-DoL wrote:
         | Could you explain a bit more this setup? I have been looking
         | for a way to have a tool to fill pages for a static site
         | generator that's local and then just git push in a simplified
         | way.
         | 
         | The idea is to create a website for my mother, without having
         | to deal with hosting at all (static github pages).
         | 
         | Does this combination work that way?
        
           | mdnahas wrote:
           | No. PocketBase runs on a server. It needs a host.
           | 
           | It is simple, so its single program is (1) a webserver, (2)
           | runs server-side code, and (3) hosts a DB. I'm running a
           | $12-per-month server on Vultr and its only service is
           | PocketBase.
           | 
           | You don't need to host the webpages on PocketBase. If you
           | wanted all your webpages to be on Github Pages, you could do
           | that.
        
       | fullstackchris wrote:
       | Very cool. Reminds me of the encore framework, also written in
       | go: https://github.com/encoredev/encore
       | 
       | Need to spend some more time looking into these go based
       | frameworks, they seem great for quick prototyping
        
         | ilrwbwrkhv wrote:
         | Nope encore is horrible to use in comparison. Pocketbase is
         | levels above encore and similar projects.
        
       | zffr wrote:
       | What are the pros/cons of this over firebase?
        
         | victorbjorklund wrote:
         | Pro: - It will be cheaper when scale - You have full control of
         | the data since selfhosted - Easier to extend with custom code
         | 
         | Cons: - you need to take care of all the hosting, backups, etc
         | - cant scale to infinity like firebase (but on the other hand
         | when you reach that scale youe firebase bill will be huge
         | anyway)
        
       | ilrwbwrkhv wrote:
       | Out of all the PaaS I tried including Supabase and Appwrite,
       | Pocketbase is the best. Great performance, intuitive features,
       | actually self hosted and a joy to deploy.
        
       | melicerte wrote:
       | I was looking for a frontend I could use out of the box on top of
       | a sqlite database to design and store my wine collection (since I
       | removed Vivino and its 800+ "partners" it shares my data with).
       | 
       | Looks like a single executable, the admin interface and the
       | database I can store on my laptop (and add it to my backup) is
       | all I was looking for. Thank you for PocketBase and thank you for
       | sharing it.
       | 
       | That's why I always come back to HN :-)
        
       | air7 wrote:
       | this is great. What would be the frontend equivalent? A simple,
       | no bells and whistles frontend to throw something together
       | quickly?
        
         | mdnahas wrote:
         | I was happy with Svelte. But it only does single-page apps. But
         | it's simple and the tutorial is delightful.
         | 
         | When I moved to multiple pages, I had to use SvelteKit, which
         | is complicated and not well documented.
        
       | jadayesnaamsi wrote:
       | It is the first time I see that "hook" pattern in a Go API
       | backend: `hook.Hook` and `hook.TaggedHook`.
       | 
       | Where does it come from?
       | 
       | Why is it useful here?
       | 
       | What are the alternatives? Advantages/Drawbacks?
       | 
       | Is there an article somewhere, outside of the Pocketbase docs,
       | presenting that pattern?
       | 
       | - https://github.com/pocketbase/pocketbase/blob/master/core/ap...
       | 
       | - https://github.com/pocketbase/pocketbase/tree/master/tools/h...
        
       | tamimio wrote:
       | I like this for testing and quick/simple database, very useful in
       | concept for building a platform for embedded work, where you
       | don't need to go down the rabbit hole in the whole full stack
       | tech.
        
       | rbosinger wrote:
       | I've been using Pocketbase for personal projects on the machine I
       | use to self-host services. It's great. You get CRUD and real-time
       | stuff for free and I didn't really have to spend much time
       | learning to start working with it and having it running in an
       | LXC.
        
       | turtlebits wrote:
       | I like the idea, but after using it, the query apis aren't
       | expressive enough. I wish I could write SQL instead of making 2+
       | api calls to get the data I want.
        
         | ako wrote:
         | Did you try view collections,
         | https://pocketbase.io/docs/collections/#view-collection ?
        
         | dhc02 wrote:
         | I'm no expert, but it seems like raw SQL is supported. From the
         | docs:
         | 
         | "It also exposes app.Dao().DB() builder that allows executing
         | various SQL statements (including raw queries)."
        
           | mdnahas wrote:
           | Yes, that's correct. In server-side code, you can write SQL
           | queries.
           | 
           | JavaScript API: https://pocketbase.io/docs/js-database/ Go
           | API: https://pocketbase.io/docs/go-database/
        
       | tiffanyh wrote:
       | So it's the "Supabase of SQLite"?
       | 
       | Aren't there entire classes of problems that shouldn't exist for
       | SQLite because it's intended to be an embedded database, as
       | opposed to a client/server architecture like Postgres/Supabase?
       | 
       | And as such, I'm confused why this exists.
        
         | mdnahas wrote:
         | PocketBase is trying to be a simple webserver, code-running
         | backend, and database. I believe the author chose SQLite
         | because it is simple. PocketBase isn't trying to have every
         | feature nor be high performance.
        
           | tiffanyh wrote:
           | Like Althttpd?
           | 
           | That's the web server created by the SQLite team and also
           | serves sqlite.org
           | 
           | https://sqlite.org/althttpd/doc/trunk/althttpd.md
        
         | LVB wrote:
         | >And as such, I'm confused why this exists.
         | 
         | Beyond the standalone server mode, I'm able to literally import
         | this as a library/framework right into my Go app
         | (https://pocketbase.io/docs/go-overview/). Having a single
         | binary that contains my custom business logic + a very nice
         | DB/Auth/Admin/... is a very compelling option.
        
         | stevage wrote:
         | It's very common to use SQLite within backends, whenever
         | concurrency is not a big issue.
        
       | imperialdrive wrote:
       | This looks too good to be true for a project I had in mind--
       | kudos!
        
       | Fire-Dragon-DoL wrote:
       | I'm not sure I understand what exactly is. I like the tips, but I
       | don't understand: is it an app that I can run on my local
       | machine?
        
         | simonw wrote:
         | It's a binary called "pocketbase" that you can download and run
         | on your machine. When you run it, it starts a localhost web
         | server. That server includes a web based UI tool that lets you
         | create "collections" (effectively database tables) and
         | insert/update/delete data in them.
         | 
         | More importantly, it provides a JSON API (and a client library)
         | for interacting with those collections.
        
           | puchatek wrote:
           | But people build apps on top of it and deploy it to the
           | cloud, too, right? Does it then compete with stuff like AWS
           | RDS?
        
             | simonw wrote:
             | I think it's more like a self-hosted Firebase - you run it
             | on a server (with a disk drive that can persist the data)
             | to get a hosted API for your apps to talk to.
        
         | stevage wrote:
         | If you have ever built a web app backend that consists of a
         | database, a REST API for that database, and a web admin
         | interface to the database - well, this gives you all of that
         | for free, just by running an executable.
        
       | wg0 wrote:
       | After ent.io entity framework, that's the other most beautiful
       | piece of software that I have seen in Go!
       | 
       | The simplicity is simply mind boggling!
       | 
       | Going to give it a try!
        
         | teknico wrote:
         | Its URL is presumably https://entgo.io/ .
        
       | efields wrote:
       | The demo is kind of incredible. It's the admin ux of an app we
       | built internally over 2ish years.
       | 
       | It's just... right there :)
        
       | tommica wrote:
       | How are database migrations handled in this? Ive never understood
       | how BaaSes are to be used when I need to add a new column to my
       | table and do some inserts into it in the same migration
        
         | jacobdejean wrote:
         | A lot of these tools just abstract away migrations. But I do
         | know some like Supabase let you clone a copy locally and
         | manually perform migrations if you see fit
        
         | mdnahas wrote:
         | PocketBase has a pb_migrations/ directory. If you throw a file
         | of a certain format, PocketBase will automatically loaded it
         | and update the DB.
        
       | jarekceborski wrote:
       | Simple is beautiful! I think it could be more than enough for 90%
       | or more use cases, and without over-engineering.
        
       | mdnahas wrote:
       | I've been developing on PocketBase for 2 months. The system goes
       | into production in 1 to 2 months.
       | 
       | I'm exceptionally happy with it. I'm developing an webapp for a
       | friend's company and wanted a very simple system to hand-off. The
       | whole thing is running with one binary: Pocketbase. It runs a
       | webserver, server-side Javascript (compiled TypeScript) code, and
       | SQLite database. The single process is hosted on Vultr for $12
       | per month. My frontend is written in SvelteKit (static adapter) +
       | Svelte + TypeScript.
       | 
       | Pocketbase is well done. The author has been exceptionally
       | responsive to my questions. He is fast and clear.
       | 
       | I have had a few minor issues: The documentation has bare spots
       | (but is very good for most things). I had to write my own CSV
       | loader. (I hope to open-source it.) Writing lots of objects
       | through the CRUD interface is slow. (It's possible to write
       | faster using server-side code.) Unit testing for the server-side
       | JavaScript had to be shoehorned in. And I wish Copilot/ChatGPT
       | could answer questions better. But these issues have been minor,
       | given all my work on the project.
       | 
       | It has some quirks. There's no way to set the 404 page on the
       | webserver. And the binary's location in the filesystem matters.
       | It was designed for the author's use and you have to live with
       | these choices.
       | 
       | As I said, I've been happy using it. It fit my needs exactly:
       | simple and I could code everything in one language, TypeScript.
       | Pocketbase is not high-performance, but I didn't need that. I've
       | had a few ideas for side projects and, when I'm done this work,
       | I'll implement one on Pocketbase because it is that easy.
       | 
       | And, as part of my contract, my friend's company will donate to
       | Pocketbase. :)
        
       ___________________________________________________________________
       (page generated 2024-01-07 23:01 UTC)