Changelog

Every release of the Koolbase Flutter SDK and API. Dates are when the release was published to pub.dev.

v1.6.0

MinorMarch 2026
New
  • Functions client — Koolbase.functions.invoke() to call deployed functions directly from Flutter
  • invoke() accepts an optional body map and returns a FunctionInvokeResult with statusCode, data, raw, and success fields
  • FunctionInvokeException thrown on network errors or non-2xx responses with the error message and status code
  • Configurable timeout per invocation — defaults to 30 seconds
  • x-api-key authentication handled automatically using the environment public key

v1.5.0

MinorMarch 2026
New
  • OTA Updates — upload asset and config bundles and deliver silent updates to Flutter apps without a store release
  • Koolbase.ota.initialize() — auto-check and download the active bundle on app launch; blocks if mandatory
  • Koolbase.ota.check() — manually check for a newer bundle; returns OtaCheckResult with version, size, and mandatory flag
  • Koolbase.ota.download() — download, SHA-256 verify, and extract a bundle to device storage
  • Koolbase.ota.readJson() — read a JSON file from the active cached bundle
  • Koolbase.ota.getFilePath() — get the absolute path to any file in the active bundle
  • Koolbase.ota.clearBundle() — delete the cached bundle and reset the app to its defaults
  • Mandatory vs optional bundle support — mandatory updates block app launch until download completes
  • Channel support — separate active bundles per production, staging, and development environment
  • SHA-256 checksum verification on every bundle download — corrupt or tampered bundles are rejected
  • Dashboard OTA page — upload modal, release history table, activate, mandatory toggle, rollback, and delete
  • Bundle storage on Cloudflare R2 with 1-hour presigned download URLs

v1.4.0

MinorFebruary 2026
New
  • Realtime WebSocket subscriptions — subscribe to db.record.created, db.record.updated, and db.record.deleted events on any collection
  • Koolbase.realtime.on() — subscribe with onCreated, onUpdated, onDeleted callbacks
  • Koolbase.realtime.setToken() — authenticate realtime subscriptions for private collections
  • KoolbaseSubscription.cancel() — clean up subscriptions to prevent memory leaks
  • RealtimeConnectionState stream — listen for connected, disconnected, and reconnecting states
  • Auto-reconnect — SDK automatically re-establishes the WebSocket connection on disconnect
  • Reference-counted subscriptions — multiple subscribers on the same collection share one connection
Improved
  • Owner-rule collections filter realtime events server-side — only receive events for records you created

v1.3.0

MinorJanuary 2026
New
  • Database module — Koolbase.db with JSONB collections backed by PostgreSQL
  • Koolbase.db.collection() — get a collection reference
  • collection.insert() — insert a record with auto-generated id, created_at, updated_at, created_by
  • collection.get() — fetch all records with optional limit and offset
  • collection.where() — filter records by field values (AND logic)
  • collection.orderBy() — sort by any field, ascending or descending
  • collection.doc(id).get() — fetch a single record by ID
  • collection.doc(id).update() — partial merge update (preserves unspecified fields)
  • collection.doc(id).delete() — delete a record permanently
  • Access rules — read, write, and delete rules per collection: public, authenticated, or owner
  • GIN index on JSONB data column for fast field-level queries
Improved
  • KoolbaseException now includes a code field for programmatic error handling

v1.2.0

MinorDecember 2025
New
  • Storage module — Koolbase.storage backed by Cloudflare R2
  • storage.upload() — upload a File directly to R2 via presigned URL
  • storage.uploadBytes() — upload raw bytes with content type, ideal for image picker integration
  • storage.getDownloadUrl() — get the public R2 URL for a file
  • storage.downloadBytes() — download file bytes directly into the app
  • storage.list() — list files in a bucket with optional path prefix filter
  • storage.delete() — permanently delete a file from R2 and remove metadata
  • onProgress callback on upload() and uploadBytes() for large file progress tracking
  • Automatic content type detection from file extension
Fixed
  • Upload confirmation now correctly handles concurrent uploads to the same path

v1.1.0

MinorNovember 2025
New
  • Authentication module — Koolbase.auth for managing your app's users
  • auth.register() — create a new user account (email + password)
  • auth.login() — authenticate and receive a JWT session token
  • auth.logout() — invalidate the session server-side and clear device token
  • auth.currentUser() — restore session from secure device storage on app launch
  • auth.getToken() — retrieve the raw JWT for use in custom API requests
  • auth.sendVerificationEmail() — send email verification link
  • auth.verifyEmail() — verify email with token from deep link
  • auth.forgotPassword() — request a password reset email
  • auth.resetPassword() — reset password with token from deep link
  • auth.signInWithGoogle() — OAuth sign-in with Google account
  • KoolbaseAuthException with error codes for programmatic error handling
  • Session storage via flutter_secure_storage using platform keychain
  • Sessions scoped per project environment
Improved
  • SDK init is now faster — auth state is restored from secure storage without an API call on subsequent launches

v1.0.0

MajorOctober 2025
New
  • Initial public release of the Koolbase Flutter SDK
  • Koolbase.init() — single initialisation call with your public API key
  • Bootstrap snapshot — flags, config, and version policy fetched in one request on init
  • Local caching via shared_preferences — app starts instantly, works offline
  • Background polling — cache refreshes every 60 seconds by default (configurable)
  • Koolbase.onUpdate stream — listen for when a fresh snapshot is applied
  • Feature flags — Koolbase.flags map with deterministic SHA-256 percentage bucketing
  • Remote config — Koolbase.config with getString, getInt, getDouble, getBool, getMap, getList accessors
  • Version enforcement — Koolbase.version.check() returns forceUpdate, softUpdate, or upToDate
  • VersionStatus enum with forceUpdate, softUpdate, upToDate values
  • Fallback values required on all config accessors — safe by design
  • KoolbaseConfig — publicKey and optional baseUrl, pollingInterval configuration
Security
  • Device ID stored in flutter_secure_storage — encrypted via platform keychain on both iOS and Android
  • SHA-256 bucketing ensures rollout assignment cannot be manipulated by the client