Versioning
DVC vs lakeFS vs Delta Lake
DVC, lakeFS, and Delta Lake all version data, but they version different things. DVC versions files next to Git. lakeFS versions a data lake with Git-like branches on object storage. Delta Lake is an ACID table format on Parquet with time travel. They are not interchangeable.
Updated · Part of What is dataset versioning?
Three versioning jobs
"Git for data" is a slogan that covers unlike products. One pins files for an ML experiment. One branches a lake without copying objects. One is a table format with transactions.
DVC
DVC (Data Version Control) versions datasets and models beside Git. You install it as a CLI, a VS Code extension, or a Python library. It stores hashes in Git and large files in remote storage you configure. It is a workflow around files and pipelines, not a lakehouse table format. Docs: https://dvc.org/doc
lakeFS
lakeFS is version control over a data lake using Git-like semantics: branch, commit, merge, revert, tag, and hooks. Initial branch creation is a metadata operation (zero-copy). Data stays in S3, GCS, Azure, or compatible storage. It speaks the S3 API so existing tools can read lakefs://repository/branch/path. Teams use it for isolated experiments, write-audit-publish, and agent branches gated by pull requests. Docs: https://docs.lakefs.io/
Delta Lake
Delta Lake is an open-source storage layer that enables a lakehouse on data lakes: ACID transactions, scalable metadata, unified streaming and batch, schema enforcement, time travel, and upserts/deletes (MERGE). Tables live as Parquet plus a transaction log on S3, ADLS, GCS, or HDFS. Engines include Apache Spark, Flink, Hive, Trino, and others. Docs: https://docs.delta.io/latest/delta-intro.html
How to choose
Pick the unit you need to pin: a file set, a lake branch, or a table version.
- Pick DVC when Git already versions code and you need to pin dataset files and pipeline stages for an experiment.
- Pick lakeFS when many tools share a bucket and you need isolated, zero-copy branches and atomic merges on that lake.
- Pick Delta Lake when Spark (or another connector) should read and write ACID tables with time travel on Parquet.
Last reviewed
Facts on this page were checked against vendor documentation on 2026-10-28. Product surfaces move; treat version names and APIs as directional and follow the official links in Related.
DVC vs lakeFS vs Delta Lake (last reviewed: Oct 2026)
| DVC | lakeFS | Delta Lake | |
|---|---|---|---|
| What it versions | Files and pipeline stages next to Git | A data lake: branches, commits, merges | Tables: Parquet files plus a transaction log |
| Unit of isolation | A Git commit plus DVC remotes | A branch (zero-copy metadata) | A table version (time travel) |
| Transactions | Git commit of hashes, not lake ACID | Atomic merge of a branch | ACID on Spark and other connectors |
| Where bytes live | A remote you configure (S3, local, and others) | Your existing bucket; lakeFS is a metadata layer | The lake path you give the table |
| Best for | ML experiments that must pin files | Git-like collaboration on a shared lake | Lakehouse tables with MERGE and time travel |
| Official docs | https://dvc.org/doc | https://docs.lakefs.io/ | https://docs.delta.io/latest/delta-intro.html |
Where Pixeltable fits
Use Pixeltable when the unit you need to pin is a table of typed media and computed columns, with history() and revert on that catalog, not a lake branch and not a Git-tracked file hash. It is not DVC, not lakeFS, and not Delta Lake. Keep DVC for experiment files beside Git. Keep lakeFS when the company lake needs Git-like branches. Keep Delta Lake when Spark ACID tables are the contract. Export to a lake when a warehouse or lakehouse must read a snapshot.
import pixeltable as pxtfrom pixeltable.functions.openai import chat_completionsTableModel = pxt.model_base()class Docs(TableModel, name='docs'):text: pxt.Stringsummary = chat_completions(messages=[{'role': 'user', 'content': text}],model='gpt-4o-mini',).choices[0].message.content# pxt schema update app.py docs -f# Insert recomputes that row. Unchanged rows keep the cached summary.# pxt history# pxt revert --steps 1
Questions
Is lakeFS the same as Delta Lake time travel?
Is DVC a lakehouse?
Can I use more than one?
Where do computed media columns fit?
Next step
Install the Pixeltable skill, or sign up for Cloud and run the same file on a hosted database.