Skip to content
potluckdb

Features

Features · Performance · Compatibility

This page lists every application capability, grouped by purpose, with one row per capability. Each works on every platform and language in the compatibility matrix, unless its row names an exception. See Concepts for the terms used here.

Operations use Python spellings. Each language’s reference gives its own spellings.

FeatureWhat it means for the applicationEverywhere exceptDocumented
A real SQLite database on the deviceRead and write a SQLite database at a path, with SQLite’s SQL, transactions and speed. Writes never wait for the network. Reads wait only for unfetched pages.—/reference/python/database/
Reads and writes told apart before they runquery declares a read and execute declares a write. A call with the wrong intent fails with an error code and an action. SQLite can apply effects during statement preparation even if the call refuses execution.—/reference/python/connection/
Durable local storage on disk or in the browserEach database uses one append-only container, on disk or in the browser’s origin private file system. Each commit is durable. One opener owns it at a time. local_budget_bytes bounds its contents.—/compatibility/
Storage that stays compactEach connection checkpoints according to your policy. The container compacts when both its size threshold and dead-byte ratio are crossed. Local storage therefore stays bounded.—/reference/advanced/
FeatureWhat it means for the applicationEverywhere exceptDocumented
No server to runDevices exchange immutable objects through a remote with two compare-and-swap cells. Supported storage services provide this. No potluckdb server, relay or daemon needs deployment, scaling or payment.—/install/python/#remote-storage
Two-way sync, automatic by defaultA writable database with a remote synchronizes automatically. sync synchronizes once on demand and returns an outcome value. It publishes local writes if there are any. Otherwise, it pulls a newer revision if one exists. on_sync reports each automatic outcome.—/reference/python/database/
Four remote kinds, one line apartChoose a directory, S3-compatible bucket, Google Cloud Storage or Azure Blob Storage. Only the constructor changes. Every other program line stays the same.—/reference/python/remote/
Short-lived credentials, no stored keySupply a credentials callback with an expiry. The runtime refreshes credentials before expiry and never renders the secret. Devices carry no long-lived credential key.—/reference/python/remote/
Every outcome is a valuesync returns pushed, pulled, up to date or conflict as a value. A failure raises an error that carries a code and an action. status reports database, connection or snapshot state without side effects.—/reference/options/
Conflicts come back as data and replayA push meeting an unseen remote head returns a conflict value. resolve_conflict adopts that revision, replays local statements and names quarantined transactions. See the replay limitations.—/reference/python/database/
A device cannot flood the bucketUploads per publication and re-encryption limits are bounded and public. A fleet of devices therefore has a predictable request rate.—/reference/options/
FeatureWhat it means for the applicationEverywhere exceptDocumented
Only changed pages travelA push sends changed pages. A piece already present under its digest is not replaced. Pieces use plaintext digests as names, so compression and encryption preserve deduplication. Retrying a push can still make storage requests and transfer bytes.—/performance/
Open before the download completesA device with a remote reads pages on demand, making large databases usable immediately. The prefetch policy bounds retrieval ahead of statements and in the background.—/reference/options/
Compressed on the wireThe runtime compresses pieces before encrypting and publishing them. The envelope carries the compression flag, so readers never guess.—/reference/options/
Encrypted before it leaves the deviceWhen enabled, AES-256-GCM encrypts every published piece with an application-held encryption key. The bucket sees ciphertext and a key identity. admin.reencrypt migrates one retained revision to a new encryption key.—/reference/advanced/
FeatureWhat it means for the applicationEverywhere exceptDocumented
Read any retained revisionopen_revision opens exactly one retained revision read-only. Use the data as it was for audit, support or historical reads.—/reference/python/snapshot/
Retention you set, collection you controlcollect keeps the newest revisions and removes objects no retained revision references. Retention is a replaceable policy over an exact history.—/reference/advanced/
FeatureWhat it means for the applicationEverywhere exceptDocumented
Analytical SQL on DuckDB over the same dataDuckDB queries a read-only snapshot of the same database on the device. Native targets load the engine at run time. WebAssembly links it into the module.Rust on Linux (musl)/analytics-engine/
FeatureWhat it means for the applicationEverywhere exceptDocumented
One API in fourteen languagesEvery SDK exposes the same everyday operations, checked by name against the declared surface. The native application ABI provides the same intents as C symbols. A team can change language without relearning the model.—/compatibility/
DB-API, JDBC and ODBC over the same databasePython uses potluckdb.dbapi, JVM programs use JDBC, and desktop tools use ODBC. One connection string names the local database, remote and options without secrets. Existing tools read and write the synchronized database.—/interfaces/dbapi/
A trial, then a license key, all offlineEvery SDK authorizes the database location before it operates. Supply a license key through the license_key open option, the environment or the configuration directory. Without an accepted license key, a 30-day trial applies per machine. After the trial, existing databases keep working, but creating a database needs an accepted license key. No server is consulted in either case.—/licensing/

The generator checks each feature against the behavior specification. Each documentation link leads to the behavior that your application can use.