Vol. 01 · No. 1 · Beta Edition
Release notes

Oreumics changelog.

Every user-visible change, newest first. Want a heads-up email when a new release ships? Subscribe to release notes.

Coming soon

AI Agent — approve & run

Planned

Next release

The Copilot plans a multi-node pipeline; you approve once and it runs and verifies each step on the canvas — with Undo and Stop always available.

Reproducibility receipts

Planned

Next release

Export a provenance receipt (RO-Crate) for every run — which nodes, parameters, versions and inputs produced each figure. Connecting Claude Desktop or Codex over MCP already ships (v0.23–v0.25); your data stays on your machine.

Plain-language figure edits

Planned

Next release

Edit any plot by describing the change; every edit is saved back to the node so the figure stays reproducible.

Directional, not commitments. Dates may shift as we learn from beta users.

Releases
36v0.29.0September 30, 2026
BreakingFix
  • Results change in this release. After last week’s bulk, ATAC and methylation audit we checked the single-cell RNA-seq nodes the same way, against Scanpy and the field’s best-practice guides. The standard path — QC through clustering and marker genes — already matched Scanpy exactly. Nine defects sat one step off that path and finished green. If any item below applies to your work, re-run it; opening a saved .bioflow file restores cached results without re-running, so it cannot warn you on its own.
  • Sub-clustering was returning the parent’s results. After Subset Data, re-running PCA, Neighbors, Clustering and UMAP silently reused the parent dataset’s values, so a subset kept the parent’s cluster labels and embedding instead of being re-analysed (on a PBMC test set: 2 inherited clusters where a fresh analysis finds 10). Nodes now recompute whenever their input data differs. Any earlier sub-clustering should be re-run.
  • After Harmony batch correction, Neighbors and t-SNE now use the corrected embedding by default. Previously the default was uncorrected PCA, so the graph, clusters and UMAP ignored the correction unless you changed the setting. The new Auto choice picks Harmony when it is present; a workflow saved with Standard (PCA) keeps it and now shows a warning, and choosing an embedding that does not exist is an error instead of a silent fallback.
  • Louvain clustering now applies its resolution and random seed. Without the optional louvain package the node had been running a variant that ignored both, so changing the resolution barely changed the result and the same seed gave different clusters. Louvain labels will differ from earlier runs; Leiden, the default, was not affected.
  • Top DEG Gene List applies the significance filters it offers (adjusted p-value, log2 fold change) — they were being ignored, so lists could include non-significant genes. Single-cell pathway enrichment now tests against the genes that were actually measured instead of the whole Enrichr library, which changes p-values and terms, as the bulk analysis did last release.
  • Several inputs that used to finish green now stop and explain: QC or doublet detection on data that is already normalized (QC uses a counts layer when one exists), a second log transform, normalizing log data, and a Scrublet run that cannot choose a threshold — which used to report zero doublets. Data whose .raw holds raw counts no longer makes marker-gene fold changes meaningless.
  • QC: the haemoglobin percentage now counts haemoglobin genes only (it also counted HBP1, HBS1L and HBEGF), and Auto-fill no longer switches on a 0% haemoglobin filter that removed about one cell in ten. A mitochondrial prefix that matches no genes — mouse data is mt-, not MT- — now shows a warning. The Methods paragraph describes the filters and parameters that actually ran.
  • We then audited the remaining single-cell nodes the same way — trajectory and RNA velocity against scVelo, CellRank against CellRank 2, spatial against Squidpy, annotation and cell–cell communication against CellTypist, LIANA and CellPhoneDB. The core calculations matched; twenty defects around them finished green with wrong values. The items below are result changes.
  • CellRank with CytoTRACE reported differentiation backwards. Without velocity moments it scored raw counts or scaled values instead of log-normalized expression, so on a pancreas development set the CytoTRACE pseudotime ran against the known stages (Spearman −0.83; +0.65 now, matching the CellRank 2 recipe) and a progenitor population was called terminal. The shipped CytoTRACE templates should be re-run. CellRank summaries, reports and the AI assistant also always showed zero terminal states because CellRank 2 renamed the key; they now report the real ones. Lineage drivers and CellRank plots reuse the terminal states Cell Fate chose instead of re-fitting and renaming them, and drivers use all log-normalized genes by default. The three CellRank templates now ask for four macrostates grouped by Leiden cluster, so fate probabilities no longer collapse to a single lineage.
  • RNA velocity: an input that was already log-transformed was logged a second time, and the velocity graph used an approximation by default that reversed the arrow of about one cell in five on a hippocampus test set. The graph is now exact by default (the scVelo default), which changes arrows and terminal states. Diffusion pseudotime without a chosen root now starts from the first informative diffusion component instead of an uninformative one and says so, and after Subset Data it is recomputed instead of reusing the parent’s root and diffusion map.
  • LIANA, the spatial ligand–receptor test and spatial bivariate scoring now score log-normalized expression. LIANA used scaled values by default (39 pairs with every magnitude rank missing on a PBMC test, 248 now), and the spatial methods used .raw even when it held counts. Label transfer (Cell Mapper) works on scaled data instead of producing missing values, and refuses independently computed PCA spaces, which cannot be compared. CellTypist confidence is now the probability of the label shown, and a model that shares too few genes with your data — wrong species, or Ensembl IDs — is an error instead of a confident wrong answer.
  • Inputs that used to finish green now stop and explain: spatial coordinates whose cell IDs match none of your cells (they were attached in row order and reported as a 100% match), a density QC that would remove every cell (Visium coordinates are pixels, not micrometres), deconvolution of log-transformed data, a PAGA or diffusion-pseudotime group column that does not exist, a Cell Fate cluster column that does not exist, and CellPhoneDB basic mode, which returned zero interactions.
  • Spatial statistics: Spatial Autocorrelation could report zero spatially variable genes on a whole Visium section, because the multiple-testing correction turned every value missing when a single tested gene was constant; it now reports them (about 2,800 on the test section). Permutation p-values are used when you ask for permutations, only positive autocorrelation counts as spatially variable (the opposite tail is reported separately), neighbourhood enrichment and ligand-receptor results are corrected for multiple testing, and Ripley no longer thins every group to 50 points, which had biased the G and F functions. Spatial Neighbors now picks the spot grid automatically for Visium, and BANKSY normalizes raw counts by library size first, as the reference implementation does. Spatial counts and p-values from earlier runs will differ.
  • RNA velocity builds its own neighbour graph the scVelo way instead of reusing the one from the clustering chain, which had reversed several percent of arrows; it warns when connected after Scale, which removes genes velocity needs. Draw Graph and UMAP now actually start from the PAGA layout when asked (the Draw Graph default), PAGA with RNA velocity works, and Auto Annotation recomputes marker genes instead of sending the model markers from a different clustering after Subset. The CellPhoneDB p-value cutoff now changes the results and plots, Annotation Concordance compares only label columns, and the CellRank templates are wired so they run on files that do not already contain UMAP and clusters.
  • The desktop app moves from Electron 28 to Electron 44, bringing two years of Chromium security fixes. Along with it: the app window and the sign-in window can no longer be navigated to other sites or local files, saved credentials are filled in only on the Oreumics sign-in page, sign-in tokens are stored encrypted, pages other than the app cannot request camera or microphone access, and the diagnostic log no longer records the connection key used by AI assistants. Dragging a file onto a path field still fills in the full path.
35v0.28.0September 24, 2026
BreakingFix
  • Results change in this release. We audited the bulk RNA-seq, ATAC-seq and DNA methylation nodes against the standard pipelines for each field and found 21 defects that every automated check had been passing as green — the checks confirm that a node finishes, not that its numbers mean what its label says. If you have results from these three analyses, please read the items below and re-run what applies. Opening a saved .bioflow file restores cached results without re-running, so it cannot warn you on its own.
  • ATAC-seq clustering was not using LSI. The Neighbors node offered no way to select the LSI embedding, so hand-built and wizard ATAC workflows fell through to the default and ran PCA on raw peak counts. LSI is now selected automatically when it is present and is offered in the Neighbors and Harmony settings. Any earlier ATAC clustering, UMAP or downstream result should be re-run.
  • ATAC QC was discarding good cells with a mis-named metric. The value labelled FRiP was the fraction of peaks detected, not the fraction of reads in peaks, and the default threshold was failing cells on it: 53% of the cells in a standard 10x PBMC dataset were dropped. It is now named Detected-peak fraction, and a true FRiP is computed only when a genome-wide fragment count exists (Cell Ranger singlecell.csv, or the fragments loader). Measured pass rate on that dataset went from 46.9% to 86.2%.
  • Differential accessibility now uses a Wilcoxon test on normalized counts with a standard pseudocount, replacing a t-test on raw counts that produced extreme fold changes. The previous behaviour is still available as the Welch option. Fragment loading now counts one per fragment, the field convention; the old read-summing behaviour is the Reads option. The two shipped ATAC templates kept only 500 peaks before LSI — now 50,000.
  • Bulk RNA-seq: Variance Stabilizing Transformation without a condition column was silently producing log-CPM and reporting success, so anyone who asked for VST that way received something else under that name. It now computes a real blind VST, and fails visibly instead of substituting. Fold-change shrinkage (apeGLM) is applied by default, as the documentation always claimed; unshrunken values remain available. Volcano plots read adjusted p-values on the axis, the colours and the cutoff line — these three used to disagree — and heatmaps are row-scaled.
  • Bulk differential expression accepts covariates, so batch, donor and paired designs are finally expressible. A condition column containing an underscore no longer crashes the analysis. Over-representation analysis uses the genes actually tested as its background instead of the whole genome, and inherits your fold-change threshold. Kallisto and Salmon output can be loaded as a folder and summarized to genes, which previously could not reach differential expression at all.
  • DNA methylation: the beta-matrix loader filled missing probes with 0.0, which reads as fully unmethylated. Call rate was therefore always 100%, the call-rate filter did nothing, and differential results carried an artificial bias toward hypomethylation. Missing values are now preserved. If you loaded a vendor beta matrix containing missing values, re-run that analysis.
  • Methylation differential analysis accepts covariates and paired designs, and its moderated test now estimates the prior from your data instead of using a fixed value. Cross-reactive probe removal was switched on by default against an empty built-in list, so it reported filtering while removing nothing — it is now off by default and honest about what it has. Detection p-value, Zhou mask and non-CpG probe filters are available. Regions carry combined p-values with multiple-testing correction, and gene-set enrichment uses the missMethyl probe-count correction.
  • Several nodes that used to finish green now stop and say why: motif enrichment without a genome FASTA, MACS3 on Windows builds where it is not shipped, DESeq2 normalization without pydeseq2, a comparison with more than two groups and none selected, and a beta-value distribution plot drawn on M-values.
  • Fixes the app logo and top-bar mark, which have not loaded in any installed build since v0.25.0.
34v0.27.0September 20, 2026
FeatureFixUX
  • Reports are now project documents. Projects → Analysis report… opens an editor tab that captures completed analyses, execution receipts and your figures without calling any model or needing an API key; you pick sections, Methods and figures, add notes, and save HTML (or PDF in the app). Drafts are stored with the project, marked out of date when the analysis changes rather than silently rewritten, and an external AI assistant connected over MCP can draft the interpretation from the captured evidence. In-app AI interpretation is optional and states its key requirement up front.
  • Project autosave. Projects → Autosave re-saves the open project every 1–30 minutes while you work, through the same path as the Save button. It never creates a project on its own, waits while an analysis is running, and switches itself off after three failed attempts so it cannot fill the log with the same error.
  • Canvas keyboard shortcuts were audited end to end. Ctrl+C / Ctrl+X / Ctrl+V copy, cut and paste selected nodes with their connections (pastes cascade instead of stacking), Delete removes the selection in one step and Ctrl+Z restores the last delete, Esc clears the selection, Ctrl+S saves, Ctrl+Enter runs the workflow, Ctrl+W closes the active tab after confirming — it used to quit the whole app — and ? lists every shortcut. Keys pressed inside a text field or dialog no longer act on the canvas, and nothing is deleted or pasted while a run is in progress.
  • Visualization workspaces no longer change your figure just by being opened. Three seeded settings did: Show Frame/Show Spines removed the frame from Spatial, Trajectory and CellRank plots, a legend font size of 10 enlarged legends the node draws smaller (Spatial Plot, PCA), and Show Spines restored spines that Pathway, CellPhoneDB and bulk plots hide on purpose. Show Frame is now the master switch with Show Spines as its sub-option, so neither is dead on its own, and Show Spines no longer draws a box around a dot plot’s size legend.
  • Marker Plot: Standard Scale now defaults to var — each gene scaled 0–1 across groups, the usual dot plot convention. This applies to heatmap, matrixplot and stacked violin as well; set it back to none for raw values. Genes to show is hidden while the genes come from a manual list, where it never had an effect.
  • Both visualization editors share the same common settings. Eleven controls the embedding editor lacked (value-label size, colorbar title, tick counts, scientific notation, spine and tick width, tick direction, panel gaps and labels) are now there; downloading after switching SVG to PDF saves a PDF instead of the stale SVG; the first vector download no longer fails on large results; out-of-range numbers are refused instead of silently clamped; numeric observation columns get a continuous colour bar rather than a categorical legend.
  • Workspace files (.bioflow): importing a project no longer stores every checkpoint twice; a truncated archive is refused at import instead of failing later; a file made by a newer version is refused with a clear message; non-Latin project names keep their name on export; Export Workspace is available whenever any tab has work; missing figure assets and out-of-date nodes in background tabs are reported by name; the session-conflict dialog no longer quits the app while an export is still writing.
  • Run selected feeds every input of a multi-input node (a three-input Merge Data failed with “at least 2 datasets required”); a plot run together with its parent is no longer marked stale immediately; opening the Properties panel no longer rewrote a saved Subset Data / Define Groups condition; node cards report what the node actually produced instead of “Found markers” or “undefined rows”.
33v0.26.0September 14, 2026
FeatureFixUX
  • Figure Canvas is a complete editing and publication workflow: snapshots captured from any plot go into a reusable library, mixed objects (figures, text, shapes) can be edited and arranged together, pages have settings, documents are portable inside the project, and export covers PNG, SVG, PDF and TIFF.
  • Inside an open workspace, Delete and Backspace no longer delete the node behind it, and Esc closes the dialog instead of reaching the canvas. Ctrl+C copies selected text in the Properties panel again. The QC Workspace can be opened before the first run (it runs the node once, then opens). Spatial Viewer picks a sensible default colour column instead of the cell id, and a completed polygon is highlighted.
  • The MCP server now identifies itself as oreumics. Entries the app writes for Claude Code and the ChatGPT desktop app (Codex) use the new key and remove the old bioflow entry in the same step, so tools are never listed twice; a plain-language hint routes questions that mention Oreumics or the former name to this server.
  • Node inputs were audited against what the backend executes, workspace state is isolated per tab, and closing with unsaved changes asks first. The sign-in window keeps its own title and icon whatever the website serves.
32v0.25.0September 3, 2026
FeatureFixUX
  • BioFlow Copilot is now Oreumics. Same app, same team, same local-first design — a new name and a new mark. Your projects, saved .bioflow files, sign-in and access tickets carry over unchanged; the installer, window titles and Start-menu entry now say Oreumics. Entries below this one describe the same product under its previous name.
  • Connecting an AI assistant is a guided, in-app dialog instead of a separate window. For Claude Desktop, Save extension file… writes the Oreumics extension where you choose (Downloads by default) and shows where to drop it — the Microsoft Store edition of Claude Desktop does not register the extension file type, so double-clicking it never worked. For the ChatGPT desktop app (Codex) and Claude Code the dialog writes the server entry into their config files for you. The dialog then watches for the first real request and confirms the connection live. ChatGPT on the web and mobile cannot connect: they call out from the cloud and cannot reach an app on your machine.
  • Runs that fit in memory are no longer refused. The admission check was charging every node for every matrix a dataset holds, including layers the node never reads; nodes now pay only for what they touch. The disk cache quota, which could block a live checkpoint and dead-end a run at HVG, is now a cleanup target rather than a hard wall. Datasets stored as dense matrices on disk — the usual cause of “30k cells fail on a 32 GB machine” — are converted to sparse on load, and Normalize and Log1p share buffers instead of copying.
  • Resource Center follow-ups: a node that needs an external database you have not installed now stops with a message naming the resource instead of a lease error; CellPhoneDB databases installed through the Resource Center are recognised by the node; the AI assistant can ask which resources are installed before proposing a plan; Motif Analysis fails loudly when its motif database is missing rather than quietly returning nothing.
  • Copying several selected nodes with Ctrl+C works again — box-selecting could leave a stray text selection that captured the shortcut. Merge Cell Meta’s auto match mode is resolved the same way in the preview and in the run, so a preview that shows 100% no longer ends in a rejected run; changing the file also no longer silently resets your match settings.
  • Spatial viewer: large tables no longer cut off mid-stream with a “Network Error”; polygon selection tools, per-group highlighting, and a zoom that survives re-rendering.
  • Force-directed layouts (Draw Graph) are reproducible — the same seed gives the same picture — and the node reports the layout it actually used: when ForceAtlas2 is unavailable it falls back to Fruchterman–Reingold and says so in the Methods text and the stored key.
  • The Node Library is organised by modality first, and the workflow workspace has fewer moving parts.
31v0.24.0August 16, 2026
FixFeatureUX
  • IMPORTANT — Quality Control’s Max Genes and Max Counts filters were being shown as switched on when they were not. Three parts of the app each kept their own idea of the defaults: the backend never applied those two filters, the QC Workspace showed them ticked, and the node card printed “No filters” while filtering on the backend defaults. Opening the workspace and pressing Apply therefore switched on filters you had not asked for, removing cells. All three now read one shared definition, and the node card lists exactly what will run. If you have a Quality Control node you edited through the workspace, check its filter list before trusting a downstream cell count — opening a saved .bioflow restores cached results and cannot warn you.
  • Node result cards stopped going blank on large datasets. Above roughly 60k cells a result is stored outside the node to keep the project light, and only the generic card knew how to read that form — so QC, and eight other card types, lost their PASS/FAIL verdict, thumbnail and matrix shape all at once, exactly on the datasets where you most want to see them. Every card now reads results the same way.
  • A run is no longer refused for a memory shortfall it does not have. One report was rejected over a 15 MB difference on a 6.6 GB estimate — 0.23% — and the same node completed ten seconds later untouched; a near-miss is now re-measured for up to twelve seconds before the app gives up. When a run genuinely cannot fit, the message now says in plain language what is holding the memory and what to do about it, instead of printing two numbers.
  • Nodes keep the name your workflow gave them. A template that used one visualization node for a volcano plot and another for a QQ plot showed both as the same generic label, because a lookup table was overriding the node’s own name in four separate places. The node’s label now wins.
  • Clustering can use K-Means. Pick method: kmeans and give it an exact number of clusters — useful when you need a fixed k rather than Leiden’s resolution search. It partitions the same PCA / Harmony / scVI embedding, produces labels that behave exactly like Leiden’s everywhere downstream (DEG, palettes, Edit Clusters), and the generated Methods text correctly omits resolution, which K-Means does not use.
  • Two figure fixes: Figure Canvas gained a Transparent switch for exporting a composed figure onto a coloured background (each source plot still needs its own transparent setting), and marker plots gained an opt-in auto figure size — the fixed canvas gave sixty genes the same width as five, squeezing them to unreadable.
30v0.23.0August 15, 2026
FixFeatureBreaking
  • Connecting Claude or Codex to Oreumics is reliable again. An assistant could previously go blind to your canvas: reloading the app made the backend reject every later update, so the assistant kept answering about a workflow that no longer existed and refused new plans as “stale”. Plans that arrived while the app was still starting were dropped without a word, leaving the assistant waiting a full minute for nothing. Both are fixed, and a plan that cannot be delivered now says so instead of reporting success while nothing changed on screen.
  • Reviewing a proposed plan no longer cancels it. Clicking a node to look at it before pressing Apply used to invalidate the plan card, which could then only be dismissed — the very act of reviewing destroyed what you were reviewing. Only real changes to the workflow invalidate a proposal now.
  • An assistant can hand your own filters back without them being rejected. Reading a Subset Data or Define Groups node and re-sending its conditions failed validation even when the filter was perfectly valid, and filtering by gene name or barcode (which deliberately leaves the column empty) was refused outright.
  • The app’s local API is no longer reachable with the key you paste into an AI client. That key now opens only the assistant endpoint; everything else — your data, projects and exports — additionally requires a credential the app generates for itself at every launch and never hands out. A connected assistant also can no longer occupy the channel the app uses to apply changes to your canvas.
  • The bundled Claude Desktop extension is verified before the app offers it, and the build now fails rather than shipping a stale one. Previously a build could quietly package an older copy of the extension than the app it came with.
  • Oreumics now speaks the 2026-07-28 revision of the Model Context Protocol alongside the older ones, so newer AI clients connect without a compatibility shim. Two notes for anyone driving Oreumics over MCP: tool inputs are now strictly checked, so a client that sends an argument Oreumics does not define gets a clear error instead of having it silently ignored; and if you run the backend by hand for development it now needs BIOFLOW_DEV=1, because it refuses to serve without its credentials. Installed apps are unaffected.
29v0.22.1August 12, 2026
Fix
  • The installed app now actually ships the JASPAR motif database it advertises. The Resource Center listed the bundled JASPAR releases but the packaged build carried only the code, not the data, so they showed as permanently missing on every machine. The build now bundles exactly the releases the Resource Center offers — and drops three old ones nothing could select, making the installer about 60 MB smaller.
  • Motif Analysis can now use JASPAR2026, the newest motif release. The default stays JASPAR2022 so existing analyses keep reproducing exactly; pick the release you want from the node’s Motif Database dropdown or the Resource Center.
28v0.22.0August 12, 2026
FeatureNew NodeBreakingFix
  • External reference data now has a home of its own. Databases, priors and models that nodes used to download silently in the middle of a run — the CellPhoneDB database, CellTypist models, OmniPath ligand–receptor tables — are prepared up front in the new Resource Center, pinned by version and checksum, and recorded in each result’s provenance. A computation never reaches the network anymore: if a resource is missing, the node that needs it stops with instructions while the rest of the workflow keeps running.
  • Because of that contract, a shipped template that contains a resource-gated node no longer runs end to end on a machine that has never prepared the resource. The Spatial Comprehensive template, for example, now stops at its ligand–receptor step until the OmniPath license terms are accepted, instead of fetching the data behind your back — the stop is the point, not a defect. Every other node in the template still executes.
  • Three activity-inference nodes: PROGENy pathway activity, MSigDB Hallmark program activity, and CollecTRI transcription-factor activity. They score every sample continuously from curated signed priors, deliberately separate from Pathway Enrichment — enrichment ranks a DEG list against gene sets, activity scores each sample — and reports give them their own section so the two cannot be conflated.
  • External AI agents connected over MCP could get stuck in an unresolvable rejection loop on Quality Control plans: the published schema described the metrics parameter as a comma-separated string while the validators only accepted a list, so no shape the agent tried could satisfy both sides. The list is now the single contract at every layer, an invalid plan is rejected before an Apply card ever appears, and a fully-rejected plan is reported as rejected instead of as warnings. Seven adjacent holes found while auditing the fix are closed too — including agent runs certifying steps of a plan that was never applied, and Quality Control nodes restored from older projects being impossible to update.
  • Highly Variable Genes execution is hardened with a lower-memory path and clearer diagnostics when it fails.
27v0.21.1August 7, 2026
Fix
  • AI Chat and report generation can now actually select the models the previous release introduced. The backend had moved to the current OpenAI and Anthropic models, but AI Chat and the report picker each carried their own separate list and still defaulted to the previous generation — so the headline change of v0.21.0 was real in the engine and absent from the app. Both defaults are now derived from the model list itself instead of being written out a second time, so they cannot drift apart again.
  • Fixes Auto Annotation running an older model than the one its own dropdown displayed. The node showed the current model as its first option while the value actually sent to the backend was still the previous generation.
26v0.21.0August 7, 2026
FeatureFix
  • Oreumics now uses the current generation of OpenAI and Anthropic models — gpt-5.6-terra and claude-opus-5 — as the defaults everywhere an LLM is used, including the analysis nodes that call one. Both provider lists remain user-selectable. Google Gemini is deliberately unchanged: no Google key is configured here, and publishing model identifiers we have not run would only fail at runtime.
  • OpenAI requests now go through the Responses API so the model keeps reasoning while it uses tools. On the previous endpoint reasoning and function tools could not be combined at all, and because nearly every Oreumics turn carries tools, that would have meant the reasoning model almost never reasoned. Token-by-token streaming is unchanged, and saved chat sessions remain readable.
  • Fixes three failures that only appeared once the new models were actually run: Anthropic replies are now read by block type rather than by position (Opus 5 reasons by default, so the first block is routinely a thinking block), a declined request is surfaced as a readable message instead of failing on an empty response, and the tool loop preserves the model’s reasoning between turns so follow-up requests are not rejected.
25v0.20.0August 6, 2026
UXFeatureFix
  • Every plot editor now uses the same five sections — Plot, Titles & Labels, Axes, Legend, and Figure & Export — in the same order, and remembers which ones you left open. A node’s own headings become sub-headings inside those sections instead of separate accordions, so the same setting lives in the same place on every figure.
  • Three new controls. Base Font Size scales all text at once and now sits directly above the per-element overrides so the hierarchy is visible; Value Label Font Size sizes the numbers drawn on the plot itself; and Rename Groups renames a group across axis ticks, legend entries and on-plot labels at once, keeping whatever trails the name such as a count or a subtype.
  • Fixes settings that looked live but were not. Base Font Size did nothing at all on five plots (CellPhoneDB, LIANA, CellRank, Gene Trends and the methylation DMR locus plot); typing a Title silently cancelled the Title Font Size you had chosen; and a custom X min / X max could be discarded when tick labels were rebuilt.
  • Opening a visualization workspace no longer changes the figure by itself. Controls hidden for the current plot type were being reset to their displayed default instead of left unset, so every methylation plot except Feature Distribution came back with its x-axis labels tilted 45° purely because the workspace had been opened.
24v0.19.0August 4, 2026
FeatureFixUX
  • Visualization workspaces now show only the controls that affect the selected plot. Switching among Marker, Spatial, ATAC, Bulk, Methylation, CellRank and the other multi-plot nodes removes settings that the active backend branch does not read — including irrelevant colormaps, legends, colour bars, axis ranges and Matplotlib-only options in Plotly mode. Hidden values are reset as well, so a setting from the previous plot cannot keep changing the new one invisibly.
  • Colour control now reaches the categorical and semantic paths that the first group-colour release missed. Spatial Viewer can assign and persist one colour per categorical obs value, Spatial Grouping passes those colours downstream, and fixed plot marks such as PCA variance/loadings, Bulk volcano and MA, methylation beta-type, QQ and Manhattan points, GOmeth terms, DMR highlights and DMP feature-enrichment forests are adjustable. Diagnostic colours whose meaning is part of the assay — PASS/FAIL, methylation Red/Grn channels and RGB co-expression channels — remain fixed.
  • Methylation Feature Distribution now supports readable rotated x-axis labels, the standard seven gene-region groups (TSS200, TSS1500, 5'UTR, 1st Exon, Gene Body, 3'UTR and intergenic), and a standalone “Number of DMPs” figure instead of forcing the other panels alongside it.
  • Fixes “Merge North/South Shore and Shelf” producing no visible difference. The merged and directional views now take distinct paths, unresolved annotations stay unknown instead of being invented as OpenSea or intergenic, and the figure records which annotation source and grouping mode it used.
23v0.18.1August 1, 2026
Fix
  • IMPORTANT — fixes nodes refusing to run on a computer whose drive is moderately full, with "Could not start the killable worker". Oreumics keeps free space in reserve so it can never fill your disk, but it was sizing that reserve from the drive's total capacity rather than from what is actually free: 76.8 GB held back on a 512 GB laptop, 150 GB on a 1 TB one. Below that much free space nothing could be saved at all — not a checkpoint, not even a one-megabyte plot file — and ordinary steps like Log1p failed outright. The reserve now scales with the space you actually have, still refuses to write when the drive is genuinely down to its last few GB, and is unchanged on a drive with room. This has been present in earlier versions too; a development machine with plenty of free space never shows it.
  • Fixes the "basic" option of CellPhoneDB failing immediately. That mode does not compute p-values, but the significance cutoff was being handed to it anyway, so choosing it in the dropdown never worked.
  • Fixes Ripley's "N Neighbors" rejecting its own maximum. The field allowed up to 50 while the analysis requires it to stay below "N Observations", which defaults to 50 — so dragging the slider to the end produced an error. The limit now matches what the analysis accepts, and both fields explain the relationship.
22v0.18.0August 1, 2026
FeatureFix
  • Set your own colour per group. Categorical plots pick their colours automatically, which is fine until you want the same cell type to stay the same colour across every figure in a paper. You can now assign a colour to each group from a swatch, lock the whole palette so it survives re-renders and parameter changes, and reset back to the automatic choice at any point. AI Chat and connected MCP clients can read the current palette and propose changes against it rather than guessing group names. This is the first release of the feature and it does not yet reach every categorical plot — the coverage will widen in following releases.
  • Fixes gene labels on the Highly Variable Genes plot piling up outside the graph. The plot draws two panels, "dispersions (normalized)" and "dispersions (not normalized)", and the code that decided which values a panel was showing matched the word "normalized" in both titles — so the right-hand panel was labelled with normalized numbers plotted against a non-normalized axis, and every name landed far outside the data. Labels are now placed against the finished figure: each one takes the nearest free spot inside the axes, gets a thin leader line when it has to move, and is left out rather than stacked when there is no legible room. "Top Genes to Label" now goes down to 0 to turn labelling off, and the HVG / Non-HVG colours are chosen with a colour picker instead of typed as text.
  • Fixes a figure download losing part of its filename. Node labels often contain a slash — "UMAP / clusters" — and Windows reads that as a folder separator, so the suggested name was cut at the slash. The name is also taken from the figure that is actually on screen now, not from whatever the controls happen to be set to, so it can no longer describe a plot you have not generated yet.
  • Plot legends no longer draw a grey box around themselves by default. The frame is still available as an option.
  • Fixes a plot going permanently blank after pressing Re-generate when the new settings produced the same picture. Most of the style controls change nothing about the pixels, and in that case the image was cleared and never restored.
21v0.17.1July 31, 2026
New NodeFeatureFix
  • IMPORTANT — cell-cell communication via LIANA never actually shipped. The packaging step only WARNS when a Python package is missing, and liana was not on the installed dependency list, so every released build packaged "successfully" without it and Liana Communication / Liana Visualization raised an import error in the installed app while working perfectly in development. Both nodes work in this build, and a missing optional dependency now fails the build loudly instead of shipping a hole.
  • NEW NODES — spatial analysis goes from 104 to 116 nodes. Dedicated loaders for Visium, Visium HD, CosMx and MERSCOPE; Spatial Domains (native BANKSY) segments tissue into regions that are both transcriptionally similar and spatially contiguous; Cellular Neighborhood (Schürch 2020) types microenvironments by what a cell is surrounded by; plus Spatial Graph Stats, Spatial Ligrec Bivariate (spot-level ligand-receptor), Spot Deconvolution, Spatial Image Features and Spatial Hotspot. Spatial Visualization goes from 7 to 13 plot types, including tissue-image overlay, transcript density and the neighbour graph.
  • Fixes projects that could not be opened on a second PC. Windows limits paths to 260 characters unless a registry flag is set, which is off by default; the saved file itself fit comfortably, but the temporary file written just before each atomic save repeated the full 64-character name and went over — regardless of how short your account name is. Import reported an error, while Open was worse: it swallowed the failure and loaded green with no data. Both are fixed, and saving no longer depends on path length at all.
  • Fixes runs refused for "memory admission" on a machine that had room. The free-memory reserve was computed against total RAM and then subtracted from what was already free, so the check got stricter the more programs you had open — one reported run was refused with 10.9 GB free. It is now priced against what is actually free, and the three performance profiles, which were inverted so that "Low" was the most permissive, are consistent again.
  • A legend covering your data can finally be moved off it. matplotlib can only place a legend inside the plot area, so the dropdown offered inside positions only — and on the nodes whose legend was most in the way, picking a position did nothing at all, because a hardcoded anchor kept overriding it. There is now a 5×5 grid covering inside and outside positions, plus Auto / On data / Hide, and the figure grows so nothing is clipped.
  • Fixes a plot disappearing when you re-generate it with changed parameters. Visualization nodes hand their input straight back, so their data id never changes between renders, and the graph bookkeeping read that as a stale result and cleared the figure that had just been drawn.
  • Fixes LIANA result tables coming back completely empty ("No interactions left after the source/target filter"). A change meant for spatial autocorrelation rankings — where an unconverged gene must never be presented as a top hit — was applied to a shared helper, and LIANA rankings legitimately carry unscored rows.
  • Fixes the "Bulk RNA-seq with GSEA" template failing for every user with "Too few genes (1) for ORA". The differential-expression table was written without a usable gene column whenever the gene index carried a name, which the 10x loaders routinely set. Older saved projects still load.
  • Spatial autocorrelation no longer presents unconverged genes as top hits: asking for more genes than were actually scored padded the tail with blanks instead of returning fewer rows. CosMx exports are no longer rejected because of the background row vendors include, and Spot Deconvolution no longer stops on sparse reference atlases.
  • Every "no spatial coordinates" message now names a node that can actually fix it. The old wording suggested Merge Cell Meta, which only writes obs columns and can never create coordinates, so following the advice reproduced the same error with nothing to explain why — and AI Chat had learned the same dead end.
20v0.17.0July 25, 2026
FeatureFix
  • Figure Canvas becomes a real figure editor: annotation layer (arrow, line, rectangle, ellipse, text), per-figure crop, explicit layer ordering, PNG export, multi-selection editing (group, duplicate, nudge, spacing, match size, z-order) and undo/redo. Figure canvases now survive replacing the canvas with a template or closing a workflow, and edits mark the project unsaved.
  • EPIC v2 arrays get their CpG-island panel back. EPIC v2 ships without island annotation, so that panel simply could not be drawn; probe coordinates are now overlapped with the standard island track to recover Island / Shore / Shelf / OpenSea. Checked against EPIC v1's official annotation it agrees 99.69% of the time. Nothing is invented — probes that cannot be resolved stay blank, and if the reference cannot be downloaded the panel is skipped with a note rather than guessed.
  • The direction-split feature distribution now draws the figure that was actually asked for: island context as a 100% stacked Hyper/Hypo composition and gene-feature groups as grouped Hyper vs Hypo counts, in one plot, by default. The overall summary panel is one toggle away instead of always present.
  • Fixes per-category colours and labels leaking between columns in the Embedding Workspace. Changing "Color By" carried the previous column's highlighted clusters onto the new column and greyed out every category; styling now belongs to the column it was made for. Legend visibility and column count are adjustable, and transparent PNG exports no longer paint an opaque white slab behind the legend.
  • Fixes three figure-download problems: SVG and PDF saved as the literal text "[object Object]", downloading a vector left the plot area blank, and a failed PNG save reported nothing at all.
  • Fixes a run being cancelled the instant it started ("Workflow cancelled by user", node stuck idle) when launched right after building or editing the graph.
  • The temporary cache no longer grows for the length of a session. Stale files were only cleared at startup, so a long session could sit on up to 20 GB until the next restart; they are now reclaimed while the app runs.
  • Export CSV no longer defaults to a location the installed app cannot write to, which failed with a permission error instead of asking where to save.
19v0.16.0July 22, 2026
BreakingNew NodeFeatureFix
  • IMPORTANT — methylation probe annotation was rebuilt, and results annotated by an earlier version are no longer accepted. Re-run your workflow from Load IDAT / Load Methyl Beta Matrix to pick up the corrected annotation. Opening a saved .bioflow restores cached results without re-running and will NOT warn you, so this note is the only place the change is announced.
  • Fixes a CpG-island annotation error that made the "feature_distribution" plot misleading. On EPIC v2, probes with no island annotation were being filled in as "OpenSea", which is why that panel could come out 100% OpenSea for both all-probes and significant DMPs — that was invented, not measured, and it is now left blank instead. Separately, the second panel was labelled "UCSC RefGene Group" but was actually derived from distance to the transcription start site; it is now correctly labelled as a TSS-distance proxy with explicit distance bins, so no plot claims an annotation source it never had.
  • NEW NODE — DMP Feature Enrichment. Tests whether your significant DMPs are concentrated in regulatory regions (ENCODE SCREEN cCRE classes, or any BED file you supply) against the probes that were actually tested, and draws the odds ratio with a 95% confidence interval as a forest plot. Hyper and hypo can be tested separately, and when they are, opposite-direction hits are excluded from the background rather than counted as non-significant. The annotation file is always local — nothing is downloaded, and a genome-build mismatch stops the run instead of silently producing invalid overlaps.
  • Manhattan plots can now use real chromosome coordinates. Chromosomes run 1–22, X, Y, MT in the correct order with a tick at the centre of each, so the plot reads like a published Manhattan instead of a probe-index scatter. Probes with no coordinates are excluded and counted rather than dropped quietly.
  • A single extremely strong hit no longer flattens the rest of a volcano, Manhattan, or QQ plot. When a p-value underflows to zero, the point is drawn at a cap and marked with a triangle, and the caption reports how many points were capped and the true maximum. The stored p-values are never modified — this only changes the drawing, and you can switch to the full raw scale or pin your own cap at any time.
  • Methylation heatmaps go up to 10,000 probes and no longer have to be driven by DMP results. You can now pick rows by top DMP, by a reproducible random sample (the seed is recorded, so the same seed gives the same figure), or by the most variable probes — the last two work without running DMP Analysis first, which is what an unsupervised overview heatmap needs. Above a safety limit, probe clustering switches off automatically while sample clustering stays on, and the figure says so.
  • Feature distribution and GOmeth can now be split by direction, so hypermethylated and hypomethylated DMPs are reported separately instead of being pooled. GOmeth keeps its CpG-per-gene bias correction intact when you do this: only the significant CpGs are filtered by direction, while the per-gene totals and the gene universe stay whole.
  • Fixes large methylation projects failing to export and being slow to open. Node results are stored in exactly one place instead of being duplicated across the file, oversized probe-name lists are reduced to a preview while the full index stays in the checkpoint, and failures now name the step that failed instead of reporting a generic error. On a real 1.3 GB project this cut the duplicated metadata from about 109 MB to about 206 KB.
18v0.15.0July 18, 2026
BreakingFixFeature
  • IMPORTANT — Scale now defaults to "Scale HVG Only" on. This is the standard single-cell workflow: Scale keeps only the highly-variable genes in the working matrix (PCA uses only those anyway), and the full gene set is preserved in .raw for DEG and plots, so marker analysis and gene expression plots are unchanged. But the scaled matrix itself is now the HVG subset, so any result that reads the scaled values directly will differ from before. Opening a saved .bioflow restores cached results without re-running and will NOT warn you — re-run Scale to pick up the new behavior, or turn "Scale HVG Only" off to reproduce the old full-gene scaling.
  • Fixes a correctness bug where Scale could corrupt the unscaled copy your DEG analysis reads (adata.raw), which could make marker log-fold-changes come out as NaN or understated. DEG now always ranks the full, unscaled gene set.
  • Large datasets use far less memory. On one internal sparse scRNA fixture, turning "Scale HVG Only" on cut peak RAM for the scale step by roughly 3.9×. Treat that as a single measurement on one dataset, not a supported capacity: how many cells fit on your machine depends on the data — a matrix stored densely, for instance, can use an order of magnitude more memory than a sparse one of the same shape. We do not publish a cell ceiling for a given amount of RAM. The out-of-memory warning was also recalibrated — it no longer raises a false "hundreds of GB" alarm on sparse data that actually runs fine, and it now names the exact settings ("Scale HVG Only" / "Zero Center") that reduce peak memory.
  • Data no longer piles up during a session. Every action that used to leave an analysis result stranded in memory (replacing the canvas with a template, closing a workflow tab, deleting a node or edge, changing a parameter) now frees it — without ever dropping data another tab or an undo step still needs. Saving a .bioflow that is missing some cached data now tells you which nodes need re-running instead of producing a green-but-empty file.
  • Gene expression plots now correctly show genes that live only in .raw (for example after HVG scaling), instead of silently dropping them; the interactive and static versions of an embedding plot now colour by the same values.
  • Includes all methylation data-correctness fixes from v0.14.4 (see below).
17v0.14.4July 17, 2026
BreakingFix
  • IMPORTANT — if you ran Methyl Normalize with method "BMIQ" or "Noob", those results are invalid and must be recomputed. Both options did something other than what their name said, finished without error, and showed a green node. On a real EPIC v2 array, "BMIQ" pulled the median beta from 0.594 down to 0.079 (it forced every Type II probe onto the Type I distribution, which is genuinely hypomethylated because Type I probes concentrate in CpG islands); "Noob" produced a matrix that was 100% NaN and still reported success. The shipped "Methylation (IDAT)" template defaulted to BMIQ, so every DMP / DMR / heatmap / PCA produced by running that template unchanged was computed on corrupted values.
  • Opening a saved .bioflow project will NOT warn you — it restores cached results without re-running, so the old numbers appear exactly as before. You must re-run Methyl Normalize to see the error. BMIQ and Noob have been removed rather than silently remapped to a different algorithm, because handing back different numbers under the same label is the very problem this fixes.
  • Real NOOB and SWAN now live on Load IDAT as the "prep" setting, where the raw Red/Grn signal they require is still available. Use prep="noob" for real out-of-band background correction (deterministic), or prep="swan" for the Type I / II design bias that BMIQ was reaching for (note: SWAN samples probes randomly and is not reproducible run-to-run). Load IDAT's default prep="illumina" reproduces exactly what previous versions did, so beta values from loading alone are unchanged.
  • Methyl Normalize "quantile" is fixed and remains the right choice for between-sample normalization. It previously used a plain mean that created and spread NaN across all samples, and its shared target distribution was biased upward when samples differed in how many probes failed. Results shift slightly if your data contained any missing probes; re-running is recommended.
  • Load Methyl Beta Matrix users cannot use prep — the raw signal is already gone by then — and should use quantile or none.
  • Load IDAT now reads 450K and EPIC v1 arrays again. The underlying library crashed under our pinned pandas version and the failure was silently swallowed, degrading to a fallback loader instead of reporting the problem.
16v0.12.1June 29, 2026
Fix
  • DEG Analysis now returns a clear "≥2 groups required" message instead of crashing when a group has too few cells.
  • Spatial Visualization renders manually-added coordinates directly, so points show even without an accompanying tissue image.
  • Load 10X MTX now reads uncompressed Cell Ranger directories (features.tsv + matrix.mtx, not only .gz).
  • CellPhoneDB returns a clear "no significant interactions" message (HUMAN / HGNC, log-normalised input) instead of a cryptic error.
15v0.12.0June 2026
New NodeFeature
  • Cell type annotation now offers four methods: CellTypist (pretrained per-cell models) and Annotation Concordance (ARI / NMI agreement between methods) join Auto Annotation (LLM) and Cell Mapper (kNN reference transfer).
  • Cell-cell communication adds LIANA consensus ligand-receptor scoring (rank_aggregate over CellPhoneDB, NATMI, Connectome, logFC …) alongside CellPhoneDB.
14v0.10.3May 25, 2026
Fix
  • Fixed .bioflow project import — restored workflows now appear correctly when you Open a project instead of showing an empty canvas.
13v0.10.0May 14, 2026
FeatureUX
  • The "beta" label is dropped — Oreumics moves to a stable v0.10+ line (the website remains a free Beta Edition while paid plans are dormant).
  • Memory Guard: the app predicts RAM use before a run, warns before an over-budget step, and watches memory live — so large datasets fail gracefully instead of crashing.
  • New ObsInspector Workspace — browse and lightly edit obs columns (value counts, categories, distributions) interactively.
  • Hardened AI Chat, safer AnnData export, and a new parameter-coverage validation tier.
12v0.9.0-beta.44April 30, 2026
Fix
  • Fixed Pathway Enrichment, Bulk ORA, and methylGOmeth nodes failing when the Organism field was set to its default "Human" — gseapy/Enrichr only accepted lowercase values, so three pathway templates were broken end-to-end.
  • Pathway nodes now normalise the Organism input automatically; existing workflows resume without needing to re-edit the parameter.
11v0.9.0-beta.43April 30, 2026
FeatureUXFix
  • AI Chat now shows a chip with the active workflow name in its header — useful when juggling multiple workflows in one window.
  • Action Plan: Apply button is guarded against double-clicks during streaming, downstream nodes are properly invalidated when parameters change, and a one-step Undo button rolls back the last apply.
  • Single-node execution progress is smoother — runs no longer stall at 30 % and then jump to 100 %; progress now eases towards 90 % while the node is working.
  • Reports now recognise spatial-only, velocity-only, bulk-only, and methylation-only workflows (eight loader/visualiser nodes were previously missing from section detection).
10v0.9.0-beta.42April 27, 2026
UXFix
  • Methylation loaders (Load IDAT, Load Methyl Beta) are now grouped under Input/Output → Methylation, removing the duplicate listing in the Methylation category.
  • Property and node cards now use modality-aware axis labels: scRNA shows "cells × genes", Methylation shows "samples × CpG probes", Bulk shows "samples × genes", and ATAC shows "cells × peaks".
  • Disk-cache cleanup runs at backend startup, freeing space left behind by previous sessions.
09v0.9.0-beta.41April 25, 2026
FeatureNew NodeUXBreaking
  • Figure Canvas workspace is now the official figure-assembly tool — drag any completed visualisation onto a free-layout canvas, resize, compare, and annotate. The legacy figureComposer node is gone.
  • Spatial overhaul: the new spatialGrouping node lets you lasso/box-select regions on a Plotly WebGL viewer and writes a deterministic obs label that downstream Subset Data can use. spatialDensityQC adds density-based quality control for spatial datasets.
  • Run Abort: workflows can now be cancelled mid-execution with subprocess + OS-level termination, and the Execution Overlay shows a clearer cancel state.
  • Methylation expansion: zhou-lab manifests download lazily on demand, two-stage CpG annotation, plus DMP/DMR/methylation visualisation nodes and methylGOmeth pathway enrichment.
  • Merge Data, Merge Cell Meta, and Subset Data were redesigned with dedicated property panels and a pre-execution preview API so you can see the result before you run.
  • Visualization editor was unified into a single VizEditorModal entry point; cmap/palette colour previews, frameon, and legend_fontsize are now consistent across all viz nodes.
08v0.9.0-beta.40April 22, 2026
Breaking
  • figureComposer node has been removed — the new Figure Canvas workspace replaces it with a free-layout, comparison-friendly UI. Existing workflows that referenced figureComposer should switch to Figure Canvas.
07v0.9.0-beta.39April 20, 2026
New NodeBreaking
  • spatialInteractiveViewer was replaced with the new spatialGrouping node — Plotly WebGL based, with lasso/box selection, polygon geometry storage, and deterministic obs[spatial_group] labelling for downstream Subset Data.
06v0.9.0-beta.38April 18, 2026
Breaking
  • spatialRegionLabel node has been removed — polygon-based region labelling is now part of spatialGrouping.
05v0.9.0-beta.37April 15, 2026
UX
  • QC Workspace Raw Data Mode now tunes live: toggling raw_data_mode, n_mads, and clip_percentile updates plots and recommendations instantly without re-running the backend.
  • A new Raw Mode banner explains the MAD multiplier and clip percentile so first-time users understand the recommendation maths.
04v0.9.0-beta.36April 10, 2026
UXFixFeature
  • Edges in the workflow canvas can now be clicked, highlighted, and deleted — they were previously hard to grab.
  • Multi-selecting nodes shows a visible selected state across all node components.
  • Neighbors node default n_pcs changed from 0 to 15, with automatic clamping when the upstream PCA has fewer components.
  • QC Workspace gained a dedicated Raw Data Mode toggle in the modal header (1–99 percentile clipping for both matplotlib and Plotly previews).
  • Run Abort lets you cancel a running workflow at the next node checkpoint.
03v0.9.0-beta.29Apr 2026
FeatureUXBreaking
  • qcMetrics and qcVisualization were merged into a single qualityControl node with an interactive QC Workspace modal — sliders for MAD-based thresholds, MAD recommendation values, and live plot updates all in one place.
  • Existing workflows that wired the two old QC nodes separately need to be updated to use the unified qualityControl node.
02v0.9.0-beta.25Apr 2026
UXBreaking
  • Find Markers node renamed to DEG Analysis (type key findMarkers preserved). Default n_genes is now None (rank all genes) and pts is True so percent-non-zero values are populated.
  • Extract Gene List renamed to Top DEG Gene List (type key extractGeneList).
  • Export CSV (markers) now uses wide format and exports the full ranking, with pct_nz column names preserved.
01v0.9.0-beta.20Apr 2026
New Node
  • CellPhoneDB integration: two new nodes for ligand–receptor interaction analysis (CellPhoneDB analysis + CellPhoneDB visualisation).
  • Note: requires plotnine/mizani version pins — handled automatically in the bundled installer.

Have feedback on a release?

We read every message — bug reports and feature requests shape the next changelog entry.

Get in touch