NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3252 most downloaded on PyPI
Distributed Dataframes for Multimodal Data
Last release 23 days ago
12 Sep 2026
Ships fairly regularly
a new release about every 1 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
8 versions withdrawn
withdrawn after publishing
14 years old
79 releases · first in 2012
feat(lerobot): support v2.0/v2.1 dataset layouts by @XuQianJin-Stars in #7381
Full Changelog: v0.7.24...v0.7.25
One column per quarter.
feat: add read_blob function for reading files as raw bytes by @hello-peter-tang in #7318
Full Changelog: v0.7.23...v0.7.24
feat(iceberg): inject DataFile column stats into DataSourceTask for predicate short-circuit by @jiangxt2 in #7301
Full Changelog: v0.7.22...untagged-8f79647338339e50cd69
feat(catalog): support Gravitino Iceberg REST catalogs by @kyo-tom in #7245
Full Changelog: v0.7.21...v0.7.22
fix(ai): keep UDF options out of OpenAI requests by @FANNG1 in #7277
Full Changelog: v0.7.20...v0.7.21
chore(config): deprecate min_cpu_per_task by @XiaoHongbo-Hope in #7125
Full Changelog: v0.7.19...v0.7.20
feat: add mcap pip extra and dependency checks for read_mcap by @everettVT in #7220
Full Changelog: v0.7.18...v0.7.19
feat: Remove dynamodb dependency for concurrent writes in deltalake on s3 @arpatilmh
Full Changelog: v0.7.17...v0.7.18
feat: streamline HDF5 file access @everettVT
daft.datasets.lerobot for working with LeRobot v3 datasets @srilman (#7090)GoosefsConfig to GooseFSConfig @srilman (#7192)Full Changelog: v0.7.16...v0.7.17
feat(droid): Add daft.datasets.droid @srilman
daft.datasets.droid @srilman (#7089)file_exists expression @srilman (#7140)DataFrame.to_torch_dataloader @srilman (#6997)👋 New Contributors
Full Changelog: v0.7.15...v0.7.16
fix(integration): ray data deprecated api fix @kyuds
Self import on Python 3.11+ @everettVT (#6971)Full Changelog: v0.7.14...v0.7.15
feat(flotilla): hint users to switch to flight\_shuffle on large shuffles @colin-ho
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.13...v0.7.14
feat: add forward ASOF joins @euanlimzx
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.12...v0.7.13
feat(iceberg): honor table-level write.target-file-size-bytes property @YuangGao
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.11...v0.7.12
feat: Arrow PyCapsule Interface @aaron-ang
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.10...v0.7.11
fix(docs): replace deprecated .struct.get() with .get() expression in examples @everettVT
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.9...v0.7.10
feat: Add support for writing Extension and Duration types to Parquet @srilman
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.8...v0.7.9
chore!: Remove unused max_task_backlog parameter @srilman
max_task_backlog parameter @srilman (#6591)max_task_backlog parameter @srilman (#6591)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.7...v0.7.8
feat(subscriber): add Event enum and on\_event dispatch for subscriber @cckellogg
decode(..., "utf-8") as a cast @srilman (#6537)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.6...v0.7.7
chore: deprecate all extra lance functions in favor of new daft-lance @universalmind303
read_text @plotor (#6354)select @caican00 (#6067)json_target_filesize execution config @plotor (#6382)pre_shuffle_merge configurable @plotor (#6356)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.5...v0.7.6
perf!: lazy-load lance to speed up import daft @desmondcheongzx
import daft @desmondcheongzx (#6328)read_text API to support reading text files @plotor (#6111)DataType.infer_from_type @srilman (#6304)max_concurrency control coroutine concurrency for async UDFs @colin-ho (#6302)from_glob_path @plotor (#5897)import daft @desmondcheongzx (#6328)write_json related test cases for Ray Runner @plotor (#6387)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.4...v0.7.5
refactor(arrow2): misc deprecation warnings @universalmind303
.as_T cast methods @aaron-ang (#6100)flight_shuffle_dirs arg and change default @srilman (#6266).explode() @singularityDLW (#6047)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.3...v0.7.4
feat(observability): Support exporting Flotilla metrics @srilman
OTEL_* configuration envs @srilman (#6148)agg_concat @aaron-ang (#6099)list_contains expression @aaron-ang (#6095)is_in to accept sets, tuples, and other iterables @desmondcheongzx (#6115)OffsetBufferBuilder @colin-ho (#6057)from_vec @universalmind303 (#6172)stream::iter instead of channel in flotilla source nodes @colin-ho (#6043)ci/ folder @srilman (#6154)make clean to skip cleaning the python virtual environment @plotor (#6103)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.2...v0.7.3
refactor(arrow2): add more deprecation markers @universalmind303
index_col option in explode @aaron-ang (#5842)mypy and ruff in pre-commit @aaron-ang (#5836)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.1...v0.7.2
feat: Support pattern filtering for SHOW TABLES @aaron-ang
SHOW TABLES @aaron-ang (#5423)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.7.0...v0.7.1
fix: patch CVE-2025-66478 update next dependencies to 16.0.7 @everettVT
.collect preview @colin-ho (#5632)explain will panic when ScanTask is empty @plotor (#5582)daft-functions-tokenize @universalmind303 (#5797)to_arrow and as_arrow functions @universalmind303 (#5796)daft_arrow::bitmap::Bitmaps to daft_arrow::buffer::NullBuffer @srilman (#5750)daft-arrow middleman crate for Rust & Arrow usage @srilman (#5730)RuntimeStatsManager on query end @colin-ho (#5791).collect when printing empty dataframes @colin-ho (#5616)derive(Debug) @universalmind303 (#5622)<details> <summary>4 changes</summary>
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.14...v0.7.0
feat: embed text metrics @colin-ho
show issue @caican00 (#5595)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.13...v0.6.14
refactor!: Remove support for creating File objects from bytes @universalmind303
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.12...v0.6.13
feat(flotilla): Add Query ID to OTEL Metrics @srilman
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.11...v0.6.12
feat: PostgresCatalog and PostgresTable followups @desmondcheongzx
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.10...v0.6.11
feat: add --addr flag to daft-dashboard cli @VOID001
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.9...v0.6.10
feat: Allow images in prompt @colin-ho
actor_udf_ready_timeout via Env @plotor (#5426)use_process @colin-ho (#5457)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.7...v0.6.8
feat!: Catch transient errors on turbopuffer writes @desmondcheongzx
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.6...v0.6.7
docs!: update docstrings for various functions @universalmind303
@daft.func.batch @kevinzwang (#5362)from_glob_path @colin-ho (#5235)list_sum type inference @colin-ho (#5366)provision.py for iceberg tests @colin-ho (#5352)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.5...v0.6.6
refactor!: make daft.File immutable @universalmind303
use_process flag for @daft.func(...) @universalmind303 (#5323)df.__repr_html__ @colin-ho (#5312)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.4...v0.6.5
feat!: unify Python -> Daft type conversions @kevinzwang
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.3...v0.6.4
feat: allow PythonArray to be serialized @kevinzwang
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.2...v0.6.3
chore: remove expr.str.regexp\_split since we will immediately deprecate it @kevinzwang
on_error="null" @colin-ho (#5231)reset_runner option @srilman (#5184).str.split into .str.split and .str.regexp_split @srilman (#5211)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.1...v0.6.2
feat: expose image attribute as expression @Jay-ju
.list.append Expression @srilman (#5159)count_rows on fragment to reduce lance scans with limit pushdowns only @colin-ho (#5120)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.6.0...v0.6.1
SQLCatalog was deprecated in v0.5 and is now removed, in favor of the bindings kwargs.
v0.6.0 marks the official release of our new ray-based distributed engine, Flotilla! If you are already using the ray runner, you do not need to change anything. Setting the DAFT_RUNNER=ray environment variable, or within your python program via daft.context.set_runner_ray(), will use Flotilla by default.
All operations except cross join, sort merge join, and pivot are currently supported. We will be working on adding support for them soon! If you need to use the legacy ray runner, please set daft.set_execution_config(use_legacy_ray_runner=True)
SQLCatalog was deprecated in v0.5 and is now removed, in favor of the bindings kwargs.
Before:
catalog = SQLCatalog({"test_data": df})
result = daft.sql("SELECT * FROM test_data", catalog=catalog)
After:
bindings = {"test_data": df}
result = daft.sql("SELECT * FROM test_data", **bindings)
unit-tests required check @colin-ho (#5119)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.22...v0.5.23
chore: Remove deprecated APIs for 0.6 @colin-ho
df.limit link in quickstart.md @rockokw (#5013)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.21...v0.5.22
feat: Propagate morsel size top-down in swordfish @colin-ho
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.20...v0.5.21
feat!: RowWiseUdf.eval for eager evaluation @kevinzwang
daft.File datatype @universalmind303 (#4959)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.19...v0.5.20
We have a pretty crazy release this time around. Some especially notable features include:
We have a pretty crazy release this time around. Some especially notable features include:
.into_batches DataFrame API, the modern alternative to .into_partitions.offset / OFFSET operator across the engine. Thanks @plotor for the great work!size_bytes @srilman (#4954)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.18...v0.5.19
feat: adds column set visitor and use in pushdowns @rchowell
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.17...v0.5.18
docs: add examples to docs @ccmao1130
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.16...v0.5.17
feat: Interactive jupyter display @colin-ho
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.15...v0.5.16
feat: add openai provider in llm\_generate function @huleilei
shuffle_aggregation_default_partitions in flotilla aggregate @colin-ho (#4869)get_or_infer_runner_type to support getting runner type from context @plotor (#4810)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.14...v0.5.15
feat: Include UDF Names in Progress Bar @srilman
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.13...v0.5.14
feat: Support multiple namespaces in the turbopuffer writer @desmondcheongzx
File writer must be created before bytes_written can be called bug in native parquet writer @colin-ho (#4817)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.12...v0.5.13
feat: struct Expression.unnest() @kevinzwang
daft.context and daft.io @srilman (#4805)make test @plotor (#4801)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.11...v0.5.12
fix: Clarify json.query deprecation @colin-ho
/ for objectstorage instead of os.path.join when reading deltalake @universalmind303 (#4785)json.query deprecation @colin-ho (#4774)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.10...v0.5.11
feat(flotilla): Sort \& Top-N @srilman
cosine_distance @colin-ho (#4753)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.9...v0.5.10
feat(flotilla): GroupBy-style Ops @srilman
HttpSubscriber on plan complete event @joyceerhl (#4736)DAFT_FLOTILLA env var should check for false conditions now @colin-ho (#4738)build-whl make command for building wheel package @plotor (#4689)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.8...v0.5.9
feat: move lakehouse source to io directory @Jay-ju
Limit operator type from i64 to u64 @plotor (#4637)min_cpu_per_task when using daft.context.set_execution_config @xloya (#4668)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.7...v0.5.8
This release makes our new distributed execution engine, nicknamed Flotilla, the default. Try it out!
This release makes our new distributed execution engine, nicknamed Flotilla, the default. Try it out!
testing section to contributing guide @colin-ho (#4604)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.6...v0.5.7
feat: support daft schema to arrow schema with metadata @Jay-ju
get_or_create_runner deadlock @colin-ho (#4561)to_arrow for struct / fixed size lists @colin-ho (#4560)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.5...v0.5.6
chore!: upgrade AWS sdk and remove vendored OpenSSL @kevinzwang
.start accept Arc<Self> to simplify cloning @colin-ho (#4543)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.4...v0.5.5
feat(flotilla): Use max sources config to determine files per partition @colin-ho
f"" string style string concatenation @Farzan-Hashmi (#4500)Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.3...v0.5.4
feat: url download for unity catalog volumes @kevinzwang
Full Changelog: https://github.com/Eventual-Inc/Daft/compare/v0.5.2...v0.5.3
Your coding agent can read these notes before it upgrades. Set up the MCP server →