better-duck-core keeps its dependency tree lean by putting almost everything behind a Cargo
feature. This page lists every feature the core crate defines, grouped by purpose, with what each
turns on, which other features it implies, and when you’d reach for it.
Defaults and opting out
The default feature set is["chrono", "decimal"]:
default-features = false:
Date, time & numeric types
These change which Rust type a temporal / numeric column reads as — see Type system.chrono and the native date/time path are mutually exclusive for the read type — only one set
of DuckValue temporal conversions compiles at a time. time is an independent bind/append
path that coexists with either.Bundled DuckDB extensions
These compile the extension straight into the embedded static library — there is no runtimeINSTALL / LOAD. See Extensions for bundled-vs-runtime guidance.
Data interop
Enabling
udf turns the columnar APIs on too — they share the same vector / data-chunk
machinery. Enable columnar explicitly only when you want those APIs without the proc-macro
dependency udf pulls in. See columnar access.Concurrency
See async & pooling.
async + pool together unlock AsyncPool.
Macros: UDFs & derives
Both come frombetter-duck-macros, reached through core — you never depend on the macros crate
directly. See UDFs and data derives.
Advanced
Feature implications at a glance
A few features turn others on automatically. Enabling the left turns on everything to its right:Recommended presets
- Lean embedded
- Analytics / fast reads
- Async service
- UDFs + mapping
chrono/rust_decimal types.Related
Choosing an API
A decision tree for which features and crates fit your task.
Architecture
How features flow down to the vendored DuckDB in
-sys.Type system
How
chrono / decimal / uuid change the read type.Core crate
The APIs these features unlock.