Trending

#PocketBase

Latest posts tagged with #PocketBase on Bluesky

Latest Top
Trending

Posts tagged #PocketBase

Post image

Мой овердофига усложненный Майнкрафт сервер Каждый год в моей компании друзей наступает «неделя Minecraft» — в...

#minecraft #minecraft #server #minecraft #сервер #electron #pocketbase

Origin | Interest | Match

0 0 0 0
Preview
Release PocketBase.Blazor 0.2.0-beta.1 · celsojr/PocketBase.Blazor Highlights Added HTTPS support to the host via UseHttps / HttpsPort. Improvements Hosting builder: PocketBaseHostBuilder reads config from env vars, JSON and XML (now supports UseHttps/HttpsPor...

Breaking changes alert 🚨

Options rename:
Dir → DataDir

#pocketbase #blazor

github.com/celsojr/Pock...

0 0 0 0
Preview
Releases · celsojr/PocketBase.Blazor PocketBase.Blazor is a small, Blazor-friendly client wrapper for the PocketBase REST API - celsojr/PocketBase.Blazor

In this new release: Fixed DI registration for IPocketBase and an updated Aspire sample (runtime 13.1.2)

#pocketbase #aspire #blazor #docker

github.com/celsojr/Pock...

0 0 0 0
Video

You can mention people by simply writing their username.

You can change your display name, but your username must be unique and cannot be changed. It is, in a way, a unique identifier for each user.

#sveltekit #pocketbase #webdev

11 0 0 0
Preview
ITちゃんねる FirebaseのようにGUIでバックエンドを構築できる無料でオープンソースのシステム「PocketBase」、わずか1ファイルのみ #PocketBase #ITニュース

FirebaseのようにGUIでバックエンドを構築できる無料でオープンソースのシステム「PocketBase」、わずか1ファイルのみ
#PocketBase #ITニュース

0 0 0 0
Preview
PocketBase: An Open Source, Go-based Backend In A Single File - OSTechNix PocketBase is an open-source Go-based backend that bundles a SQLite database, auth, admin UI, and REST API into a single, portable file.

PocketBase is an open-source Go-based backend that bundles a SQLite database, auth, admin UI, and REST API into a single, portable file.

More details here: ostechnix.com/pocketbase-s...

#Pocketbase #Backend #Go #Sqlite #Opensource #Linux #SoftwareDevelopment #AppDevelopment

3 0 0 0
Preview
GitHub - celsojr/PocketBase.Blazor: PocketBase.Blazor is a small, Blazor-friendly client wrapper for the PocketBase REST API PocketBase.Blazor is a small, Blazor-friendly client wrapper for the PocketBase REST API - celsojr/PocketBase.Blazor

Just finished a fun weekend project!

Introducing PocketBase.Blazor – a lightweight, Blazor-friendly C# SDK for PocketBase REST APIs.
✔ DI-ready
✔ HttpClient CRUD
✔ Blazor WASM sample included

Check it out: github.com/celsojr/Pock...
#Blazor #DotNet #PocketBase #WASM #OpenSource

2 0 0 0

Overview: Hacker News discussed Pocketbase, an open-source, single-file backend. Topics included its ease of use, performance, project suitability, and comparisons to Supabase/Firebase. Concerns about SQLite scalability and its single maintainer were also raised. #Pocketbase 1/6

1 0 1 0

Create and deploy an Angular/Ionic app with a PocketBase backend

blog.rasc.ch/2025/07/pock...
blog.rasc.ch/2025/07/pock...

#ionic #angular #pocketbase

1 0 0 0
Preview
How to deploy PocketBase on AWS with Docker First, I’m a huge PocketBase fan! I use it for many projects (e.g., smartgoutcare) and to prototype...

How to deploy PocketBase on AWS with Docker First, I’m a huge PocketBase fan! I use it for many projects (e.g., smartgoutcare ) and to prototype fast. This guide shows how to deploy PocketBase 0....

#pocketbase #aws #backend

Origin | Interest | Match

1 0 0 0

Architecture for my blog is just going to be a #pocketbase instance running in a #docker container with a volume linked for the actual data

1 0 1 0
Preview
PocketBase - Open Source backend in 1 file Open Source backend in 1 file with realtime database, authentication, file storage and admin dashboard

learned about #pocketbase - a one-file #backend using #sqlite as #database
it automatically creates an #api - optionally with #authentication
could be a base for a minimalistic #geodata server based on #geopackage #gpkg
#ogc #gischat #spatial #geospatial

https://pocketbase.io/

0 0 0 0

Learn how to set up #PocketBase for integration tests using #Testcontainers and Xunit. Streamline your testing process with this step-by-step guide. Enhance your development workflow today!

0 0 0 0
🗄️ PocketBase — Backend ringan & open source dengan fitur lengkap!

⚡ Realtime API, autentikasi bawaan, admin UI, & database SQLite ter-embed.
📦 Semua dalam satu file executable yang mudah dijalankan.
🔗 github.com/pocketbase/pocketbase

#PocketBase #OpenSource #Backend #DevTools #SQLite #Realtime

🗄️ PocketBase — Backend ringan & open source dengan fitur lengkap! ⚡ Realtime API, autentikasi bawaan, admin UI, & database SQLite ter-embed. 📦 Semua dalam satu file executable yang mudah dijalankan. 🔗 github.com/pocketbase/pocketbase #PocketBase #OpenSource #Backend #DevTools #SQLite #Realtime

🗄️ PocketBase — Backend ringan & open source dengan fitur lengkap!

⚡ Realtime API, autentikasi bawaan, admin UI, & database SQLite ter-embed.
📦 Semua dalam satu file executable yang mudah dijalankan.
🔗 github.com/pocketbase/pocketbase

#PocketBase #OpenSource #Backend #DevTools #SQLite #Realtime

3 0 0 0

✅ Auth is in!

Sign up, login, and route protection are all working smoothly in the starter kit.

Next up: payments.

Planning to integrate Stripe first — but curious what others use…

#buildinpublic #sveltekit #pocketbase

1 0 0 0

Go-to stack lately:

- SvelteKit
- PocketBase
- Tailwind + shadcn-svelte

Love the dev experience, but I keep rebuilding the same stuff: Auth, routing, layout, UI components… every. single. time.
So I’m fixing that. 🔧
#buildinpublic #sveltekit #pocketbase #webdev

11 0 4 0
Preview
Using PocketBase in SvelteKit's Server-side rendering ## Sveltekit and Pocketbase in server-side rendering As a young, unemployed, software engineer, I’m more inclined to try to force my way to get people to use the same technologies that like, so here is break down of how to get Sveltekit and Pocketbase(0.24.3) working in a server-side environment. this example is in svelte version 4 and Sveltekit 2 but svelte 5 is backwards compatible. It should be noted that the development team behind Pocketbase does have this to say “The easiest way to use Pocketbase is by interacting with its Web APIs directly from the client-side (e.g. mobile app or browser SPA). It was designed with this exact use case in mind, and it is also the reason why there are general purpose JSON APIs for listing, pagination, sorting, filtering, etc.” and for JS SSR they list the following for caution: * Security issues caused by incorrectly initialized and shared JS SDK instance in a long-running server-side context. * OAuth2 integration difficulties related to the server-side only OAuth2 flow (or its mixed “all-in-one” client-side handling and sharing a cookie with the server-side). * Proxying realtime connections and essentially duplicating the same thing PocketBase already does. * Performance bottlenecks caused by the default single-threaded Node.js process and the excessive resources utilization due to the server-side rendering and heavy back-and-forth requests communication between the different layers (client<->Node.js<->PocketBase). Now I'm not saying my implementation is the best is and if there is any vulnerability please let me know but so far I haven't had any bad instances using adapter node and I haven't been able to produce instances where data between users got mixed up, but this is how I went about implementing it as there is not a lot of resources that exist for this approach, and the little there is convoluted so here is a demo of like a student/teacher app, this example is using superforms form cisco heat(https://superforms.rocks/) and Zod. (This is not a step-by-step tutorial, the comments in the code are there for a reason. another assumption I'm making is that you understand Sveltekit data flow from hooks.server.ts all the way to page.svelte). Now let's start by creating a utils.ts in our lib directory //utils.ts export const serializeNonPOJOs = (obj) => { return structuredClone(obj); }; In our hooks.server.ts, //@ts-nocheck import PocketBase from 'pocketbase'; import { serializeNonPOJOs } from '$lib/utils'; import { redirect } from '@sveltejs/kit'; import { PB_URL } from '$env/static/private'; /** @type {import('@sveltejs/kit').Handle} */ export async function handle({ event, resolve }) { //console.log("PB Server hook started") event.locals.pb = new PocketBase(PB_URL); // load the store data from the request cookie string event.locals.pb.authStore.loadFromCookie(event.request.headers.get('cookie') || ''); //lets shorten the code for the user if(event.locals.pb.authStore.isValid){ // console.log("PB authStore is valid") event.locals.user = serializeNonPOJOs(event.locals.pb.authStore.model) //console.log("event.locals.user",event.locals.user) } else { event.locals.user = undefined } try { // get an up-to-date auth store state by verifying and refreshing the loaded auth model (if any) event.locals.pb.authStore.isValid && await event.locals.pb.collection('users').authRefresh(); //console.log("PB up to date") } catch (_) { // clear the auth store on failed refresh event.locals.pb.authStore.clear(); console.log("PB cleared") } const response = await resolve(event); // send back the default 'pb_auth' cookie to the client with the latest store state response.headers.append('set-cookie', event.locals.pb.authStore.exportToCookie({ secure: false })); // console.log("PB instance set in hooks:", event.locals.pb); //protect the Portal route if (event.url.pathname === '/Portal') { const user = await event.locals.user if (user) { // User exists let path: string; // 2 checks: redirect based on user role to correct dashboard if (user.full_details === false) { console.log("user full details is false") switch (user.role) { case 'student': path = '/Portal/StudentDashboard/Profile/edit'; break; case 'teacher': path = '/Portal/TeacherDashboard/Profile/edit'; default: path = '/Portal/Something_went_wrong'; // Fallback path } } else { console.log('user full details is true') switch (user.role) { case 'student': path = '/Portal/StudentDashboard'; break; case 'teacher': path = '/Portal/TeacherDashboard'; default: path = '/Portal/Something_went_wrong'; // Fallback path } } redirect(303, path); } else { //user does not exist console.log("user is not signed in") redirect(303, '/auth'); } } return response; }; using patmood/pocketbase-typegen: Typescript generation for pocketbase records we can generate types for our Sveltekit project automatically. create a types folder inside lib, then add this script to your package.json “typegen”: “npx pocketbase-typegen — out ./src/lib/types/pocketbase.d.ts — env”. In your env file insert the following (super user account) PB_TYPEGEN_URL=xxxxxxxx PB_TYPEGEN_EMAIL=xxxxxx@xxx.xxx PB_TYPEGEN_PASSWORD=xxxxxxxxxx and you can then run “npm run typegen” and your types should be generated. we also have to update our app.d.ts so our app is aware of our types. import PocketBase from 'pocketbase'; import { UsersRecord } from '$/lib/types/pocketbase.d.ts'; declare global { declare namespace App { interface Locals { pb: PocketBase; user?: UsersRecord; } } } dont forget to pass the user object to +layout.server.ts //@ts-nocheck export const load = async ({ locals }) => { const user = locals.user || undefined; return { user }; }; From here we should be good to be able to use pocketbase across our application. The most important thing to note below is for the form actions were getting pb(pocketbase) from locals. Here is an example of a sign up and sign in +page.server.ts (using ciscoheat superforms (componetized) and Zod). import { SignInSchema, SignUpSchema } from '$lib/types/schema'; import { redirect } from '@sveltejs/kit' import { ClientResponseError } from 'pocketbase'; import { fail, error } from '@sveltejs/kit'; import { superValidate, message } from 'sveltekit-superforms'; import { zod } from 'sveltekit-superforms/adapters'; import type { Actions } from './$types'; export const load = async ({ locals: { user } }) => { // if the user is already logged take them straight to the users page if (user !== undefined) { console.log("hey you, lets get inside") throw redirect(303, '/Portal') } // Create and validate sign up and sign in form const SignIn_Form = await superValidate(zod(SignInSchema)); const SignUp_Form = await superValidate(zod(SignUpSchema)); // Combine data and form into a single object const data:any = { user, SignUp_Form, SignIn_Form }; return data; } export const actions = { signIn: async ({ request, locals: { pb } }) => { const signIn_Form = await superValidate(request, zod(SignInSchema)); console.log('Sign In', signIn_Form); // error checking for the form itself if(!signIn_Form.valid) { return fail(400, {message:'Invalid signIn Form Submission',errors: signIn_Form.errors,signIn_Form}); } else { const { email, password } = signIn_Form.data; // sending it to PB try { await pb.collection('users').authWithPassword( email, password, ) console.log("PB run(signIn)") } catch (err) { console.log("PB run ERROR! (signIn)", err) //if PB returns error if(err){ if (err instanceof ClientResponseError && err.status === 400) { console.log("error", error) return message(signIn_Form,{text: 'Invalid Credentials, Try again.', status: 401}); } return fail(500, { message: 'Server error. Try again later.'}) } } // Successful sign-In, update the store and dispatch custom event. redirect(303, '/Portal') return message(signIn_Form, {text: 'Login In...'}); } }, signUp: async ({ request, locals: { pb } }) => { console.log("PocketBase instance (pb):", pb); const signUp_Form = await superValidate(request, zod(SignUpSchema)); console.log('Sign Up', signUp_Form); // error checking for the form itself if(!signUp_Form.valid) { return fail(400, {message:'Invalid Form Submission',errors: signUp_Form.errors,signUp_Form}); } else { const { email, password, confirm } = signUp_Form.data; let passwordConfirm = confirm; // sending it to PB try { //default role let role:string = "student"; await pb.collection('users').create({ email, password, passwordConfirm, role }) console.log("PB run(signUp)") await pb.collection('users').requestVerification(email); } catch (err) { //if PB returns error console.log("PB run ERROR(signUp):", JSON.stringify(err)); if(err){ if (err instanceof ClientResponseError && err.status === 400) { return message(signUp_Form,{text: 'Something went wrong, try again', status: 401}); } return fail(500, { message: 'Server error. Try again later.'}) } } // Successful sign-Up, update the store and dispatch custom event. return message(signUp_Form,{text: 'Check your Email for Confirmation.'}); } } } satisfies Actions Zod is a validation libray for those who are not familiar with it, superforms has the ability to other libraries as well. //lib/types/schema.ts import { z } from 'zod' // Sign In Schema export const SignInSchema = z.object({ email: z.string().email().min(3), password: z.string().min(6) }) export type SignInSchema = typeof SignInSchema; // Sign Up Schema export const SignUpSchema = z.object({ email: z.string().email().min(3), password: z.string().min(6), confirm: z.string().min(6) }).refine((data) => data.password == data.confirm,{ message: "Passwords didn't match", path: ["confirm"] }) export type SignUpSchema = typeof SignUpSchema export const UserProfileSchema = z.object({ id: z.string().min(3), username: z.string({ message: "Invalid Government ID Number" }).regex(/^\d{8}$/, { message: "Government ID Number must be exactly 8 digits" }), // government ID number first_name: z.string().min(3, {message: "Invalid First Name"}).max(20), last_name: z.string().min(3, {message: "Invalid Last Name"}).max(20), gender: z.string( {message: "Invalid Gender"}).min(1).max(10), phone: z.string().min(8), DOB: z.string({ message: "Invalid Date" }).refine((dateStr) => { const parsedDate = new Date(dateStr); return !isNaN(parsedDate.getTime());}, { message: "Invalid Date format" }), }) export type UserProfileSchema = typeof UserProfileSchema To log out the user since we are working in a server environment is just as simple as creating a logout route with a +server.ts only and clearing the authStore. import { redirect } from '@sveltejs/kit'; export const POST = ({ locals }) => { locals.pb.authStore.clear(); locals.user = undefined; redirect(303, '/'); } And calling it like so in your +page.svelte(tailwind css) <form action="/auth/logout" method="POST"> <button type="submit"> <div class="flex flex-col items-center"> <LogOut size={38} /> <span class="text-sm font-bold">Log Out</span> </div> </button> </form> let's say you want the student to update their profile info, it becomes a similar story to the auth route. here is a +page.server.ts import { UserProfileSchema } from "$lib/types/schema"; import { ClientResponseError } from 'pocketbase'; import { fail, error } from '@sveltejs/kit'; import { superValidate, message } from 'sveltekit-superforms'; import { zod } from 'sveltekit-superforms/adapters'; import type { Actions } from './$types'; export const load = async ({ locals: { user } }) => { //create and validate store form const UserProfile_Form = await superValidate(user, zod(UserProfileSchema)); // we pass the user as well to auto populate //Combine data from locals and form into a single object const data:any = { UserProfile_Form}; return data; } export const actions = { //"UserProfile" action here refers to the name of the form action, so what should happen when the form //is submitted. UserProfile: async ({ request, locals: { pb } }) => { const UserProfile_Form = await superValidate(request, zod(UserProfileSchema)); console.log('UserProfile Form from +page.server.ts', UserProfile_Form); // error checking for the form itself, here we will tell superforms if there is an error in the form if (!UserProfile_Form.valid) { console.log("invalid form bruh") return fail(400, {message:'Invalid UserProfile Form Submission',errors: UserProfile_Form.errors,UserProfile_Form}); } else { const { id, username, first_name, last_name, gender, phone, DOB, role, full_details, } = UserProfile_Form.data; // sending it to PB (pocketbase) console.log("try block"); try { await pb.collection('users').update(id, { username, first_name, last_name, gender, phone, DOB, role, full_details, }); console.log("PB run (User Profile updated)"); } catch (err) { //if PB returns error if(err){ if (err instanceof ClientResponseError && err.status === 400) { console.log(error) return message(UserProfile_Form,{text: 'Something went wrong, Try again.', status: 401}); } return fail(500, { message: 'Server error. Try again later.'}) } } // this sends a message to the client informing the user that the form has been submitted. return message(UserProfile_Form,{text: 'UserProfile updated.', status: 200}); } } } satisfies Actions here is the accompanying +page.svelte(tailwind css) <script lang="ts"> //@ts-nocheck import SuperForm from '$lib/components/superforms/Form.svelte'; import TextField from '$lib/components/superforms/TextField.svelte'; import HiddenInputField from '$lib/components/superforms/HiddenInputField.svelte'; import TextAreaField from '$lib/components/superforms/TextAreaField.svelte'; import { goto } from '$app/navigation'; import SelectField from '$lib/components/superforms/SelectField.svelte'; import DateInput from '$lib/components/superforms/DateInput.svelte'; import counties from '$lib/counties.json'; export let data let { user, UserProfile_Form } = data; $: ({ UserProfile_Form } = data); //gender object const genders = [ { name: 'Male', value: 'M' }, { name: 'Female', value: 'F' }, { name: 'Other', value: 'O' }, ]; </script> <section class="container mx-auto p-4 md:p-8"> <div class=" shadow-md rounded-lg p-6 max-w-4xl mx-auto"> <h2 class="text-2xl font-bold text-center mb-6">User Profile</h2> <div class="card p-4"> <SuperForm action = "?/UserProfile" data= {data?.UserProfile_Form} invalidateAll={false} let:form let:message > <div class="py-4 px-2 alert-message"> {#if message} <div class= "alert {message.status >= 400 ? 'variant-filled-error': 'variant-filled-success'} text-white p-4 rounded-md" > {message.text} </div> {/if} </div> <!-- fields --> <div class="grid grid-cols-1 "> <!-- for id --> <HiddenInputField {form} field="id" value="{user.id}"></HiddenInputField> <!-- for role --> <HiddenInputField {form} field="role" value="student"></HiddenInputField> <!-- for full details --> <HiddenInputField {form} field="full_details" value={true}></HiddenInputField> <!-- for username(government ID) --> <TextField type="text" {form} field="username" label="Government ID"></TextField> <!-- for first name --> <TextField type="text" {form} field="first_name" label="First Name"></TextField> <!-- for last name --> <TextField type="text" {form} field="last_name" label="Last Name"></TextField> <!-- for Gender --> <SelectField {form} field="gender" label="Gender"> {#each genders as gender} <option value={gender.value}>{gender.name}</option> {/each} </SelectField> <!-- for phone --> <TextField type="number" {form} field="phone" label="Phone ( +2547XXXXXXXX )"></TextField> <!-- for DOB --> <DateInput {form} field="DOB" label="Date of Birth"></DateInput> </div> <div class= "flex items-center justify-center py-4"> <button type="submit" class="btn variant-filled-primary px-8">Update</button> </div> </SuperForm> </div> </div> </section> And there you have it. The only problem with this approach I have noticed is you live and die by form actions every time you want to talk to Pocketbase, hence why I'm using Superforms to make my life easier. I still agree with the authors of Pocketbase that this approach does remove a lot of simplicity and adds extra overhead and if your application is not complex, using Sveltekit in SPA mode will make things move a lot faster, but if you're working for a client who needs just a little bit more control and you are working with external APIs where secret keys are involved that should NEVER be able to access them, the extra work has proven fruitful in my case. And yeah, hope this helps someone, and I’ll see you, when I see you.
0 0 0 0

Pocketbase Blueprint: This was a FUN project. I built a Pocketbase (go) tool. It can read your laravel blueprint draft.yml files, which is a fantastic way to define your project, and migrate your models and fields to Pocketbase collections. #pocketbase #go #laravel #blueprint

0 0 0 0

My #flutter app project involves having local database on phones with syncing to and from central backend. I was playing with #sqlite and #pocketbase, but just discovered #objectbox. Anyone out there have any experience with it? The local db Objectbox is Open source but sync part is subscription?

1 0 0 0
A screenshot of Go code defining a function processRecurringPayments which uses a WaitGroup to manage two concurrent goroutines. Each goroutine calls processPayment with different intervals ('monthly' and 'annual'), and the function waits for both to complete before returning.

A screenshot of Go code defining a function processRecurringPayments which uses a WaitGroup to manage two concurrent goroutines. Each goroutine calls processPayment with different intervals ('monthly' and 'annual'), and the function waits for both to complete before returning.

figuring out how to handle recurring payments through stripe in golang has been pretty fun

Look how clean this is

#golang #pocketbase #stripe

2 0 1 0

I created a library to simplify complex queries in PocketBase.

Tired of writing complex filter queries for PocketBase? Meet PocketbaseQuery 🎯
-> github.com/emresandikci/p…
✅ Fluent API for easy chaining ✅ Supports all common operators
#PocketBase #buildinpublic #github #npm

1 0 0 0

1/2 There is a #free #opensource #selfhosted #alternative:

#Zoom -> #Jitsi
#Notion -> #Appflowy
#Jira -> #Plane
#Airtable -> #NocoDB
#Vercel -> #Coolify
#Heroku -> #Dokku
#Firebase -> #Pocketbase / #Appwrite / #Convex / #Supabase
#Shopify -> #Prestashop

13 2 1 0
Post image

Using a technique I saw from @aaronfrancis.com , I added vector embedding recommendations (via @google.com AI) for my blog posts using sqlite-vec in @pocketbase.io 🚀

rodydavis.com/posts/signal...

#sqlite #pocketbase #ai #llm

5 0 1 0
Some of the icons from the previous post shown in a list. It's the admin view of the content management software Pocketbase

Some of the icons from the previous post shown in a list. It's the admin view of the content management software Pocketbase

Me personally, I love the last six ones on the left / dark side the most. They look clean, share a common style and convey their meaning the best in my opinion.

They motivate me the most when I see them for examlple here in the #pocketbase backend

1 0 0 0

I just published version 0.7.0 of @sparkstone/pocketbase-schema on npm

the typescript type generator cli for pocketbase

the interface generation logic was rewritten and it now generates a Collections enum and enums for your select fields.

#pocketbase #buildinpublic #oss #ts #typescript

6 0 1 1
Post image Post image Post image Post image

We have just released a bunch of Expo / React Native tutorials. Check them out 👉🏻 hestiakit.com/guides

#expo #reactnative #pocketbase #prismajs #zustand #mmkv

2 0 0 0
Preview
@sparkstone/pocketbase-schema `@sparkstone/pocketbase-schema` is an open-source utility to generate TypeScript typings from [PocketBase](https://pocketbase.io/) schemas, enabling type-safe development with PocketBase APIs.. Latest...

I just published version 0.6.0 of @sparkstone/pocketbase-schema on npm

the typescript type generator cli for pocketbase

it converts all collection names to pascal case

www.npmjs.com/package/@spa...

#pocketbase #buildinpublic #oss #ts #typescript

7 0 0 1
Video

Fetching real time market data in a NodeJS server and writing into a #PocketBase database. Created a realtime monitor to keep track of fetched symbols. Never done this before.

5 0 0 0
Post image

Deployed my first ever #PocketBase on a 4.7€ Hetzner server.

9 1 1 0