Timelaketimelake
DocsBenchmarksRoadmapSpecContribute
Apache 2.0 ·
Roadmap

DoneIn progressPlanned

Tables and storage

Done:1. Iceberg tablesDone:2. CommitsDone:3. Object-store catalogIn progress:4. Time-series table contractIn progress:5. File layout and encodingsIn progress:6. Last-value indexDone:7. One-request table state and version checksDone:8. Table format versions and upgradesDone:9. SettingsPlanned:10. Supplemental timestamps

Writing

Done:11. AppendsDone:12. Late data and dedup on readDone:13. Writes from WebAssemblyPlanned:14. Hot tier and seconds-fresh readsPlanned:15. BackfillIn progress:16. Import and migrationPlanned:17. DeletesPlanned:18. GDPR erasure

Maintenance

Done:19. CompactionIn progress:20. Maintenance runs, retention and expiry

Reading

In progress:21. Timelake readerDone:22. Block cacheDone:23. Filter pushdownDone:24. Pruning with long IN listsDone:25. Newest-first scansDone:26. Scans in series orderDone:27. Materialized rollups

SQL functions

In progress:28. Function libraryDone:29. Time buckets and gap fillingDone:30. Signal aggregatesDone:31. Downsampling with m4

Integrations

Planned:32. REST catalogPlanned:33. DuckDB extensionPlanned:34. Snowflake connectionPlanned:35. Multitenancy

Services

Planned:36. Ingestion and rulesPlanned:37. Data to eventsPlanned:38. Static read modelsPlanned:39. Computed metricsPlanned:40. Agent access with permission setsPlanned:41. Device syncPlanned:42. Edge gatewayPlanned:43. Server mode

Benchmarks

In progress:44. Benchmark harness: timebenchIn progress:45. Industrial IoT benchmarkPlanned:46. Agent benchmark

Background

ArchitectureDeployment and cost modelEmbedded engine: DataFusionLandscape and positioningLicense and open corePurpose and requirementsReleases
TimelaketimelakeThe open time-series lakehouse.
v0 · Apache 2.0 · Contribute · GitHubBuilt on Apache Arrow, Apache DataFusion, Apache Parquet, and Apache Iceberg.
DocsBenchmarksRoadmapSpecContribute

Spec 3 · Tables and storage

Object-store catalog

DoneUpdated 2026-10-12View on GitHub
Versions
0.1.0
Roadmap
v0: a maintenance-free time-series table on S3
Related
2. Commits, 7. One-request table state and version checks, 32. REST catalog

Summary

Tables are committed through the object store alone: vN.metadata.json written with put-if-absent, plus a version hint, in the layout of Iceberg's Hadoop catalog. Plain DuckDB and Spark read the tables with no catalog service, and concurrent writers need nothing but the bucket.

Design

  • Layout: <table>/metadata/vN.metadata.json, committed with a conditional write that fails if the version exists (S3 If-None-Match; GCS and Azure preconditions), and <table>/metadata/version-hint.text, updated after each commit, in the background since the two-step commit (spec 2).
  • Readers: plain DuckDB iceberg_scan('<table dir>') and Spark's HadoopCatalog read the newest version through the hint. The Timelake reader finds it with a listing or the head (spec 7).
  • Lake: a lake is a prefix in a bucket; timelake-tables.json lists its tables.
  • Stores: any store with conditional writes: S3, GCS, Azure, R2, Tigris, MinIO, RustFS, local disk. HTTPS for reading only.
  • Later: the REST catalog (spec 32) can serve the same layout, adding commit queueing, caching and scan planning; tables don't change.

Decisions

IDDecisionStatus
D17v0 catalog layout is Hadoop-catalog compatible: <table>/metadata/vN.metadata.json committed with put-if-absent, plus version-hint.text. Plain DuckDB iceberg_scan('<table dir>') and Spark's HadoopCatalog read tables with no catalog service. A REST endpoint can serve the same layout later.Accepted

Open questions and issues

None open.

History

  • 2026-10-12: built in v0 (D17)
  • 2026-10-19: moved from SPEC.md into spec 4, then into this spec when the specs were regrouped one per feature.