qsv
has several features:
mimalloc
(default) - use the mimalloc allocator (see Memory Allocator for more info).jemallocator
- use the jemalloc allocator (see Memory Allocator for more info).apply
- enableapply
command. This swiss-army knife of CSV transformations is very powerful, but it has a lot of dependencies that increases both compile time and binary size.fetch
- enables thefetch
&fetchpost
commands.foreach
- enableforeach
command.geocode
- enablegeocode
command.lens
- enablelens
command.luau
- enableluau
command. Embeds a Luau interpreter into qsv. Luau has type-checking, sandboxing, additional language operators, increased performance & other improvements over Lua. Luau is the DSL of qsv - as its statically linked, has a MUCH smaller footprint (in both file size and memory without having to deal with Python's infamous Global Interpreter Lock) & is faster (in both startup & execution time) than Python.polars
- enables all Polars-powered commands (currently,joinp
andsqlp
. Also enables polars mode incount
). Note that Polars is a very powerful library, but it has a lot of dependencies that drastically increases both compile time and binary size.prompt
- enableprompt
command.python
- enablepy
command. Note that qsv will look for the shared library for the Python version (Python 3.7 & above supported) it was compiled against & will abort on startup if the library is not found, even if you're NOT using thepy
command. Check Python section for more info. Though Luau is the preferred DSL for qsv for all the reasons stated above, Python is still the lingua franca of data wrangling.to
- enables theto
command.self_update
- enable self-update engine, checking GitHub for the latest release. Note that if you manually built qsv,self-update
will only alert you about new releases (it checks GitHub for the latest release 10% of the time upon startup unless theQSV_NO_UPDATE
environment variable is set). It will NOT offer the choice to update itself to the prebuilt binaries published on GitHub.
You need not worry that your manually built qsv will be overwritten by a self-update.
To check if your qsv build will have the option to self-update, runqsv --version
. If you seeself_update
in the enabled features, and QSV_KIND isprebuilt*
at the end, then you have the option to self-update.ui
- enables commands that require linking UI libraries -clipboard
,lens
andprompt
. Disable this feature if you're building for a headless environment. Note thatqsvdp
andqsvlite
does not enable theui
feature by default.
-
feature_capable
- enable to buildqsv
binary variant which is feature-capable. (mutually exclusive withlite
anddatapusher_plus
)all_features
- shortcut to buildqsv
binary variant with all features enabled (apply,fetch,foreach,geocode,luau,polars,python,to,self_update,ui).
-
lite
- enable to buildqsvlite
binary variant with all features disabled. (mutually exclusive withfeature_capable
anddatapusher_plus
) -
datapusher_plus
- enable to buildqsvdp
binary variant - the DataPusher+ optimized qsv binary. (mutually exclusive withfeature_capable
andlite
) -
nightly
- enable to turn on nightly/unstable features in thecrc32fast
,hashbrown
,polars
,pyo3
&rand
crates when building with Rust nightly/unstable. -
distrib_features
- enable to buildqsv
binary variant with all features enabled exceptself_update
. This should make it easier for distro packagers to buildqsv
with all features enabled exceptself_update
as qsv removes and adds features over time.
ℹ️ NOTE:
qsvlite
, as the name implies, always has non-default features disabled.qsv
can be built with any combination of the above features using the cargo--features
&--no-default-features
flags. The prebuiltqsv
binaries has all applicable features valid for the target platform.