Repository navigation
0.6.0 – 2026-10-17
Release Notes
Added
- Writes from JavaScript.
TableWriterin@timelake/clientappends to tables from Cloudflare Workers, Node,
Deno, Bun, or browsers, through aStore(r2Storefor an R2 binding,memoryStore, or your own). The
WebAssembly module runs the engine's write path: the same row preparation, Parquet files, commits with retries, last-value
index and head. Rows are objects or an Arrow IPC stream;batchIdmakes retries safe. Appends run inline
maintenance like the engine's (size-tier and cold-partition compaction by streaming merge, withinmaxCompactBytes,
default 64 MiB; retention; snapshot expiry), andwriter.maintain()runs a full pass. Tables are created with
the CLI or Python (SPEC §21.10). In Cloudflare Workers, import from@timelake/client/workersand pass the
module from@timelake/client/timelake.wasmtoinitWasm. Measured in workerd: an append of 100,000 rows takes
0.7 s and 37 MiB, compaction of a day of 24 files 2.7 s and 95 MiB (bench/results/WORKERS.md). data-page-rows: rows per Parquet data page in the files a table gets (default 20,000; 8,192 for files
written from JavaScript, where compaction holds a page per column of each file it merges).- Version check interval. The setting
version-check-interval(table or session) says how long the Timelake
reader uses a table version it loaded or checked before checking for a newer one. Within it, queries send no
request for the table's version, and can miss commits by other processes; the process's own commits are seen at
once, and writers always check. The default, 1 second, is the old fixed behaviour;0schecks on every query
(SET timelake.version_check_interval = '30s',--set,Lake(settings=…), ortimelake alter --set). - Ingestion guides. The Quick start has eight sub-pages that set up
continuous ingestion, each with several designs, a recommendation, scheduled checks on recent data, and
maintenance: Local, AWS (S3, Kinesis, SQS, IoT Core, and Firehose into Lambda), Azure (Blob Storage, Event Hubs,
Service Bus, and IoT Hub into Azure Functions), Google Cloud (Cloud Storage and Pub/Sub into Cloud Run functions),
Cloudflare (R2 and Queues, appended by a consumer Worker withTableWriteror by a writer script), Fly.io, Vercel,
and Tigris. Each platform has an
overview, a setup page, a page per design, and a checks page; the docs sidebar opens and closes nested pages. The
Quick start compares the platforms and designs. The AWS page compares S3 with S3 Tables.
Changed
- Compaction streams. Compaction merges its input files as sorted streams instead of loading a partition into
memory, so its memory no longer grows with the partition. Full compaction of TSBS IoT (72 hourly files into 3 days):
3.65 → 2.37 s, peak memory 1.95 → 0.53 GB, with identical files. - Columns are encoded in parallel. Timelake writes Parquet with its own writer (shared with the WebAssembly
writer), encoding each row group's columns on threads of their own. The files are the same, byte for byte. The
compaction above takes 1.17 s instead of 2.37 s; importing 11.7M rows 4.7 s instead of 6.0 s.
Fixed
- Docs: the storage page's check for conditional writes created a table twice, which fails the second time on any
store. It now sends a put-if-absent twice with the AWS CLI. The quick start no longer says that Timelake reads AWS
profiles: it reads theAWS_*environment variables (aws configure export-credentialsexports a profile's). The
storage page says to create a Tigris lake bucket as single-region or multi-region: on Tigris's defaultglobal
buckets, conditional writes are checked within one region only. @timelake/clientdidn't run in Cloudflare Workers: Workers can't compile WebAssembly from bytes at runtime,
which the client did on first use. The@timelake/client/workersentry takes the compiled module instead.
Install timelake-cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/polythings/timelake/releases/download/v0.6.0/timelake-cli-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/polythings/timelake/releases/download/v0.6.0/timelake-cli-installer.ps1 | iex"Download timelake-cli 0.6.0
| File | Platform | Checksum |
|---|---|---|
| timelake-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| timelake-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| timelake-cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| timelake-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| timelake-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo polythings/timelakeYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo polythings/timelake