Welcome to Koolbase
Koolbase is Backend as a Service for the apps you actually ship. Auth, database, storage, realtime, semantic search, functions, feature flags, analytics and an offline write queue — one SDK, whether you build in Flutter, React Native or the browser.
What is Koolbase?
Koolbase gives your app a complete backend without the complexity of managing infrastructure. Register users, store data, upload files, stream live updates, deploy serverless functions, and control feature rollouts — all from a single SDK and one dashboard, across every client you ship.
One backend under every client: the same users, the same access rules, the same data, whether the request comes from a browser or a phone. Cached reads, a durable write queue and explicit conflict resolution live in the SDKs rather than in your code — and on Flutter, code push ships a fix to installed apps without waiting for store review.
The SDK initialises once with your API key. From there, every module — Koolbase.auth, Koolbase.db, Koolbase.storage, and more — is available throughout your app.
What's Included
Designer
Describe a screen and get real Flutter, wired to your collections. Press Run and the app builds and opens in a phone frame; export a project a team would keep — Riverpod, typed routes, localisation, tests.
Authentication
Email + password, OAuth (Google + Apple), and phone + OTP. JWT sessions scoped per environment, pluggable token storage, typed errors, and an onAuthStateChange listener.
Database
Flexible JSONB collections with access rules — public, authenticated, owner, scoped, or conditional. Realtime subscriptions, relational populate, and offline-first caching included.
Search — Semantic, Lexical, Hybrid
Three retrieval modes from one endpoint. Auto-embed records via Gemini or OpenAI; auto-index for BM25 on the same write. Pick semantic (HNSW), lexical (BM25), or hybrid (RRF-fused) — all sub-millisecond.
Storage
Upload files directly from the device to Cloudflare R2 using presigned URLs. Per-bucket size and MIME-type limits, custom key/value metadata on every object, and typed errors out of the box.
Realtime
WebSocket subscriptions for live data. Records stream instantly when created, updated, or deleted.
Functions
Deploy serverless functions in TypeScript (Deno) or Dart. Invoke via HTTP or bind to DB events. Retry + dead-letter queue built in.
Feature Flags
Toggle features without redeploying. Percentage-based rollouts and targeted releases.
Remote Config
Update strings, numbers, booleans, and JSON from the dashboard. No app release required.
Version Enforcement
Force or soft-prompt users to update. Set a minimum version per environment with a custom message.
Code Push & OTA
Two tiers: runtime bundles push config, flags, and server-driven UI; VM-level code push ships real Dart code updates over the air on Android and iOS — signed, verified, applied before the first frame, and crash-reverting. Versioned and rolled back in one click.
Analytics
Track screen views, custom events, DAU/WAU/MAU, funnels, and retention cohorts — no third-party SDK needed.
Cloud Messaging
Send push notifications via FCM. Register device tokens, broadcast to all users, and track delivery from the dashboard.
How it works
Create a project and environments
Sign up, create a project, and set up your environments (production, staging, development). Each environment gets its own public API key.
Add the SDK
Flutter: koolbase_flutter in your pubspec. React Native or the browser: npm install @koolbase/react-native or @koolbase/js. Call Koolbase.initialize once with your public key and the whole platform is available.
Build with the full platform
Use Koolbase.auth for users, Koolbase.db for data, Koolbase.storage for files and Koolbase.realtime for live updates — the same surface on every client. On Flutter you can also describe a screen in the Designer and get code wired to your collections.
Control from the dashboard
Toggle feature flags, update remote config, enforce minimum versions, deploy functions, and manage users — all from app.koolbase.com.
Platform Release History
Every shipped release across the Koolbase platform — SDKs, server, dashboard, and tools. Newest first.
v12.6.0Flutter Web — auth, database, storage, realtime and functions run in the browser. Code push and offline sync are absent there and say so; a project’s Trusted Origins now govern the API as well as storage.latestv11.6.0KoolbaseCollectionList.visible — filter the loaded records before both the empty decision and the rows. Search-as-you-type in the Designer is built on it.v11.5.0initializeForTesting() — widget tests can build Koolbase screens without a network or a platform channel.v11.3.0KoolbaseError — one canonical error type across every surface. Catch anything, call KoolbaseError.from(e), branch on code. Found by measuring: four places in 14,732 lines caught a transport failure, so a read losing connection threw a raw SocketException at the callerv11.2.1Analytics events carry the signed-in user automatically. identify() existed but nothing errored when an app never called it — found in a real project as 53 events, 8 users, zero events carrying a user idv11.2.0Koolbase.fiscal — authority-grade sales recording. submit() records and fiscalizes; status() returns the certification the tax authority granted. Live for Ghana GRA E-VAT, with a reference adapter running the same machine anywhere an integration does not exist yetv11.1.1Offline writes refuse when signed out instead of enqueueing under a null owner — a null-owner row is invisible to every per-user read and replay, so the write neither failed nor succeeded. Found on device as a parked ticket that never reached the serverv11.1.0get(fresh: true) — skip the cache and take the network answer, for read-after-write, reconciliation, and projections that must only ingest server-provenance data. A fresh read still updates the cachev11.0.0BREAKING — signUp returns SignUpResult. A project can require a verified contact channel before any session is issued; when it is on, signup creates the account and returns NO session. The old return type could not express thatv10.5.0KoolbaseCollectionGrid — the same collection laid out as a grid. Shares KoolbaseCollectionController with the list, so stale-while-revalidate, pull-to-refresh and the loading/empty/error slots behave identicallyv10.4.0Streams behave the way they read — two gaps that both surfaced as "the UI just does not update". Nothing errored, nothing logged, the data was simply absent; both found by building an app against the SDK rather than reading itv10.3.0Behavioral widgets — KoolbaseAuthGate (auth branching with restore-first, no login flash) and KoolbaseCollectionList (stale-while-revalidate handled, stale beats blank) over a separable data controller. Plus: query refresh streams now keyed by query identity, not collection nameMCP schema layerkoolbase_describe_project, koolbase_get_collection, and koolbase_sdk_conventions — a connected agent reads your collections, access rules (six kinds, as data), unique constraints, and SDK idioms, then generates code wired to your real backend instead of a guessed onev12.0.0Insert-conflicts are real and resolvable — a queued insert refused as a duplicate is held like any other refusal; resolving it IS the insert retried, idempotency-keyed so a lost response can’t duplicatev10.1.2A refused conflict resolution now teaches the stored conflict the server’s current revision — the next attempt is conditional against reality instead of permanently replaying a stale conditionv10.1.0 / v10.1.1The offline queue is observable — pendingWrites() and watchPendingWrites(), per-user. Signed out they throw rather than returning empty: a silent empty is indistinguishable from all-syncedv10.0.0One exception hierarchy — every surface tells failures apart (auth, database, storage, functions) and every surface clears a rejected session. Function failures distinguish not-found, permission, validation, quota, executionv9.4.0iOS VM Code Push complete — over-the-air Dart updates on iOS: download, verify (Ed25519 + build_id), and apply before the app’s first frame on cold launch. Device outcome events (downloaded/activated/failed), automatic quarantine of invalid patches, crash-revertpush-iosOne-command iOS patch publish — patch push-ios signs the KBPI, derives the release build_id from the binary, uploads and publishes. Plus koolbase whoami and auth errors that name the logged-in accountRate-limit observabilitypatch-check rate limiting now records patch_check_rate_limited events (dimension: device/ip) instead of failing silently; per-device allowance raised for integration workflowsv9.3.0flutter_version guard on patch-check — the resolver can refuse a patch built on a different Flutter engine version; closes two cross-engine mis-serve cases. Backward-compatiblev9.1.0VM-level Code Push — KoolbaseVmPatchClient ships real over-the-air Dart updates for Android, with signature + build_id verification and automatic crash-revert. Distinct from the v2.0.0 runtime-bundle code pushv9.0.0Three search modes — semantic (HNSW + cosine), lexical (BM25), and hybrid (RRF-fused). New mode + minSimilarity params on searchSemantic. Auto-lexical-indexing on write, plus a lexical-backfill endpoint for existing recordsv8.0.0Three search modes — semantic, lexical, hybrid. New mode + minSimilarity options on searchSemantic. Parity release with Flutter v9.0.0Hybrid SearchPOST /search-semantic supports mode=semantic|lexical|hybrid with reciprocal-rank fusion (k=60). New POST /vector-fields/{f}/lexical-backfill endpoint. min_similarity (0..100) server-side filter for semantic and hybrid modesSearch Playground + Lexical BackfillSearch Playground in the Vectors section now lets you compare results across all three modes. New 📖 button in the Vector Fields modal triggers lexical backfill for pre-existing recordsv8.0.0Auto-embed via Gemini/OpenAI — searchSemantic with server-side queryText embedding, plus embedText for record backfillv7.0.0Auto-embed parity — searchSemantic with queryText, embedText for backfillv7.0.0Semantic Search — setVector / getVector / deleteVector and searchSemantic with HNSW indexing across 384/768/1024/1536 dimensionsv6.5.0Object versioning — listVersions, getVersion, restoreVersion, purgeVersion, versionId in getDownloadUrl and force-purge in deletev6.4.0Edge image transforms — width / height / format / quality / fit / dpr / gravity at the URL, plus named server-side presetsv6.3.0Public bucket CDN URLs — KoolbaseObject.r2Bucket field, stable cdn.koolbase.com URLs for objects in public bucketsv6.2.0Custom object metadata — set on upload, edit with merge semantics, typed metadata_invalid errors with structured detailv6.1.0Bucket limits — typed exceptions for quota / file-too-large / mime-type rejections, surfaced at presign timev6.0.0Realtime API simplified — subscribe by collection only; the project comes from your session (no more projectId argument)v5.1.0Realtime fixed — the client now connects with the user session and streams live collection changes (was non-functional)v5.0.0Bearer-only data-plane identity — db, storage, and functions authenticate from the verified access token (security); plus atomic db.batch() for all-or-nothing multi-op writesv4.1.0Code Push mandatory bundles — force-update gating via hasMandatoryUpdate and onMandatoryUpdatev4.0.0Removes the legacy OTA client and deprecated auth shims — converges on Koolbase.codePushv3.3.0Typed errors — code-first exceptions across auth and databasev3.2.0Unique constraints — duplicate protection via KoolbaseConflictExceptionv3.1.0Database primitives — upsert and deleteWherev3.0.0Flattened record shape — $-prefixed metadata, cleaner data accessv2.11.0Google Sign-In — end-user OAuth via the SDKv2.10.0Apple Sign-In — end-user OAuth, private relay supportv2.9.0Auth hardening — pluggable storage, typed errors, auth-state listenerv2.7.0Phone + OTP — sendOtp, verifyOtp, linkPhone via SMS providersv2.6.0Logic Engine v2 — 16 operators with AND/OR groupingv2.4.0Cloud Messaging — FCM token registration, send, broadcastv2.3.0Analytics — DAU/WAU/MAU, events, funnels, retentionv2.1.0Server-Driven UI — rfw, KoolbaseDynamicScreenv2.0.0Code Push — bundle cache, verifier, runtime overridev1.9.0Functions — Dart runtime, deploy from SDKv1.8.0Offline-first — Drift, cache-first, optimistic writesv1.0.0Auth, Database, Storage, Realtime, Feature Flags, Remote Config