Skip to main content

without-durability-sqlite

without-durability's two interfaces over one SQLite file. No server, and no third-party dependency: the driver is in the standard library.

from without_durability_sqlite import SqliteCheckpointer, SqliteDurable, SqliteScheduler, connect, migrate

database = connect("workflows.db")
await migrate(database)
durable = SqliteDurable(SqliteCheckpointer(database), SqliteScheduler(database))

It is the smallest thing that still meets every requirement the interface states, which is the clearest way to say what the interface is for: a durable workflow does not need a cluster, a database server, or a dependency.

Two questions the other stores have to answer carefully settle themselves here. There is one writer at a time by construction, so BEGIN IMMEDIATE takes the write lock for the whole transaction and the fence check and the write it guards cannot be interleaved: Postgres needs FOR UPDATE on the claim row to get that and Redis needs a Lua script, while here the transaction is the exclusion. And there is nothing to co-locate, because the datastore is a file, so transact and arrive reach every table an application keeps in it. That last one is the same guarantee DBOS gets from Postgres, for an application that never needed Postgres.

What it costs is the shape of the whole thing: one machine. Every process sharing this store shares a filesystem, so the exclusion holds across the processes on one box and not across a fleet. That is the deployment this is for rather than a defect to apologise for: a CLI that resumes, a desktop app, an agent on a laptop, a single node that would rather not run Postgres to remember what it was doing.

See the without-durability-sqlite guide (with the API reference) for the statements, why connect pays the fsync that the usual WAL advice trades away, why an effect here is a synchronous callback where the Postgres store's is async, and how the blocking driver is kept off the event loop.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

without_durability_sqlite-0.0.2.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

without_durability_sqlite-0.0.2-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file without_durability_sqlite-0.0.2.tar.gz.

File metadata

  • Download URL: without_durability_sqlite-0.0.2.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for without_durability_sqlite-0.0.2.tar.gz
Algorithm Hash digest
SHA256 3576568294346071796c69cb6761a76c8aaa2048839de01ca749ccc98f1f30b0
MD5 185da17d387b5700d980261bfc527152
BLAKE2b-256 2731b06eac52b2b44e93c4b45d473b80e0a176d4cd5e1db3a0283b2886a64cdf

See more details on using hashes here.

File details

Details for the file without_durability_sqlite-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: without_durability_sqlite-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for without_durability_sqlite-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b1d0190bf0393e5838d92d6bcba52d06e86423ce8f18a936d4ca9b2aa0773c9d
MD5 d32720bdf44b64453e28d37341c3f9f3
BLAKE2b-256 b36879a9cbd87bd25705e17239fd672a316a667f28b5ac495e17f9438cc19bd5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page