PocketBase: एक single-file open source backend
(pocketbase.io)- PocketBase एक open source backend है जो real-time database, authentication, file storage और admin dashboard को एक ही फ़ाइल में समेटकर छोटा backend जल्दी बनाने में मदद करता है
- इसका built-in database schema builder, data validation, real-time subscriptions और REST API देता है, जिससे अलग backend सेटअप का बोझ कम होता है
- user management में email/password signup और OAuth2 signup का समर्थन है, और Google, Facebook, GitHub, GitLab का उपयोग किया जा सकता है
- फ़ाइलों को local या S3 storage में रखा जा सकता है, और database records के साथ media attach करके thumbnails तुरंत बनाए जा सकते हैं
- इसे standalone app की तरह शुरू करके Go और JavaScript hooks से बढ़ाया जा सकता है, जिससे custom portable backend बनाना आसान होता है
एक single file में backend features
- PocketBase एक open source backend है जो real-time database, authentication, file storage और admin dashboard को single file के रूप में उपलब्ध कराता है
-
built-in database
- performance पर ज़ोर देने वाले built-in database में schema builder शामिल है
- यह data validation, real-time subscriptions और इस्तेमाल में आसान REST API प्रदान करता है
user authentication और signup
- app users को manage किया जा सकता है और email/password आधारित signup संभाला जा सकता है
- OAuth2 signup भी समर्थित है, जिसमें Google, Facebook, GitHub, GitLab शामिल हैं
file storage और media processing
- फ़ाइलों को local या S3 storage में रखा जा सकता है
- database records में media attach किया जा सकता है, और thumbnails तुरंत generate किए जा सकते हैं
उपयोग का तरीका और विस्तार
- PocketBase को standalone app की तरह इस्तेमाल किया जा सकता है
- framework की तरह उपयोग करने पर इसे Go और JavaScript hooks से extend किया जा सकता है
- इस तरीके से custom portable backend बनाया जा सकता है
JavaScript SDK उदाहरण
- JavaScript SDK में
PocketBaseको import करकेhttp://127.0.0.1:8090जैसे पते पर client बनाया जाता है pb.collection('example').getList()से collection record list को देखा और search किया जा सकता है- उदाहरण में
title != "" && created > "2022-08-01"filter और-created,titlesorting का उपयोग किया गया है
- उदाहरण में
getOne('RECORD_ID'),delete('RECORD_ID'),create()से single record fetch, delete और create किए जाते हैंsubscribe('*', ...)से collection record changes को subscribe किया जाता है, औरunsubscribe()से subscription रोकी जाती है
1 टिप्पणियां
Hacker News की राय
मैंने PocketBase को अपने ऐप के backend/database के रूप में इस्तेमाल किया है और यह शानदार रहा; frontend में React और Vite इस्तेमाल कर रहा हूँ
मैं इसे मुख्य रूप से authentication और paid/free accounts को track करने के लिए इस्तेमाल करता हूँ। Hosting बहुत आसान है, और Appwrite या Supabase को खुद host करने की तुलना में इसका overhead काफी कम लगा। खासकर Supabase झंझटी था, और Appwrite को CapRover से जल्दी चलाया जा सकता था, लेकिन मेरी ज़रूरत के हिसाब से वह ज़रूरत से ज़्यादा था
View collections की मदद से सिर्फ ज़रूरी data लौटाना आसान था, और मैं user तथा paid user collections को join करके सिर्फ paid अवधि लौटाने जैसे काम कर रहा हूँ: https://pocketbase.io/docs/collections/#view-collection
इसे Go या JS से extend किया जा सकता है, इसलिए अगर requirements बहुत complex नहीं हैं तो शायद backend को पूरी तरह छोड़ा भी जा सकता है: https://pocketbase.io/docs/use-as-framework/
मैं PocketBase पर 2 महीने से development कर रहा हूँ और 1–2 महीने में production में जाने वाला हूँ
मैं अपने दोस्त की कंपनी के लिए एक webapp बना रहा था और ऐसा simple system चाहता था जिसे handover करना आसान हो; पूरा setup सिर्फ single binary PocketBase पर चलता है। Web server, server-side JavaScript (compiled TypeScript), और SQLite database — सब एक ही process में हैं, और मैं इसे Vultr पर $12/month में host कर रहा हूँ। Frontend SvelteKit static adapter + Svelte + TypeScript में लिखा है
PocketBase अच्छी तरह बनाया गया है, और इसके author ने सवालों के जवाब बहुत तेज़ी और स्पष्टता से दिए। हालांकि docs में थोड़ी कमी है, CSV loader खुद लिखना पड़ा, और CRUD interface में बहुत सारे objects हों तो वह धीमा हो जाता है। Server-side code से इसे तेज़ बनाया जा सकता है। Server-side JavaScript unit tests भी किसी तरह fit करने पड़े, और यह भी लगा कि काश Copilot/ChatGPT ऐसे सवालों के बेहतर जवाब देते
Web server की 404 page सेट करने का कोई तरीका नहीं है, और binary की filesystem location मायने रखती है — यह भी थोड़ा अजीब है। यह author के अपने use case के हिसाब से design किया गया है, इसलिए ऐसी choices को स्वीकार करना पड़ता है
फिर भी, यह मेरी requirements पर बिल्कुल फिट बैठा। यह simple है और सारा code एक ही भाषा TypeScript में लिखा जा सकता है। यह high-performance नहीं है, लेकिन मुझे उसकी ज़रूरत भी नहीं थी, और यह काम खत्म होने के बाद मैं एक side project भी PocketBase पर बनाने वाला हूँ। यह उतना आसान है। Contract के हिस्से के रूप में मेरे दोस्त की कंपनी ने PocketBase को donate करने का भी फैसला किया है
मैं PocketBase को कई महीनों से production में चला रहा हूँ, और frontend में alpinejs इस्तेमाल कर रहा हूँ
इसकी development philosophy मुझसे पूरी तरह मेल खाती है। यह ऐसा आनंददायक और practical software है जो अपना असली उद्देश्य अच्छे से पूरा करता है, और बिना feature bloat के हर हफ्ते बेहतर हो रहा है
लेकिन जैसे-जैसे यह mainstream होता जाएगा, discussions और issues का थकाऊ होना दिख रहा है, इसलिए चिंता है कि अब तक जैसा support यह दे रहा है, उसे जारी रखते-रखते author burnout का शिकार न हो जाए
अगर आप इससे कमाई कर रहे हैं, तो मैं ज़ोरदार सलाह दूँगा कि Open Collective पर इस project को support करें
मैं PocketBase को शुरुआत से देख रहा हूँ, और इस project की सबसे अच्छी बात यह है कि यह जटिलता से सक्रिय रूप से बचता है और simple, minimal approach पर फोकस करता है
Server पर एक single binary अपलोड करके deployment पूरा हो जाना भी बहुत आकर्षक है। Backend में JavaScript support आने के बाद, मुझे लगा कि यह Remix, Next.js जैसे frameworks को चुनौती देने वाला एक गंभीर दावेदार बन गया है। v1 का इंतज़ार है
सच कहूँ तो मैं सारा data fetch करके Node में process कर सकता था, लेकिन PocketBase के अंदर ही इसे हल करना काफी simple था। मैं यह नहीं कहूँगा कि यह Next या Remix को replace करता है, लेकिन stack में इसे जोड़कर चीज़ें simple करने के लिए मैं इसे मज़बूती से recommend करता हूँ
मैं ऐसा frontend ढूंढ रहा था जो सीधे SQLite database के ऊपर इस्तेमाल किया जा सके। मैंने Vivino हटा दिया क्योंकि 800 से ज़्यादा partners मेरे data को share कर रहे थे
मेरा use case wine collection को design और store करना है, इसलिए एक single executable, admin interface, और database का ऐसा संयोजन जिसे laptop पर रखा जा सके और backup में शामिल किया जा सके — ठीक वैसा ही लग रहा है जैसा मैं चाहता था। इसी वजह से मैं बार-बार HN पर लौट आता हूँ
इस क्षेत्र में अच्छे open source projects की संख्या बढ़ती देखना अच्छा लगता है। Grist और NocoDB भी ज़िक्र के लायक हैं, और दोनों database management पर ज़्यादा focused हैं
यह भी प्रभावशाली है कि शुरुआत करने का तरीका single file या Electron form में इतना simple दिया गया है
https://github.com/gristlabs
https://nocodb.com/
मैंने docs देखे, लेकिन यह साफ़ नहीं है कि कुछ चीज़ें कैसे handle होती हैं
जैसे row-level access control ताकि user सिर्फ अपना data access कर सके, email sending या triggers जैसी external integrations, CSV export/import, और internationalization। जानना चाहता हूँ कि क्या यह सब built-in और intuitive है, या सबके लिए Go या JS extensions चाहिए। Tool खुद अच्छा लग रहा है
जैसा किसी और ने कहा, API rules से row access control किया जा सकता है। Email भेजना, timers सेट करना, और दूसरे web servers को requests भेजना भी संभव है। मैंने खुद इस्तेमाल नहीं किया, लेकिन docs मौजूद हैं: https://pocketbase.io/docs/js-sending-emails/
CSV import खुद लिखना पड़ा, और मैं इसे open source करने के बारे में सोच रहा हूँ। Internationalization इस बात पर निर्भर करता है कि आप कौन-सी functionality चाहते हैं, लेकिन कुल मिलाकर यह frontend-side feature के ज़्यादा करीब लगता है
API Rules: https://pocketbase.io/docs/api-rules-and-filters/#api-rules
Hooks: https://pocketbase.io/docs/js-overview/
Admin panel में data backup और collection schema import/export मौजूद है
बाकी चीज़ों के लिए, authentication emails को छोड़कर, आम तौर पर extensions चाहिए होते हैं; लेकिन सबसे simple extension बस record lifecycle events में सामान्य JavaScript functions जोड़ना है। ये आमतौर पर insert/update/delete से पहले या बाद में चलते हैं। File system, encryption, HTTP, और email operations के लिए कई Go APIs JavaScript runtime में expose की गई हैं
Internationalization को templates और database से handle किया जा सकता है
Supabase और Appwrite सहित मैंने जितने भी PaaS इस्तेमाल किए हैं, उनमें PocketBase सबसे बेहतरीन रहा। Performance अच्छी है, features intuitive हैं, इसे सच में self-host किया जा सकता है, और deployment करना आनंददायक है
मैं mobile app production environment में कई महीनों से PocketBase इस्तेमाल कर रहा हूँ, और अब तक अनुभव बहुत smooth रहा है
JS SDK के साथ, जिन cases में machine learning जैसी special libraries की ज़रूरत नहीं होती, उनमें यह अब मेरा default backend framework बन गया है
PocketBase इतना बढ़िया लगा कि मैंने एक छोटा Nuxt 3 starter बनाया: https://github.com/fayazara/pocketbase-nuxt
उदाहरण में authentication, route rules, CRUD operations, real-time events, और storage शामिल हैं। इसमें refactoring की ज़रूरत है, लेकिन इस पर काम करना सच में मज़ेदार रहा, और मैं इसमें Stripe subscriptions जोड़कर route rules की limits तक इसे push करना चाहता हूँ। अभी तरीका नहीं पता, लेकिन ढूंढने वाला हूँ