SQLite support: scoped verification
Checked 30 September 2026. The landing page makes specific claims about relationships, constraints and transactions rather than promising compatibility with every SQLite extension or configuration.
What was verified
The packaged native Windows SDK passed 19 checks: seven positive behavior checks, four invalid-data rejection checks and eight excluded-form rejection checks. Machine-readable results.
| Capability | Observed behavior |
|---|---|
| Managed transactions | An order and its stock update commit together. A failing stock constraint rolls back the order, stock change and trigger effect. |
| Foreign keys | With PRAGMA foreign_keys=ON set on the connection, an order referring to a missing product is rejected. |
| Other constraints | CHECK, UNIQUE and NOT NULL reject invalid writes. |
| Relational queries | A JOIN, aggregation and a persistent view return the expected related records. |
| Schema features | Index creation succeeds; a trigger runs inside the transaction. |
| SQL expressions | A recursive CTE and a window function produce the expected results. |
| Publish/reopen | Tables, the foreign-key definition, view and trigger survive publishing to a local-directory remote and opening a fresh local database from it. |
This is a focused check, not an exhaustive SQLite certification. Native runtime verification used the Windows SDK built from df3809a06183f35424f6cb3bcd75a11b8c05234d. It did not rerun every platform, cloud provider, optional extension, PRAGMA or concurrency scenario.
Intentional boundaries
The source review at 3018fe73de07232b15157e2c43577832a8a10fa7 found these boundaries in the public API contract and native admission code:
- One main database:
ATTACH,DETACHandVACUUMare excluded. - Storage settings belong to the library:
page_size,journal_mode,locking_mode,synchronous,wal_autocheckpoint,wal_checkpointandmmap_sizePRAGMAs are blocked, including getter forms. This does not mean all PRAGMAs are blocked; foreign-key enforcement is explicitly enabled in this example. - Use the SDK transaction API: direct transaction-control SQL through
queryorexecuteis rejected. The SDK owns transaction lifecycle. - One statement per call: use separate calls inside a managed transaction for related operations.
These limits concern the single-database storage profile and API ownership. They do not remove the relational features demonstrated above. A locally atomic transaction is not a promise of globally serializable transactions across disconnected devices. Replay ordering and conflict handling remain separate parts of the synchronization model.
Live example on the page
The “Relationships. Constraints. Transactions.” example uses the bundled potluckdb browser engine, from the same packaged source revision. It creates a disposable local database on demand and enables foreign keys explicitly. One managed transaction inserts an order and reduces stock. The out-of-stock action violates CHECK(stock >= 0); the missing-product action violates a foreign key. A query joins the two tables to display the result.
The example does not contact cloud storage, place a real order or synchronize with the hero. Its reset closes the database and removes only the temporary directory created by this example. The hero is a separate, clearly labeled interaction illustration.
Source references
- Public API contract (private source reviewed; not publicly accessible): query/execute admission and managed transaction ownership.
- SQLite connection implementation (private source reviewed; not publicly accessible):
ensure_statement_allowedand authorizer restrictions. - Differential SQLite tests (private source reviewed; not publicly accessible), commit compatibility (private source reviewed; not publicly accessible), and prepare compatibility (private source reviewed; not publicly accessible): additional source evidence inspected; the full repository test suite was not rerun for this page change.
- Reproduction script in the source workspace:
scripts/check-sqlite-scope.py, with--sdkpointing to the packaged Python SDK and--outputpointing to a new local directory.
