Skip to main content

Foldlite DB

Immutable documents. Rebuildable live views. Rust and WebAssembly.

Foldlite DB is a CouchDB-inspired map/reduce engine built around a simple rule: keep immutable documents, derive everything else. The Rust engine appends accepted document batches to a durable log. Indexes, source checkpoints, group states, and change history form a disposable cache that can be reconstructed from that log. There is one native implementation, exposed to Python; storage needs no database server or external database library.

Write a view in AssemblyScript and compile it to WebAssembly. The same module maps and reduces documents in Rust or entirely in a browser worker. Try the browser playground or read the view authoring guide.

Install

Use Python 3.11+ to install the 0.1.0 release:

python -m pip install foldlitedb==0.1.0

Native wheels are provided for Linux x86-64 and ARM64, macOS Intel and Apple Silicon, and Windows x86-64. Installing a matching wheel needs neither Rust nor Node. The hosted documentation describes the API and bundled portable views.

Build from this checkout

Building from source requires Python 3.11+, Rust/Cargo 1.90+, and a platform C compiler and linker. From the repository root:

python -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install .
python examples/portable_metrics.py

On Windows, activate with .venv\Scripts\activate and use an MSVC build environment. Node.js is unnecessary for installation and bundled views. To make a wheel, run python -m pip wheel . --no-deps --wheel-dir dist. Install that wheel on a matching platform with python -m pip install /path/to/the-built.whl; installing a built wheel needs neither Rust nor Node. See the release guide for PyPI Trusted Publisher setup and the 0.1.0 publication workflow.

Append documents, read a live view

Start with a fresh metrics.fold file:

from foldlitedb import Database, View

view = View.bundled("metrics")
with Database("metrics.fold", view) as db:
    documents = db.add_many([
        {"metric": "loss", "value": 4},
        {"metric": "loss", "value": 8},
    ])
    assert list(db.rows())[0].result == {
        "count": 2, "sum": 12, "min": 4, "max": 8, "mean": 6,
    }
    snapshot = db.query()
    documents += (db.add({"metric": "loss", "value": 3}),)
    assert db.changes(since=snapshot.cursor).rows[0].result["mean"] == 5
    retained = tuple(db.documents())
    db.checkpoint()

Rust executes both map and reduce through a bounded Wasm interpreter. metrics groups finite numbers by a string metric; catalogue demonstrates an ordered fold over structured events. Each database holds one view module. Database and View are the primary Python names; PortableDatabase and PortableView are aliases for the same types.

Try the telemetry collector for bulk import, retries, and a persistent changes consumer, or the catalogue example for an ordered item lifecycle. If a payload produces no rows, inspect its map output with db.preview(payload).

Every unnamed append creates a new observation. Give an observation an ID when identical retries should count once. IDs and positions are scoped to a source; conflicting reuse raises an error. Documents cannot be updated or deleted. Append new observations to represent changes, then let the view fold their history.

add_many commits one atomic batch of at most 1024 documents. Its complete Wasm map request must fit 256 KiB, so larger payloads need smaller batches. rows() follows a stable snapshot in bounded pages; query() and changes(since=...) expose continuation cursors. See the Python API for signatures and limits.

A log you keep; a cache you can discard

For a persistent database, metrics.fold contains the immutable document log. metrics.fold.cache is an optional checkpoint; metrics.fold.lock coordinates one active owner. A batch is acknowledged after its log frame is synced. The engine validates and computes a batch before appending it, so a map or reducer failure does not commit a prefix.

checkpoint() writes an atomic cache snapshot; closing cleanly does the same. On reopen, the engine verifies the log and matching cache prefix, then runs Wasm only for batches after the checkpoint. Missing, corrupt, or incompatible caches are rebuilt from the documents. rebuild() explicitly recomputes the view and starts a new cursor generation. Neither operation changes the source documents.

The document log is independent of the view module. Opening it with different module bytes rebuilds the cache in place; retain the exact module if you need to reproduce its previous results. Close the database before backing up the log and view artifacts; Windows locks prevent other handles from reading an active log. The cache is replaceable; the only copy of a document log is not.

Rebuild uses the original batch order. It scans the log linearly and runs each uncached batch through the same map/reduce path as live ingestion. A valid cache avoids repeated Wasm work, but reopening still verifies the complete log. Current indexes and history grow in memory with the data. Cache snapshots are limited to 1 GiB of encoded checkpoint data; a checkpoint or close error reports a failure to save that accelerator, while committed log data remains intact. There is no claim of constant memory or measured rebuild throughput.

To copy retained records into a fresh database:

with Database("copy.fold", view) as copied:
    copied.ingest(retained)
    assert list(copied.rows())[0].result["mean"] == 5
    before = [(r.key, r.state, r.result) for r in copied.rows()]
    copied.rebuild()
    assert [(r.key, r.state, r.result) for r in copied.rows()] == before

Use ingest_many(records, batch_size=100) for larger archives. Iterate its results to perform the import: each yielded result commits one separate bounded batch, and earlier batches remain committed if a later batch fails. See the retry-safe source import for constructing records with upstream positions or stable IDs alone. Preserve record order; preserve original batch boundaries too if you need identical engine sequence values.

Author a view, run it on a website

The AssemblyScript SDK provides JSON helpers and the Wasm ABI. Implement map, identity, add, and finalize; implement merge only for states that can be combined correctly. Inputs and state are explicit, and views must be deterministic. An ordered fold must give equivalent state when the same contributions are split across successive batches.

Rebuild the two bundled examples with Node.js 20+:

npm ci --prefix views
npm run build --prefix views
npm test --prefix views
npm run check --prefix views

The build writes modules and SHA-256 manifests into src/foldlitedb/portable_assets/. It builds the named metrics and catalogue examples. Compile a custom view and generate its manifest with:

npm run build:view --prefix views -- assembly/examples/my-view.ts --out-dir .build

Both paths are relative to views/. The authoring guide includes a complete custom view and the build command to generate its Wasm and digest manifest.

foldlitedb.portable_assets() exposes compiled modules plus client.js, worker.js, and host.js. Copy them to a static site and import BrowserDatabase from client.js. The browser example covers appends, snapshots, changes, export, and replay verification. JavaScript owns in-memory grouping and storage in the browser worker; the Rust log engine is not compiled into this browser build.

Browser state is lost on reload or close. Export resolved documents first. The preview bounds documents, groups, history, and request sizes. Persistent browser storage, log/history compaction, and multiple views per native database remain future work. JSON numbers use IEEE-754 double precision; use strings for exact arbitrary-precision identifiers.

Development and documentation

python -m pip install '.[dev,browser]'
python -m playwright install chromium
python -m pytest
python -m pytest tests/browser
cargo test --locked --manifest-path native/Cargo.toml -p foldlitedb-portable-engine
npm ci --prefix views
npm test --prefix views
npm run check --prefix views
python scripts/build_docs.py
python scripts/check_docs.py --execute --browser
python -m http.server 8000 --directory _site

The docs checker executes annotated Python examples in fresh temporary directories and checks links, search, and desktop/mobile rendering in Chromium. Open http://localhost:8000 for the built docs and playground. An authorized maintainer can publish checked generated docs with python scripts/publish_docs.py; building alone does not publish them.

Measure the native path on your target filesystem with:

python scripts/benchmark_database.py --documents 10000 --keys 16 --batch-size 100 --live-documents 20 --output native-benchmark.json

Use --storage-root /path/to/filesystem to select the filesystem being measured. The report compares durable ingestion, checkpointing, cached reopen, suffix replay, and full reconstruction, while checking unchanged log bytes and matching results. Local measurements describe that fixture and host.

See DESIGN.md for durability, replay, cache validation, and execution contracts.

Metadata

Release files for foldlitedb 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for foldlitedb 0.1.1
File Size Uploaded Provenance
foldlitedb-0.1.1.tar.gz 361.4 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for foldlitedb 0.1.1
File
foldlitedb-0.1.1-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details
foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
foldlitedb-0.1.1-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
foldlitedb-0.1.1-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 7.1 MB

Release files / foldlitedb-0.1.1.tar.gz

Download URL foldlitedb-0.1.1.tar.gz
Size 361.4 kB
Tags Source
SHA-256 checksum
How to use checksums
8fa322768476c5bc3e3336eb4b60b7a0b1c545f5d0a813baaebddf9d3b0fbd15
BLAKE2b-256 checksum
How to use checksums
9b31278ef009f740fe227db92898be8a18bf5da04a4cc5fe7ccc2745feeddc5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / foldlitedb-0.1.1-cp311-abi3-win_amd64.whl

Download URL foldlitedb-0.1.1-cp311-abi3-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
798ebabeaee4e97d768f73a03ccaa1e8bdfd0e6ea69ca4bca65b1b40ad90703a
BLAKE2b-256 checksum
How to use checksums
6807a07afa9f46a18d0015c192ef329b5a3c3ed1814a888bb4759512827a9d59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
d91236701a5ca791d525bd767015c301dc8f6994e1d8f78edd6bb47f30d00455
BLAKE2b-256 checksum
How to use checksums
308dc6cd2ce73ec22d53d3c53f5140e7821291a8f91e783a0ef4d62b7e160d12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL foldlitedb-0.1.1-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
ce9114fb8cc924f46492231c76c7bfd2fbeb16eb9344a2f0771661c9ba238aa4
BLAKE2b-256 checksum
How to use checksums
e010eaa00d79c133f65eb53e031af42b604f7af7614ad2a69aba42530797defc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / foldlitedb-0.1.1-cp311-abi3-macosx_11_0_arm64.whl

Download URL foldlitedb-0.1.1-cp311-abi3-macosx_11_0_arm64.whl
Size 1.3 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4026d370b006cc3c854db9caa52f94fd94f301e32bbb6b4e53d4ec53796306d9
BLAKE2b-256 checksum
How to use checksums
43ce8e34f181ac306d1c451288dea558ff90d20e2231e54252166da269331d12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Release files / foldlitedb-0.1.1-cp311-abi3-macosx_10_12_x86_64.whl

Download URL foldlitedb-0.1.1-cp311-abi3-macosx_10_12_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7a6b179f2f6d93ecded7b325d1b245d7c344af19a1272086fd793af504cc8615
BLAKE2b-256 checksum
How to use checksums
f84d1b394cbc59f1e891bafaaa8bc39eb6a300ec56c33d62e9385a2d1ad68110
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

Security for foldlitedb 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for foldlitedb-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page