OpenFlo is an open source, Mac-first flow cytometry and single-cell analysis app prototype. The current v0.8.10 release focuses on FlowJo-like plot-window behavior (default gate naming, fixed plot sizing, clearer gate tools, and navigation that remembers your view), on top of consistent overlay/batch gating, FlowJo-accurate overlay plots and axis autoscaling, FlowJo-accurate pseudocolor plot rendering, responsive FlowJo-style plotting/gating, Seqtometry-style single-cell signature scoring, and a standalone preprocessing path for biological single-cell matrices.
- If you are trying to install from the precompiled .dmg - you will need to put the app into your applications folder, and then type: xattr -dr com.apple.quarantine /Applications/OpenFlo.app
- Default gate names follow FlowJo's heuristics from the drawn axes (FSC-A vs SSC-A → "Lymphocytes"; same-detector A/H/W pairs → "Single Cells"; otherwise "{X}, {Y} subset").
- Plots render at a fixed FlowJo-style size by default, with an Auto-size checkbox to fill the window; the gate-tool strip is now a light, high-contrast FlowJo-style toolbar and the navigation arrows are FlowJo green.
- Navigation remembers your view: going up restores the parent plot's mode, and going back into a gate restores the view you last had for it.
- Fixed a workspace layout bug where a group-level gate applied to All Samples stretched to fill the pane.
- Overlays and batch reports now gate every sample the same way: dragging a bare sample onto a gated plot (or batching/iterating across samples) applies the base plot's gating to each sample, so tiles and overlays show the gated population instead of whole-sample data.
- Rebuilt the main window toolbar as a FlowJo-style grouped ribbon with the real app icon, and tightened the Layout Editor to FlowJo proportions.
- Overlay histograms now match FlowJo: multi-population overlays default to Normalized To Mode, use FlowJo's exact cyan/red colors and 40% blended fills (reproduced pixel-for-pixel), and render at higher resolution. Overlay layers can be recolored and removed from the layer controls.
- Axis autoscaling now matches FlowJo: an outlier-robust range keeps far-out debris events (e.g. FSC/SSC junk with extreme negative values) from stretching the axis, and linear scatter channels start at 0.
- Fixed the per-axis channel-name selector so it renders visibly.
- Rewrote the default pseudocolor 2D plot as a per-event, density-colored dot renderer that closely matches FlowJo: FlowJo's exact color ramp, a two-scale local density (coarse for cluster warmth/gradient, single-pixel fine for the grainy blue-in-green / green-in-blue speckle), and a low render resolution that scales into distinct square pixels.
- Polished plot axes (K/M abbreviated tick labels, superscript decade labels, minor ticks, visible channel-name axis selectors) and gate selection handles (clean corner handles instead of one per polygon vertex).
- Denser workspace tree rows with indent guides, a drawn gate glyph, and tabular numerals.
- Added default-on single-cell preprocessing controls to the matrix import dialog: QC, normalization, and imputation now appear above the signature choices.
- Added a standalone Swift preprocessing pipeline inspired by the Seqtometry vignette and MAGIC: mitochondrial/library-size/detected-gene QC, library-size log normalization, and adaptive graph diffusion imputation without requiring R or Python at runtime.
- Improved Matrix Market import for larger single-cell datasets by preserving sparse data during preprocessing and signature scoring when dense materialization would be too large.
- Restored default bundled signatures during matrix import and fixed signature axis controls so signatures can be switched without exposing thousands of raw genes in the selector.
- Cleaned signature axis labels so signatures show the cell/signature name while gene counts open a scrollable gene list; standard flow channels still preserve marker/color labels such as APC.
- Fixed quadrant gates so crosshair quadrants behave as quadrant gates instead of becoming a rectangle from the crosshair to the upper-right corner.
- Added a SeqtometryGUI-inspired Rescore Gate action for gated single-cell populations, recalculating signature scores using only the cells in the selected gate and storing the branch-specific score table on that gate.
- Added a Z/color selector for dot plots and contour plots so a third numeric channel can be overlaid as a continuous color scale, with low-cardinality integer-coded channels rendered categorically.
- Improved responsiveness for contour, density, zebra, and heatmap-statistic plot modes by sampling/caching the rendered data paths.
- Added loading progress text that explains whether OpenFlo is parsing raw counts, running QC, normalizing, imputing, scoring signatures, or keeping raw genes sparse.
- Native macOS SwiftUI app targeting Apple Silicon.
- Pure Swift core with a columnar event table.
- Basic FCS reader for common FCS 2.0/3.x homogeneous numeric files.
- Multi-core 2D density histogram renderer.
- Rectangle, oval, polygon, and quadrant gate evaluation backed by compact bitset masks.
- FlowJo-style workspace workflow with group-applied gates, plot windows, layout reports, table/statistic output, and JSON-backed
.openfloworkspace saves. - Layout Editor reports with draggable graph/text/shape/table items, sample iteration, batch layout generation, PNG export, and HTML image batches.
- Table Editor output for counts, parent/total percentages, median, mean, and geometric mean with optional heat-map formatting and text/CSV/HTML export.
- Single-cell Matrix Market and delimited matrix import with bundled immune signatures, custom signatures, Seqtometry-style scoring, and optional preprocessing.
- Gated single-cell rescoring and continuous/categorical third-variable coloring for dot and contour plots.
- DMG packaging script using SwiftPM and
hdiutil.
swift build -c releaseswift run OpenFloswift run OpenFloCoreSmokeTests./scripts/package_dmg.shThe unsigned DMG is written to dist/OpenFlo.dmg. For public distribution outside the App Store, the .app and .dmg should be signed and notarized with an Apple Developer ID certificate.
See docs/ARCHITECTURE.md.