Release notes
This is the changelog for the main CLI tool. You can find the changelog for the downstream loader packages here:
Unreleased
- The "Equivalent CLI" string for
cfdna fcoverageno longer contains--normalize-by-length offwhen that argument was not specified. The correct way to avoid--normalize-by-lengthis to just not set it. Theoffoption is the internal name for this.
cfDNAlab 0.9.0
- Adds
--trim-totocfdna fcoveragefor counting a centered span around each fragment's midpoint. Shorter fragments can be left unchanged or extended to the requested span.
cfDNAlab 0.8.0
Main focus: This release handles the issue where running many jobs with cfdna <command> calls in parallel led to significant increased runtime due to shared-filesystem contention. It does so by introducing the --temp-dir argument for specifying a node-local scratch location for temporary files. The main contention issue was identified to be the many reads of the ref-2bit reference sequence file. By copying it into the temporary local scratch directory before processing, the issue was heavily reduced. Thanks to Anders from GenomeDK for spotting this.
- Adds
--temp-dirto commands that create temporary files. This allows temporary copies of the--ref-2bitfile, tile files, and other intermediate files to be placed on node-local scratch when running on HPC clusters. When omitted, temporary files remain under the output directory. cfDNAlab does not select$TMPDIRor another environment variable automatically. - Commands that use
--ref-2bitnow copy the file into a unique temporary directory for each command call. This reduces shared-filesystem contention when many jobs run in parallel. - Separates temporary processing files from temporary final-output files. Both directories remain uniquely named and are cleaned up after successful runs, errors, and Ctrl-C. Final outputs are still written to the requested output directory.
cfDNAlab 0.7.0
BREAKING CHANGES:
cfdna ref-kmersgets the--orientationargument which now defaults toboth, meaning we count a k-mer with 0.5 for each orientation (forward-oriented and reverse complemented). This changes the counts significantly, as the reverse-complemented motifs now have the same count. The motivation for this change is to make the defaultcfdna ref-kmersoutput suitable for reference correction ofcfdna endsmotif counts, where the right-end motifs are reverse-complemented. This solves #10.- Reference correction for end motifs now require
cfdna ref-kmers --orientation both. Files created withcfdnalab 0.6.0will fail to be used.
cfDNAlab 0.6.0
New command:
- Adds
cfdna ref-kmerscommand for counting k-mers in the reference assembly for downstream normalization of k-mer counts.- Adds loaders for
ref-kmersoutput in R, Python and Rust. - Adds reference k-mers correction to
endsoutput loaders.
- Adds loaders for
BREAKING CHANGES:
- Grouped motifs-file outputs now order motif groups alphabetically by group name.
Other changes:
- Speeds up the window overlap detection algorithm used in
lengthsandendswhen the--by-bed/--by-grouped-bedcontain both broad and narrow windows that are nested. - Adds minimal validation of BED files to catch obviously non-BED formats.
- Optimizes reading and parsing of BED-like files for improved runtime and RAM usage.
- Library: The Rust
fcoveragerun result now includes groupedgroup_index.tsvfilepaths inoutput_files()when they are written. - Library: Adds missing blacklist setters on the Rust
LengthsConfigAPI.
cfDNAlab 0.5.0
BREAKING CHANGES:
cfdna fcoverage --normalize-by-lengthis now actually called--normalize-by-lengthinstead of--normalize-by-length-mode, matching the guides and documentation.- The Rust crate feature
cmd_ref_gc_biashas been removed. Enablecmd_gc_bias(on by default) to compile both thegc-biasandref-gc-biascommand APIs.
Other changes:
- Pins the build-time Clang/LLVM conda packages to version 21.x in installation instructions to avoid broken
rust-htslibbindings with libclang version 22. cfdna fragment-count-weightsandcfdna coverage-weightsshows progress bar by default in the internal call tocfdna fcoverage.- CLI runs now log the equivalent full
cfdna <COMMAND> <OPTION>command call for reproducibility and transparency. - The Rust library can render equivalent command calls from exported configs without enabling the
clifeature. This adds theRunOptions.log_equivalent_clifield. - Adds initial output loaders for
lengths,fcoverage,ends, andmidpointsto the Rust library. - General feature gating improvements for an improved library experience.
cfDNAlab 0.4.0
BREAKING CHANGES:
cfdna fcoverage --per-window summary-stats*output TSV columns are renamed and deduplicated.- For
cfdna fcoverage --normalize-by-length, aggregate TSV headers now usefragment_massinstead ofcoveragefor the length-normalized signal columns.
Other changes:
- Allows reading BAM files from URLs via the
curlfeature inrust-htslib. This addsurlas dependency. - Updates
rust-htslibdependency to1.0.0and reduces its feature set for fewer dependencies. - Enables
libdeflate-sysfor faster BAM reading. bam-to-bamandfrag-to-bamwrites.bam.baiindex files alongside the BAM outputs.- Requires
bindgen >=0.69.5, <0.70to remove issue with0.69.4when users don't install with lockfile. - Adds
--lockedto install commands in installation instructions.
cfDNAlab 0.3.0
BREAKING CHANGES:
- Major refactor of the rust library. Makes a clearer boundary of what is public/private. While cfDNAlab is primarily a CLI tool, the library side needed a clean up. This does not affect CLI usage.
Other changes:
- Adds
--motifs-filetocfdna endsfor pre-specifying the motifs to count. This allows counting larger motifs without exploding the memory. - In
cfdna lengths, themax_soft_clipscap is only applied when--clip-mode adjust. - In
cfdna ends, fixes theoretical bug that wrongly filtered fragments when kmer-size was larger than read sequence but reference was used as source.
cfDNAlab 0.2.0
BREAKING CHANGES:
The output formats are changed to simplify downstream work in R and python. While the previous NumPy .npy format was easy to load in python, the user had to infer the column names, etc. We are moving towards more self-contained formats for a better and safer experience.
cfdna lengthsnow outputs a wide-format Zstandard-compressed TSV (.tsv.zst) file with one row per window/group. This is readable bypandasin Python andfread(cmd = "zstd -dc file.tsv.zst")in R.cfdna lengthswrites command settings to<prefix>.length_settings.json.cfdna lengthsadds--decimalsto control written count precision.cfdna midpointsnow outputs profiles as a self-contained Zarr store at<prefix>.midpoint_profiles.zarr.cfdna midpointswrites command settings to<prefix>.midpoint_settings.json.cfdna endsnow outputs dense and sparse motif counts as a self-contained Zarr store at<prefix>.end_motifs.zarr.cfdna endswrites command settings to<prefix>.end_settings.json.cfdna ref-gc-biasnow writes the public reference GC package as<prefix>.ref_gc_package.zarr.cfdna gc-biasnow writes the public sample correction package as<prefix>.gc_bias_correction.zarr.
Any GC-correction packages previously computed are no longer compatible. Please recompute.
Python and R packages for downstream loading:
While the new .zarr format has many benefits, such as being self-contained and working in both R and Python, it's not the easiest to work with in its raw form. We added both an R package and a Python package with friendly loaders and data frame + array getters.
- Adds the Python
cfDNAlabpackage for loading the.zarroutputs of the CLI tool and extracting data frames, meta data, etc. See thecfDNAlab/py-cfdnalab/directory. - Adds the R
cfDNAlabpackage for loading the.zarroutputs of the CLI tool and extracting data frames, meta data, etc. See thecfDNAlab/r-cfdnalab/directory.
Other changes:
- Adds
zarrs=0.23.11dependency. - Adds downstream Zarr compatibility checks for Python and R reader packages.
- We no longer expose the former
gen_cli_docsbinary that is for internal use only.
cfDNAlab 0.1.0
Adds the following public commands:
cfdna fcoveragecfdna lengthscfdna endscfdna midpointscfdna gc-biascfdna coverage-weightscfdna fragment-count-weightscfdna bam-to-bamcfdna bam-to-fragcfdna frag-to-bamcfdna ref-gc-bias
Additional commands are in development and will be added in future releases.