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.2

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.2
File Size Uploaded Provenance
foldlitedb-0.1.2.tar.gz 362.7 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for foldlitedb 0.1.2
File
foldlitedb-0.1.2-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
foldlitedb-0.1.2-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.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
foldlitedb-0.1.2-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
foldlitedb-0.1.2-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.2.tar.gz

Download URL foldlitedb-0.1.2.tar.gz
Size 362.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ff92c41d45dc1e5fce31a31c8e742a6b3bfc4cc69b1558135d74a10a95fa14ea
BLAKE2b-256 checksum
How to use checksums
73ec0ca10f1c68fcd133edc5184389d84a814f8fb344dd132a03fe443e70231e
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.2-cp311-abi3-win_amd64.whl

Download URL foldlitedb-0.1.2-cp311-abi3-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b2d850a3bc2575098e957a652e9704e960e767f60762cb09ec93491ec6ac633b
BLAKE2b-256 checksum
How to use checksums
74092b1ac09fbe72f650b46e0bf0e1b3411f2b25c4e7a0de86850eeeb3fd32ad
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.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL foldlitedb-0.1.2-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
76255c466b97ded0a04426451445ac38e4b7930c071f45d138fc29ded11c9d6c
BLAKE2b-256 checksum
How to use checksums
272173d7523fca07a4da7e0a56fd9ac2d327f69dcf526509778a9bcc8a1fa820
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.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL foldlitedb-0.1.2-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
8a24072cc9d7833834c8554b476b5aa47add46cff89ad97908edfb721e96620e
BLAKE2b-256 checksum
How to use checksums
c0a5cab44ee577c3f325b8e6d2a2d5390aaeb68f3a0a448b45a40ce8eef2c9cd
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.2-cp311-abi3-macosx_11_0_arm64.whl

Download URL foldlitedb-0.1.2-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
9acaf1c27f4e1804d415264925503106faa57e43aef8bcba353ba50c04203894
BLAKE2b-256 checksum
How to use checksums
78ec13cde947ac117b224165048aeb6e2b9503900f8e5a6d9b1032ea908f0221
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.2-cp311-abi3-macosx_10_12_x86_64.whl

Download URL foldlitedb-0.1.2-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
dc7ea0a6f77d804216132b910c36bf001e15013131e15ca9a2d796ee7cda7d75
BLAKE2b-256 checksum
How to use checksums
78596b0accb547f19958d4b7d0824b69fe06a6327910aacf72051d6ad32d78f0
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.2

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.2.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