Skip to content

v2026.8.8

Pre-release
Pre-release

Choose a tag to compare

@dhoconno dhoconno released this 23 Aug 01:49

Lungfish 2026.8.8

Channel: Preview

Previous versioned release: v2026.8.7

Stable baseline: v2026.8.7

Dependency set: 2026.2

Preview builds are under rapid iterative development. Features may be incomplete, change quickly, or require additional feedback.

Lungfish 2026.8.8 is a preview focused on three things a large Kraken2 batch
exposed this week: projects that grew by tens of gigabytes, BAM viewports that
hid reads and differences until you zoomed, and a memory blow-up that could
take the whole machine down while an import and a classification ran side by
side. The dependency set is unchanged at 2026.2.

Changes since 2026.8.7

Kraken2 results no longer duplicate your imports

A 55-sample Kraken2 run was copying every input FASTQ into
.lungfish-provenance/intermediates/classification-inputs/ inside the
analysis, adding 18.7 GB of byte-identical files to a project whose imports
already held the same data. The pipeline now references durable inputs in
place and only copies genuinely transient inputs (virtual subset, trim, and
demux bundles materialized into the project's scratch folder). Existing
analyses are left untouched because their recorded replay commands point at
the copies; you can delete those classification-inputs folders by hand once
you are satisfied.

Provenance for classification runs is also correct now:

  • The raw classification.kraken file, which the pipeline compresses and
    deletes, is no longer advertised as a run output. Step history still records
    what each tool actually wrote at the time.
  • Bracken's re-estimated report is written to an explicit path
    (classification.bracken.kreport) and declared; older auto-named
    classification_bracken_species.kreport files are still read.
  • A sample whose Bracken profile degrades because the Kraken report has no
    rows at the requested rank (the normal case for negative controls) is a
    completed run with a warning, not a failure, and a batch with two degraded
    controls and 53 good samples is no longer marked failed in its provenance.

Kraken2 viewport

  • The taxon search field is back. Typing filters the tree to matching taxa
    plus their ancestors and whole clades, composes with the column header
    filters, and dims the sunburst to match.
  • When Bracken ran, a Bracken column shows its re-estimated read counts
    next to the raw Kraken2 counts; it stays hidden for Kraken2-only results.
  • BLAST Verify on a multi-sample batch now verifies reads from the sample
    that owns the selected taxon. Previously it looked in the first selected
    sample and failed with "No sequences provided for BLAST verification".
  • Extract FASTQ writes its bundle to a top-level Extractions/ folder,
    kept apart from Imports/, and FASTA-format extractions produce a bundle the
    sidebar can open. A failed extraction no longer leaves a half-written bundle
    behind, and samples skipped for missing inputs are reported instead of
    silently dropped.

BAM viewers

  • Alignment views (classifier evidence, mapping results, any bundle with
    reads) open showing the whole contig, so reads mapped anywhere on the
    reference are visible before you zoom in.
  • Differences from the reference are drawn at every zoom level that shows
    individual reads, including classifier BAMs loaded without a reference
    sequence; mismatch ticks now come from the aligner's MD tag when no
    reference is available.
  • High-depth samples render smoothly. The read layout is packed once and
    reused while panning, only the rows and reads inside the viewport are drawn,
    and per-read mismatch positions are computed once when reads are loaded.

Stability

  • Importing FASTQ files no longer lets the app's memory grow with the size of
    the file. The gzip line reader and FASTQ record reader were producer tasks
    feeding unbounded buffers, so a fast decompressor and a slower consumer
    (read-length statistics) could buffer the whole decompressed file; both now
    parse on demand.
  • The Java heap for bundled BBTools steps is sized so an import can run next
    to a Kraken2 classification: about a third of physical memory, further
    capped by what is actually free, instead of 60 to 80 percent of RAM.
  • Project folder watching is volume-aware. On exFAT, FAT, and network volumes
    the app subscribes to directory-level file-system events with a longer
    latency, handles events off the main thread, and collapses bursts of
    thousands of changes into one refresh, so a running classification cannot
    make the window unresponsive.
  • The managed micromamba bootstrap never replaces a working installed binary
    with a bundled one that cannot run, compares versions by release rather than
    build suffix, and restores the previous binary if a fresh copy fails. Its
    error messages now state the command, exit status or signal, and a
    code-signature hint instead of "Failed to install package: ".

Release and maintenance

  • Debug test builds (scripts/build-app.sh --debug) re-sign every bundled
    tool after path sanitizing and refuse to finish unless the bundled micromamba
    runs; the shared release skill documents how debug builds are produced and
    that they are never signed, notarized, or uploaded.
  • Source-text test assertions across the app were converted to behavioral
    ViewInspector and AppKit tests, and the attended XCUI diagnostic tier was
    repaired and certified green.

Verification

  • Unit tier gate: PASS at the release commit (541 tests; two load-sensitive
    classes passed via the gate's isolated serial retry).
  • Integration tier gate and dependency sweep tiers 1 through 3: see the
    release report for the PASS lines recorded at the release commit.
  • Focused release tests (CLI version, help text, managed tool lock, release
    build configuration, app version) green.

Dependency versions

The following tables reproduce every current version identity in the bundled
dependency manifest and Package.resolved. Conda identities include their
exact channel, package version, and build string.

Core managed tools

Manifest id Exact package identity
nextflow bioconda::nextflow=26.04.6=h2a3209d_1
snakemake bioconda::snakemake=9.25.2=hdfd78af_0
bbtools bioconda::bbmap=40.02=he046917_0
fastp bioconda::fastp=1.3.6=ha1d0559_0
deacon bioconda::deacon=0.16.0=h314a369_0
samtools bioconda::samtools=1.24=h36b3a25_1
bcftools bioconda::bcftools=1.24=h6bd33b9_2
htslib bioconda::htslib=1.24=hd3c6ec9_0
seqkit bioconda::seqkit=2.13.0=hd5f1084_0
cutadapt bioconda::cutadapt=5.2=py313hf513372_2
trim_galore bioconda::trim-galore=2.3.0=h48b4a6d_0
vsearch bioconda::vsearch=2.31.0=h0448ff9_0
pigz conda-forge::pigz=2.8=hfab5511_2
sra-tools bioconda::sra-tools=3.4.1=h4675bf2_1
ucsc-bedgraphtobigwig bioconda::ucsc-bedgraphtobigwig=482=h1643cc5_0
pysam bioconda::pysam=0.24.0=py310hf7cbfa5_1
openpyxl conda-forge::openpyxl=3.1.5=py312h2a925e6_3

Plugin-pack tools

Pack Manifest id Exact package identity
Read Mapping minimap2 bioconda::minimap2=2.31=h6bd33b9_0
Read Mapping bwa-mem2 bioconda::bwa-mem2=2.3=hda5e58c_0
Read Mapping bowtie2 bioconda::bowtie2=2.5.5=h9e91881_0
Full-Length MHC Genotyping savont bioconda::savont=0.6.3=ha819e4a_0
Full-Length MHC Genotyping blast bioconda::blast=2.16.0=hb260f6e_5
Variant Calling lofreq bioconda::lofreq=2.1.5=py310h9cf5bfa_16
Variant Calling ivar bioconda::ivar=1.4.4=hda5e58c_0
Variant Calling medaka bioconda::medaka=2.2.2=py312h3bb865a_0
Variant Calling clair3 bioconda::clair3=2.0.2=py311h9aa1f4a_0
GATK Core gatk4 bioconda::gatk4=4.6.2.0=py310hdfd78af_1
Phasing whatshap bioconda::whatshap=2.3=py311h1457a19_3
Assembly spades bioconda::spades=4.3.0=hd468e49_1
Assembly megahit bioconda::megahit=1.2.9=h96a01ab_8
Assembly skesa bioconda::skesa=2.5.1=hda5e58c_3
Assembly flye bioconda::flye=2.9.6=py310hba4535a_1
Assembly hifiasm bioconda::hifiasm=0.25.0=h697fd72_0
Multiple Sequence Alignment mafft conda-forge::mafft=7.526=h99b78c6_0
Phylogenetics iqtree bioconda::iqtree=3.1.3=h6cc7423_0
Metagenomics kraken2 bioconda::kraken2=2.17.1=pl5321h158e17b_0
Metagenomics bracken compatibility pin bioconda::bracken=1.0.0=1; fresh installs use source overlay 3.1 with Python 3.11.13, cxx-compiler 1.9.0, and llvm-openmp 21.1.8
Metagenomics esviritu bioconda::esviritu=1.3.3=pyhdfd78af_0
Metagenomics ribodetector bioconda::ribodetector=0.3.3=pyhdfd78af_0
Wastewater Surveillance freyja bioconda::freyja=2.0.3=pyhdfd78af_0

Pipelines

Manifest id Release Immutable revision
taxtriage v3.3.8 e10bfebda32a62711f38a4e23ab03b61725a9675
nf-core-viralrecon 3.0.0 3.0.0

Databases and managed data

Manifest id Current identity
kraken2-standard 20260626
kraken2-standard-8 20260626
kraken2-standard-16 20260626
kraken2-pluspf 20260626
kraken2-pluspf-8 20260626
kraken2-pluspf-16 20260626
kraken2-viral 20260626
kraken2-minus-b 20260626
kraken2-eupathdb46 20230407
esviritu-viral-v3 v3.2.4
ncbi-taxonomy 2025-03
kraken2-special-silva kraken2-special-v1
kraken2-special-greengenes kraken2-special-v1
human-scrubber 20260706v2
deacon-panhuman panhuman-1
deacon-ribokmers bbmap-ribokmers-k31w15

The bootstrap identity is micromamba 2.9.0-0; its Apple Silicon payload is
checksum-verified before use.

SwiftPM resolved packages

Package identity Version Revision
async-http-client 1.36.0 9544287b9416c0bc71e58b9f3aead8dd14b16103
containerization 0.24.5 c3fe889a2f739ee4a9b0faccedd9f36f3862dc29
grpc-swift 1.27.5 6a8927df5a91710b414caba4f8a088dead4633db
sparkle 2.9.6 ac2def288cbff5cfc7df3ffef6abdf45b72bcb0a
swift-algorithms 1.2.1 87e50f483c54e6efd60e885f7f5aa946cee68023
swift-argument-parser 1.8.2 6a52f3251125d74daf04fcbd5e6f08a75d074382
swift-asn1 1.7.1 a9a5efd40eaf558a2bcd48d64b1d1646be686008
swift-async-algorithms 1.1.5 3da39bbc4e687d4192af7c9cf4eab805745a0b9c
swift-atomics 1.3.1 0442cb5a3f98ab802acb777929fdb446bda11a34
swift-certificates 1.19.4 449dbbecd0f31e82b510ada227ca152caa8b5e98
swift-collections 1.6.0 a0cb0954ecb21e4e31b0070e6ed5674e8556685a
swift-configuration 1.2.0 be76c4ad929eb6c4bcaf3351799f2adf9e6848a9
swift-crypto 3.15.1 95ba0316a9b733e92bb6b071255ff46263bbe7dc
swift-distributed-tracing 1.4.1 dc4030184203ffafbb2ec614352487235d747fe0
swift-http-structured-headers 1.7.0 933538faa42c432d385f02e07df0ace7c5ecfc47
swift-http-types 1.6.0 db774a277f60063a32d854f2980299caf06da041
swift-log 1.15.0 3ffafb9722d5d918c614feb496c8789a3b59d222
swift-nio 2.101.3 0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b
swift-nio-extras 1.34.3 88a51340f59cf181ebde888bd1b749296b3ec029
swift-nio-http2 1.45.0 45bdf670248be5f16ec0340e125dca285536f0fb
swift-nio-ssl 2.37.2 d930168b86f46ca51a4bc09c5ca45c1833db8067
swift-nio-transport-services 1.28.0 67787bb645a5e67d2edcdfbe48a216cc549222d5
swift-numerics 1.1.1 0c0290ff6b24942dadb83a929ffaaa1481df04a2
swift-protobuf 1.35.0 9bbb079b69af9d66470ced85461bf13bb40becac
swift-service-context 1.3.0 d0997351b0c7779017f88e7a93bc30a1878d7f29
swift-service-lifecycle 2.12.0 7f9326b0326ff86e3646295ea6e891f68c471c5e
swift-system 1.8.1 869129b7bf4ecc57b97d0193ad29690ca2134750
zstd 1.5.7 f8745da6ff1ad1e7bab384bd1f9d742439278e99
viewinspector 0.10.3 e9a06346499a3a889165647e3f23f8a7b2609a1c

Known issues and compatibility notes

  • Preview and Stable cannot be installed side by side; install the desired
    channel's DMG to switch the one shared application installation.
  • The 20260626 Kraken2 indexes display species-level taxid 3418604 as
    Betacoronavirus pandemicum. Classification identifiers are unchanged, but
    searches or notes relying on the former SARS-CoV-2 display name should be
    checked.
  • The Apple Silicon bioconda Bracken compatibility package has no real driver
    and does not support domain-level profiling through its synthesized
    launcher. Fresh installs receive the managed Bracken 3.1 source build;
    existing working environments are preserved.
  • bioconda::bwa-mem2=2.3=hda5e58c_0 self-reports 2.2.1 because of an upstream
    packaging defect. Lungfish verifies that pin from conda package metadata.