Personal
Free
For learning, hobby projects and free apps you publish yourself. One seat.

LOCAL-FIRST SQLITE · WEB, MOBILE & DESKTOP
Build responsive apps with the SQLite you already know.
Keep them in sync through a bucket. No sync servers to manage.
Ship faster. Keep costs low.
A good day, together.
Made with care.
Something good.
11 available
Your next order starts here.
One café. Three views of the same shared data.
Interactive illustration · sample orders · sync timing simplifiedYour stack. Your storage. A full-featured 30-day trial.
BUILD ON WHAT YOU KNOW
Use familiar SQLite and ready-made SDKs across web, mobile and desktop. Spend less time learning a backend and building integrations—and more time building your app.
SELECT title FROM notes;Swipe to compare platforms
| Your stack↓ Your platform → | BrowserWebAssembly | iOS& iPadOS | Android | macOS | Windows | Linuxglibc | Linuxmusl |
|---|---|---|---|---|---|---|---|
| JavaScript · TypeScript | Supported | Supported | Supported | Supported | Supported | Supported | Supported |
| Python | Not listed | Not listed | Not listed | Supported | Supported | Supported | Supported |
| Java · Kotlin | Not listed | Not listed | Supported | Supported | Supported | Supported | Not listed |
| Swift · Objective-C | Not listed | Supported | Not listed | Supported | Not listed | Not listed | Not listed |
| Dart · Flutter | Not listed | Supported | Supported | Supported | Supported | Supported | Not listed |
| Go | Not listed | Not listed | Not listed | Supported | Supported | Supported | Not listed |
| Rust | Not listed | Not listed | Not listed | Supported | Supported | Supported | Supported |
| C# · .NET | Not listed | Supported | Supported | Supported | Supported | Supported | Supported |
| C · C++ | Not listed | Supported | Supported | Supported | Supported | Supported | Supported |
| Your stack↓ Your platform → | BrowserWebAssembly | iOS& iPadOS | Android | macOS | Windows | Linuxglibc | Linuxmusl |
|---|---|---|---|---|---|---|---|
| Electron | Not listed | Not listed | Not listed | Supported | Supported | Supported | Not listed |
| Tauri | Not listed | Not listed | Not listed | Supported | Supported | Supported | Not listed |
| Qt | Not listed | Not listed | Not listed | Supported | Supported | Supported | Not listed |
| Flutter | Not listed | Supported | Supported | Supported | Supported | Supported | Not listed |
| React Native | Not listed | Supported | Supported | Not listed | Not listed | Not listed | Not listed |
| Capacitor · Ionic | Not listed | Supported | Supported | Not listed | Not listed | Not listed | Not listed |
| .NET MAUI | Not listed | Supported | Supported | Supported | Supported | Not listed | Not listed |
ChromeOS uses browser, Android or Linux-container apps. Mobile JavaScript uses React Native or Capacitor. Analytics availability varies by platform.
ChromeOS uses browser, Android or Linux-container apps. Available languages and features vary by platform.
@potluckdb/potluckdb-node-wasm exposes the lower-level Runtime Interface for bindings and specialized hosts.Thirteen languages and Flutter. Familiar packages.
@potluckdb/potluckdb@potluckdb/potluckdb-browserpotluckdbdev.potluckdb:potluckdb-jvmdev.potluckdb:potluckdb (Android)potluckdb-swiftpotluckdbgithub.com/potluckdb/potluckdb-gopotluckdbpotluckdbpotluckdb-c-sdk@potluckdb/potluckdb-browser-analytics and @potluckdb/potluckdb-node-wasm-analytics include the analytical engine. Node's native SDK uses @potluckdb/potluckdb-analytics.
The supported framework and platform combinations.
| Framework | Platforms | Package |
|---|---|---|
| Electron | macOS · Linux · Windows | @potluckdb/potluckdb |
| Tauri | macOS · Linux · Windows | potluckdb · Rust |
| Qt | macOS · Linux · Windows | potluckdb-c-sdk · C++ |
| Flutter | macOS · Linux · Windows · iOS · iPadOS · Android | potluckdb · Dart |
| React Native | iOS · iPadOS · Android | @potluckdb/potluckdb-react-native |
| Capacitor · Ionic | iOS · iPadOS · Android | @potluckdb/potluckdb-capacitor |
| .NET MAUI | macOS · Windows · iOS · iPadOS · Android | potluckdb · C# |
Python DB-API · JDBC · ODBC
Connect existing tools to the same synchronized database.Full platform and language matrix Includes platform-specific availability and analytics exceptions.
A BUCKET INSTEAD OF A SYNC SERVICE
Sync through your storage bucket. Keep infrastructure costs to storage, requests and transfer, without running a dedicated sync service.
Also S3-compatible storage, including MinIO, and a local directory for development.
The potluckdb license is separate from your storage-provider bill.
Defaults batch outgoing changes for 30 ms and check for updates every 200 ms while active, or every second while idle. These are scheduling intervals; end-to-end arrival depends on the network and workload.
STORAGE, WITHOUT A SYNC-SERVER BILL
Storage-only estimate · USD/month
1,000 GB of billable objects
Stored objects, not logical database size. Requests, downloads, retained versions, minimum billing and early deletion can change the bill. potluckdb license and taxes are separate.
Monthly pay-as-you-go list rates checked 30 September 2026. This comparison models 1,000 GB of billable storage, no free-tier credits or introductory offers, and no extra request, download or deletion charges. Provider billing units and rounding may differ.
Compression may reduce the stored footprint; retained revisions and metadata may increase it. This is a comparison of storage rates, not a forecast for a specific app.
Full assumptions & policy sources ↗MAKE YOUR APP FEEL IMMEDIATE
A compact browser core gets out of the way.
Local reads and writes keep the network off the path to a save.
Local SDK write calls with S3 configured. Network sync and UI rendering are outside this timing.
Published run: 20,000 rows, 256-byte payloads, batches of 1,000.
Highest throughput in the published run.
S3 Express configured; inserts execute locally.
Median point read. Lower is faster. Blue highlights Amazon S3 as a reference configuration.
Local operations with each remote configured; these are not bucket read latencies.
Download the measurements ↓KEEP WORKING OFFLINE
Read and edit data already on the device.
Reconnect, and your changes are ready to sync.
Connected. Add or remove a note on either device.
Interactive illustration · timing simplifiedTRY THE REAL ENGINE
Fetch the pages you need. Sync compressed changes.
Try a read, a cached read and a one-row edit.
ONE SHARED DATABASE
A fresh sample, generated here.
No account. No cloud credentials.
A large database. A small read.
Load the sample to measure the difference.
The engine loads only when you start. Your sample stays in this browser.
| ID | Title | Category |
|---|---|---|
| — | Run the sample to see real rows. | — |
Every request. Directly labeled bytes.
A request waterfall, measured locally.
Smaller before it travels. Initial publication: — of SQLite pages becomes — of submitted payload. Run the sample to measure it. This combines compression and deduplication; it includes revision metadata.
The real potluckdb WebAssembly engine runs against an in-memory, S3-shaped demo bucket. Request bodies are measured, including metadata; HTTP headers, TLS and the engine download are excluded. The waterfall shows local operation timing, not internet latency. On-demand reads use prefetch disabled to isolate the pages needed by this query. SQL data includes repeated text and randomized content; results depend on the workload.
SELECT id, title, category FROM notes WHERE id BETWEEN 9951 AND 9970 ORDER BY id
Published cloud reference: 97.3 kB submitted for a 100-row S3 push with 256-byte payloads per row. Conditions and raw results ↗.
Sample data uses this browser’s private storage. Clear demo data removes this run’s files. Reloading starts a new run. The bundled engine is release 0.1.0-rc.df3809a06183.
Run the sample to see the measured trace.
Real engine · local demo bucket · measured payload bytes
GET AHEAD OF THE NEXT READ
Fetch pages on demand, then get ahead with parallel prefetching.
Keep fetched data locally for the next read.
Open + full scan of a fresh snapshot. Lower is faster.
Controlled experiment · 4,096 rows · simulated 20 ms per object read · median of four fresh runs per mode.
Local adapter with simulated latency. Prefetch increased object requests from 72 to 105; this is not a cloud benchmark.
REAL SQLITE. CONNECTED DATA.
Join your tables. Enforce your rules.
Commit related changes together, with SQLite on the device.
A new order is recorded.
Available stock is reduced.
Start with 3 coffees in stock. Place an order—or try one the database should reject.
orders JOIN products#201 · Coffee · 1 cup · $4.00
This runs the bundled potluckdb WebAssembly engine in your browser. The café here is a separate local example from the illustrative hero. Each order inserts a row and updates stock inside the SDK’s managed transaction. The stock CHECK rejects an oversized order; the transaction rolls back its new order too.
await db.transaction(async tx => {
await tx.execute(
"INSERT INTO orders(product_id, quantity) VALUES(?, ?)", [1, quantity]);
await tx.execute(
"UPDATE products SET stock = stock - ? WHERE id = ?", [quantity, 1]);
});
SELECT orders.id, products.name, orders.quantity
FROM orders JOIN products ON orders.product_id = products.id;Foreign keys are explicitly enabled for this connection with PRAGMA foreign_keys=ON.
SQLite queries, relationships and transactions are supported within a single-main-database profile. ATTACH, DETACH, VACUUM and library-owned storage settings are excluded. Use the SDK transaction API and one statement per call. Local atomicity does not imply a distributed transaction across devices.
Checked features, exclusions & evidence ↗JOINs · Foreign keys · Transactions · Indexes · Views · Triggers
CHANGES FROM MORE THAN ONE DEVICE
One device syncs first. The other can re-apply its pending changes
to that newer version, following the SQL you wrote.
Coffees left
8Last published stock
12Starting versionCoffees left
11That’s replay: re-running the phone’s recorded SQL on the newer shared data.
Your app chooses when to resolve the conflict.
A constraint failure or replay mismatch is set aside and reported, so your app can handle it explicitly.
The phone recorded a subtraction, not a replacement stock count:
UPDATE stock SET units = units - ? WHERE id = 1;
-- Recorded parameter: 1
-- On the newer shared value: 8 - 1 = 7
SQL expressions run again; parameters stay as recorded. If the phone had instead recorded SET units = ? with the value 11, applying that statement would set the count to 11. The result follows the operation your app recorded.
resolveConflict(); background sync does not silently resolve it.sync() to publish the successfully replayed work.A constraint failure or replay mismatch rolls back that replay attempt, preserves it in quarantine and lets later transactions proceed. Temporary resource or storage errors can stop replay and leave work pending for a retry. Replay follows your SQL; it does not infer your application's intended merge.
Replay rules, example checks & sourceKeep the history you need. Read retained revisions, set retention and storage budgets, and reclaim space with automatic compaction.
KEEP CONTROL OF YOUR DATA
Enable AES-256-GCM encryption before database pages leave the device.
Your application holds the key. Your bucket holds encrypted pages.
Application-held keysKept in your keychain or secret store.
Key migrationRe-encrypt a retained revision with a new key.
Temporary credentialsShort-lived storage access, refreshed by the SDK.
Encryption is optional and protects published data. Local-device protection is separate.
DUCKDB'S EXECUTION ENGINE. YOUR DATA.
Use the optional DuckDB engine to group, aggregate and analyze
a read-only snapshot of the same data.
faster for this aggregation
Grouped count, sum, minimum and maximum. Warm median; lower is faster.
Local Windows experiment · native SDK · six warm samples per engine · identical results verified.
ADVANCED CONFIGURATION · OPTIONAL
Run large analytical queries on your own compute near the bucket.
Only the results travel back to your app.
Web · Mobile · Desktop
Local SQLite stays localEC2 or similar compute
S3 or compatible storage
Optional, customer-built setup. You provide the query endpoint and compute, sized for your workload. Compute and applicable transfer charges are additional. Architecture notes ↗
THE BENEFITS, TOGETHER
| Your benefit | What makes it possible | Details & evidence |
|---|---|---|
| Build across platforms | Familiar SQLite and ready-made SDKs for web, mobile, desktop and server apps. | Languages, frameworks, runtimes and operating systems. Explore the support matrix ↗ |
| Model real app data | JOINs, foreign keys, transactions, indexes, views and triggers. Import records in batches. | Try relationships & transactions ↗ See the 20,000-row import benchmark ↗ |
| Make every tap feel fast | Read and write locally, with a compact browser engine. Save without waiting for a network round trip. | 0.62 ms local writeMedian · native Python SDK on EC2 · S3 configured. Excludes sync and UI rendering.792 kB Brotli core & timing details ↗ |
| Keep working offline | Read and edit locally available data. Reconnect to share pending changes through your bucket. | Connected sync runs in the background. Try disconnecting the devices ↗ |
| Run less infrastructure | No dedicated sync server. Use S3, R2, Wasabi, IDrive e2, Google Cloud Storage, Azure Blob or compatible storage. | Provider bills storage, requests and transfer. potluckdb license is separate. Compare storage costs ↗ |
| Move less. Load smarter. | Delta sync, compression and deduplication. Parallel fetching and pushing, bounded prefetching and local caching. | Measure transfers with the live engine ↗ See the prefetch experiment ↗ |
| Add powerful analytics | Optional DuckDB execution. For larger workloads, run your own query service near storage and return results to the app. | 5.2× faster aggregation1 million rows · warm native Windows query · DuckDB vs SQLite in the measured workload.See the comparison ↗ · Optional setup ↗ |
| Keep your data yours | Optional AES-256-GCM encryption with application-held keys. Key migration and refreshable, short-lived storage credentials. | Protects published data; local-device protection is separate. See how encryption works ↗ |
| Understand concurrent edits | Replay recorded SQL on newer shared data. Constraint failures and replay mismatches are set aside and reported. | Your app decides when to resolve and how to handle failures. Follow two devices through a conflict ↗ |
| Keep useful history | Read retained revisions, set retention and storage budgets, and reclaim local space with automatic compaction. | Read-only snapshots of retained revisions. Explore the documentation ↗ |
Measurements describe the linked workloads, not every app or platform. SDK and optional-engine availability vary by platform; see the support matrix and documentation.
Pricing
One seat per developer. People who use your apps never need a seat.
See plans and pricing