Skip to main content

No project description provided

Project description

datasette-litestream

PyPI Changelog Tests License

A Datasette <-> Litestream plugin.

Installation

The plugin requires a recent alpha version of Datasette 1.0:

pip install 'datasette>=1.0a20'

Then install this plugin in the same environment as Datasette:

datasette install datasette-litestream

Usage

Replicate a single database to S3

To replicate my_database.db to S3, use the following configuration in your metadata.yaml file:

databases:
  my_database:
    plugins:
      datasette-litestream:
        replicas:
          - url: s3://my-bucket/my_database

Then make sure you export LITESTREAM_ACCESS_KEY_ID and LITESTREAM_SECRET_ACCESS_KEY with your S3 credentials (or AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY), then run with:

datasette my_database.db -m metadata.yaml

Replicate all databases

If you have multiple attached databases in Datasette and want to replicate all of them, the top-level all-replicate key can be used.

plugins:
  datasette-litestream:
    all-replicate:
      - s3://my-bucket/$DB_NAME

When all-replicate is used, a new replica URL is generated for each attached database. In this case, if you had a database named parking_tickets and another named city_budget, then datasette-litestream will replicate them to s3://my-bucket/parking_tickets and s3://my-bucket/city_budget.

This is done with "variables" that datasette-litestream replaces in the all-replicate URL. The supported variables are:

  • $DB_NAME: The name of the Datasette database to replicate.
  • $DB_DIRECTORY: The full parent directory that the SQLite database resides.
  • $PWD: The current working directory of the Datasette process.

Config

Some configuration in the metadata.yaml will be used to auto-generate the litestream.yml file under the hood. You can use this to customize the Litestream replication process.

Top-level

The following are valid keys that are allowed when specifying top-level plugin configuration:

  • all-replicate: A template replica URL used to replicate all attached Datasette databases, see above for details.
  • metrics-addr: Defines the addr: Litestream option, which will expose a Prometheus endpoint at the given URL. Use with caution on public Datasette instances! When defined, the metrics info will appear on the datasette-litestream status page.
  • access-key-id: An alternate way to provide a S3 access key (though the LITESTREAM_ACCESS_KEY_ID environment variable is preferred).
  • secret-access-key: An alternate way to provide a S3 secret key (though the LITESTREAM_SECRET_ACCESS_KEY environment variable is preferred).
  • session-token: Optional AWS session token for temporary credentials (e.g., when using AWS STS).
  • credentials-file: Path to a JSON file containing credentials (see Dynamic Credentials below).
  • credentials-command: A CLI command to execute that returns JSON credentials (see Dynamic Credentials below).
  • credentials-refresh-interval: How often (in seconds) to check for credential changes. Required when using credentials-file or credentials-command.

None of these keys are required.

Example:

plugins:
  datasette-litestream:
    all-replicate:
      - XXX
      - YYY
    metrics-addr: :5001
    access-key-id: $YOUR_KEY
    secret-access-key: $YOUR_SECRET

Dynamic Credentials

For environments where credentials rotate or are fetched dynamically (e.g., from a secrets manager), you can configure datasette-litestream to read credentials from a file or execute a command, and periodically check for changes.

Important: You cannot specify both credentials-file and credentials-command - use one or the other.

Reading credentials from a file

Create a JSON file with your credentials:

{
  "access-key-id": "AKIAIOSFODNN7EXAMPLE",
  "secret-access-key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "session-token": "optional-session-token-for-temporary-credentials"
}

The session-token field is optional and only needed when using temporary AWS credentials (e.g., from AWS STS).

Then configure the plugin to read from this file:

plugins:
  datasette-litestream:
    credentials-file: /path/to/credentials.json
    credentials-refresh-interval: 300  # Check every 5 minutes

Reading credentials from a command

You can also execute a CLI command that outputs JSON credentials. This is useful for integrating with secrets managers or credential vending services:

plugins:
  datasette-litestream:
    credentials-command: ./fetch_creds.sh --bucket my-bucket
    credentials-refresh-interval: 300  # Check every 5 minutes

The command should output JSON to stdout in the same format:

{
  "access-key-id": "AKIAIOSFODNN7EXAMPLE",
  "secret-access-key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "session-token": "optional-session-token"
}

The session-token field is optional.

How credential refresh works

  1. On startup, credentials are loaded from the file or command
  2. Every credentials-refresh-interval seconds, the file is re-read or the command is re-executed
  3. If the credentials have changed, datasette-litestream will:
    • Stop the current litestream process
    • Update the configuration with new credentials
    • Start a new litestream process
  4. If loading credentials fails during a refresh check, the Datasette process will exit with an error

Database-level

The following options are allowed on database-level plugin configuration.

  • replicas
  • monitor-interval
  • checkpoint-interval
  • min-checkpoint-page-count
  • max-checkpoint-page-count
databases:
  my_database:
    plugins:
      datasette-litestream:
        replicas:
          - s3://...
          - file://...
        monitor-interval: XXX
        checkpoint-interval: XXX
        min-checkpoint-page-count: XXX
        max-checkpoint-page-count: XXX

See Litestream Database settings for more information.

Development

To set up this plugin locally, first checkout the code. Then run the tests using uv:

cd datasette-litestream
uv run pytest

To run Datasette with the plugin installed:

uv run datasette -c config.yaml

Project details


Download files

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

Source Distribution

datasette_litestream-0.2a0.tar.gz (19.0 kB view details)

Uploaded Source

Built Distributions

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

datasette_litestream-0.2a0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

datasette_litestream-0.2a0-py3-none-macosx_11_0_arm64.whl (9.2 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

datasette_litestream-0.2a0-py3-none-macosx_10_6_x86_64.whl (10.0 MB view details)

Uploaded Python 3macOS 10.6+ x86-64

datasette_litestream-0.2a0-py3-none-linux_armv7l.whl (8.9 MB view details)

Uploaded Python 3

datasette_litestream-0.2a0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file datasette_litestream-0.2a0.tar.gz.

File metadata

  • Download URL: datasette_litestream-0.2a0.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for datasette_litestream-0.2a0.tar.gz
Algorithm Hash digest
SHA256 216b201543f335499a2590a27873e23d7c242e72eb11045fcddf0c023f4b30e3
MD5 52633d9d6cf288da11036ea74d311525
BLAKE2b-256 24c06336f9ada45b490c7eaf3ca43d39867f18a525d749edbdac0888ff51dce7

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e9cd609898f437f3c430cad0c3496fbf9693d666c71048b9af0d40ed0393f5b7
MD5 3faa36f109bb022d91d32c52a29bf0c9
BLAKE2b-256 e40ae18893591ffbb6375729d9730577d09685500ab717ffdd5e94e9abb56335

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f2c03877b522740341e0ae8cc8890147dc1c915060c84c158dbb573496c09aa3
MD5 f64dc45475501b8d2767a25bc8b92cf8
BLAKE2b-256 14e72b5932346cdb9bbeccad73418b37dda4bcc7fa510a45ca474f562ff59cae

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5179a8a3f3e3e5b4453b7392c83b42b82f8cdee37233affbce295d726d9fffd
MD5 7371a6947f25d953a83ce03440580e75
BLAKE2b-256 b0432592b5a889357bb0c06dd579949b225fbc01955e051151d4f607033379e4

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-macosx_10_6_x86_64.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-macosx_10_6_x86_64.whl
Algorithm Hash digest
SHA256 9e9f0d24b3a49d4f7cf26efb4bd3b18c4db660d539f1a9468565c53dad4a3b46
MD5 0f85b439054b5ccf8ae7e29d3531365b
BLAKE2b-256 d6480714edc54dd1ce0e057ac8c777fdeef5e8a5ff739ab6dcd2d3ae03dc1873

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-linux_armv7l.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 426dbc72adb88c21e5380399f77518c74122c4962bb4c7614b9f2018290f0d5b
MD5 f60b6b0909abc102d881ecb1e322e890
BLAKE2b-256 ac9e15a7c5242c6b3a48be4d657a9c574ae113d3ef8d083f7807d8554bb41c72

See more details on using hashes here.

File details

Details for the file datasette_litestream-0.2a0-py3-none-any.whl.

File metadata

File hashes

Hashes for datasette_litestream-0.2a0-py3-none-any.whl
Algorithm Hash digest
SHA256 37fac0e67f733008041f0c8498a4aedff984f84eaee7c89d71c98aae39b48ce0
MD5 d660e8be578ba379137d1e88eb2a457a
BLAKE2b-256 41d6e302ca2e63898c1e7ae2bd9914ffc222cb118d39ad7987cfcad6307ddf68

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