About CoralDuck

CoralDuck is a rebuild of Coral, a cohort analysis tool that runs on a curated database. In contrast, CoralDuck runs the database in your browser tab instead, providing a similar experience for your data.

What it is, and where it came from

Coral is designed for server-hosted, curated clinical data—users log in to query hosted datasets via Postgres while managing cohort creation, characterization, and provenance in one place. Its server infrastructure enables features like session management, sharing analyses states, and extended provenance tracking.

CoralDuck is a serverless alternative. It retains Coral's core analysis workflow, layout, and terminology, but runs DuckDB in your browser for local data analysis. Your files stay entirely on your device for local-only analysis.

The design, the workflow, and most of the gestures here are based on Coral.

News

v1.2.0

Projection: your cohorts on a map 🗺️

The Overview has a second layout beside the tree. Every row is a point on two coordinates of your data, and every cohort is a diamond at the mean of its rows, joined by the tree’s edges. Coral had only the tree; the projection layout follows Eckelt et al. 2023.

  • Bring coordinates, or compute them. Pick any two numeric columns, or run UMAP in your browser. The embedding is seeded, so the same attributes draw the same map every time, and a large table is fitted on a sample of 50,000 rows.
    The projection layout filling the window: the penguins on bill length and depth, with the three species cohorts colored and their contours drawn.

    The projection layout

    Three species on two of their measurements

  • Cut a cohort with a lasso. Drag around the rows you want, and “Filter by lasso” opens Filter with it for every selected cohort, so the new cohort is still confirmed in the action view.
  • Clusters become cohorts. “Find clusters” colors the map by its dense regions, one knob sets how many there are, and “Split by clusters” hands them to Split.
    The projection layout filling the window: a UMAP of the penguins with its points colored by cluster, and the cluster bar with its Fewer and More clusters knob.

    Clusters in a computed embedding

    Colored by cluster, ready for Split

  • Computed columns travel with your work. The embedding and the clusters are new columns, marked as computed. They come back on a reload, and “Export derived values” writes them to a file that goes beside the project file.

Full changes.

v1.1.0

Characterize: what sets your cohorts apart 🌲

Pick two or more cohorts, and a random forest ranks the attributes that tell them apart. It is Coral’s Kokiri operation, ported to fully run in your browser.

  • Kokiri’s approach, extended. Each attribute is confirmed, tentative or rejected against a shuffled copy of itself, instead of being cut at a fixed threshold. Accuracy is out-of-bag: each row is predicted only by trees that did not train on it. Each tree draws its rows without replacement, which removes a known bias in the importance and serves small cohorts better. Stop keeps the forest grown so far, and Exclude and Limit start a narrower run.
    Characterize over three penguin species: attributes ranked by importance, the accuracy, item predictions and a map of the items.

    Characterize, one finished run

    Importance, accuracy and the items

  • Parquet and JSON load, and both row exports can write Parquet.
  • Shareable links. A link can open the app with a dataset already loaded, so you can send one to a colleague.
  • Session management. Each tab keeps its own saved session, and the Welcome screen lists the others to continue or delete.

Full changes.

v1.0.0

Coral going serverless 🚀

CoralDuck reaches v1 as a browser-only tool. Coral’s workflow is here — the cohort tree, the three-area action view, filter and split, prevalence, compare, and the item table — running against an uploaded dataset rather than a database.

What that changed, in the places you will notice it:

  • You bring the data. CSV and TSV, plain or gzipped, from your disk or a URL.
  • Nothing is uploaded, and nothing is fetched. No login, no session on a server, and no third-party request from this site or from the app.
  • Prevalence gets a better confidence interval: Agresti-Coull instead of Wald, which is too narrow when a cohort is small or its rate is close to 0% or 100%. The reference is any subset of the cohort’s own steps.
  • Two row exports instead of one, plus a PNG of the whole tree, and a portable project file that carries an analysis between machines.
  • A color scheme you choose — light, dark or system — across the app and this site.
  • Compare shows one card per attribute instead of one large matrix. Each cell names its real statistic (Cramér’s V, or a rank-biserial effect size) and says which cohort is higher and how much the two overlap.
    Compare with one cell open: the details panel names the test, the p-value and the effect size, and says which cohort is higher.

    Compare, one cell open

    The test, the score and the effect

Not here yet: Characterize, the projection view, and the onboarding tooltips. Full changes.

Publications

Coral, the components it grew out of, and the work its projection layout follows are described in these papers. There is no CoralDuck paper; if it helps with something you publish, the Coral paper is the one to cite.

A frame of the embedding-structure paper video, showing Projection Space Explorer.
Visual Exploration of Relationships and Structure in Low-Dimensional Embeddings. Klaus Eckelt, Andreas Hinterreiter, Patrick Adelberger, Conny Walchshofer, Vaishali Dhanoa, Christina Humer, Moritz Heckmann, Christian A. Steinparz, Marc Streit. IEEE Transactions on Visualization and Computer Graphics, 29(7):3312–3326, 2023.

Source and contact

The source is at github.com/keckelt/coralduck, along with every decision that shaped it — the architecture records in docs/adr/ are the real documentation. Bugs, questions and requests belong in the issue tracker.

CoralDuck computes statistics on data it has never seen, and its p-values are not corrected for multiple comparisons. It is not for the provision of medical advice.