Examples
Curated demo workflows running on blockr.cloud. Open any example to explore it interactively.
Getting Started

Empty Workflow
Start from a clean canvas and build your own pipeline.
Open in Playground →
Your First Workflow
Add a dataset, filter it, plot it, and read the Quarto document the blocks wrote.
Open in Playground →Pharma
Clinical Explorer
AI-enabled exploration of an ADaM trial: demographics, AE, lab, vitals, patient profile.
Open in Playground →
Admiral SDTM → ADSL
SDTM DM to ADSL with admiral, one derivation step per block.
Open in Playground →Insurance

Life UWR Workbench
Life underwriting: per-coverage expected claims and a price-driver dashboard.
Open in Playground →
Actuarial Workbench
Property pricing: Base and Challenger simulations, compared in a waterfall.
Open in Playground →
Treaty Pricer
Reinsurance pricing: an editable treaty tower drives the loss simulation and premium.
Open in Playground →Finance

Portfolio Advisor
Portfolio advisor: investor profile, optimizer, allocation dashboard.
Open in Playground →
Share Explorer
Pick tickers and dates, and the price and return charts recompute.
Open in Playground →Statistics

Does mosquito control work?
Refits a published mosquito-control study. The Quarto report comes out of the same board.
Open in Playground →
Is the economy growing, or is it just the season?
Swiss GDP seasonally adjusted in one block, next to SECO's own adjustment.
Open in Playground →Showcase

Cat Breeds
Cat breeds end to end: no-code blocks and custom blocks on the same data (useR! 2026).
Open in Playground →
Full-Stack Assistant
An empty board with the AI assistant: build the whole workflow by chatting.
Open in Playground →
DuckDB Lazy (100M rows)
100M rows of parquet in lazy DuckDB. Every dplyr block runs as SQL.
Open in Playground →
DuckDB Remote dm (5M-row star schema)
A 5M-row DuckDB star schema as a dm, browsed without collecting the fact table.
Open in Playground →
Data Collection Process
A quarterly data collection from eight units, run as a BPMN process.
Open in Playground →Run an example locally
The demos above run on blockr.cloud. To run one in your own R session, follow the setup below.
Your First Workflow
The sixty-second board. Start blank, add a dataset, filter it, plot it, and watch the outline on the left fill in as you go. Then open the Report view and read the Quarto document the three blocks wrote: about ten lines of ordinary R that runs without blockr.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.outline") # the outline rail and the report builderLaunch the demo:
source(system.file("examples/first-workflow.R", package = "blockr.outline"))Nothing is preloaded and no data package is needed. Start either way: the dataset block reads from datasets, so iris and mtcars are one picker away, or paste a csv URL into Import Data and work on your own. Connect two blocks by dragging between the dots on the outline's left rail. Open inst/examples/first-workflow.R on GitHub to see exactly what the script does.
Clinical Explorer
AI-enabled exploration of an ADaM trial. One cross-filter drives five views: population and disposition, an adverse-event heatmap with a frequency chart and a swim-lane, and lab and vital-sign trajectories. The patient profile, the outline and the assistant ride a rail beside them.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("BristolMyersSquibb/blockr.pharma") # patient profile, AE heatmap, the study roles option
pak::pak("cynkra/blockr.outline") # the outline rail
install.packages("safetyData")Launch the demo:
source(system.file("examples/clinical-explorer.R", package = "blockr.pharma"))This loads the ADaM tables from safetyData and the same blocks as the live demo: the cross-filter, the AE heatmap and swim-lane, the summary tables, the lab and vital-sign trajectories, and the patient profile. Open inst/examples/clinical-explorer.R on GitHub to see exactly what the script does.
Admiral SDTM → ADSL
SDTM DM to ADSL derivation pipeline using admiral blocks: each block is one derivation step with visible intermediate results.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("BristolMyersSquibb/blockr.admiral") # admiral derivation blocks (derive_vars_*, merge, seq)
install.packages("pharmaversesdtm") # SDTM example domains (dm, ex)Launch the demo:
source(system.file("examples/sdtm-to-adsl.R", package = "blockr.admiral"))Open inst/examples/sdtm-to-adsl.R on GitHub to see exactly what the script does.
Life UWR Workbench
Life-insurance underwriting workbench: a per-coverage expected-claims pipeline plus a UWR price-driver dashboard over a census, claims history, and bundled actuarial tables.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.input") # editable data grid (the UWR uw_factors worksheet)
pak::pak("BristolMyersSquibb/blockr.code") # show / export the generated R code
pak::pak("cynkra/blockr.insurance") # census + claims data, formula chain, this exampleLaunch the demo:
source(system.file("examples/life-underwriting.R", package = "blockr.insurance"))Open inst/examples/life-underwriting.R on GitHub to see exactly what the script does.
Actuarial Workbench
Property-insurance actuarial workbench: Base vs Challenger portfolio simulations with editable base-rate grids, premium components, and a run-vs-run compare waterfall.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.input") # editable base_rate parameter grids (Base / Challenger)
pak::pak("BristolMyersSquibb/blockr.code") # show / export the generated R code
pak::pak("cynkra/blockr.insurance") # pricing engines + portfolio data, this exampleLaunch the demo:
source(system.file("examples/property-workbench.R", package = "blockr.insurance"))Open inst/examples/property-workbench.R on GitHub to see exactly what the script does.
Treaty Pricer
Layered excess-of-loss treaty pricer: an editable treaty tower drives a piecewise-Pareto severity fit, loss simulation, and a per-layer premium build-up. Edit a layer and the KPIs, quote chart, and build-up waterfall all recompute.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.input") # the one editable treaty_tower grid (client structure)
pak::pak("BristolMyersSquibb/blockr.code") # show / export the generated R code
pak::pak("cynkra/blockr.insurance") # the treaty tower data + this example
install.packages("Pareto") # piecewise-Pareto severity fit + loss simulationLaunch the demo:
source(system.file("examples/treaty-pricer.R", package = "blockr.insurance"))This loads the treaty tower bundled in blockr.insurance and the same blocks as the live demo: the editable tower, Pareto fit and loss simulation, the per-layer quote chart and premium build-up waterfall, the layer-detail drilldown, and a challenger-vs-base comparison. Open inst/examples/treaty-pricer.R on GitHub to see exactly what the script does.
Does mosquito control work?
Refits a published mosquito-control study. The Poisson glm is built in the board by dragging a term in. The paper's negative binomial mixed model is written as plain R. Both reproduce the numbers in the paper. Joint work with Matteo Tanadini, a co-author of the study.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.stats") # dataset + model + model-summary + broom blocks
pak::pak("cynkra/blockr.outline") # the report builder, the deck builder, the minidag
install.packages("glmmTMB") # the published arm's fit
install.packages("broom.mixed") # its tidy() method
install.packages("gtsummary") # every table on the board
install.packages("broom.helpers") # gtsummary's tidier bridge, a Suggests since gtsummary 2.xLaunch the demo:
source(system.file("examples/aedes-ivm.R", package = "blockr.stats"))Nothing is preloaded. The read block fetches Additional file 2 from the publisher on startup, so the board needs a working internet connection, and every number on it is computed from that file. The published arm fits a negative binomial mixed model at startup, which takes a few seconds before the Model view settles. Render the report from the Report view: what downloads is a Quarto document whose chunks are ordinary R, with no blockr call in it, so it renders in any session that has the packages above. Open inst/examples/aedes-ivm.R on GitHub to see exactly what the script does.
Is the economy growing, or is it just the season?
Swiss quarterly GDP is published twice: as it happened, and seasonally adjusted. This board makes the second one. It runs X-13ARIMA-SEATS on SECO's unadjusted series with no settings and puts the result beside SECO's own published adjustment: over 186 quarters they agree to a median of 0.12 percent. Data from dataseries.org.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.ts") # pick, transform, combine
pak::pak("cynkra/blockr.seasonal") # the X-13 block and the series extractor
pak::pak("cynkra/blockr.outline") # the outline and the report builderLaunch the demo:
source(system.file("examples/ch-gdp-season.R", package = "blockr.seasonal"))Nothing is preloaded. The read block fetches the series from the dataseries.org API on startup, so the board needs a working internet connection, and every number on it is computed from that file. X-13 fits at startup, which takes a second or two before the Adjustment view settles. Render the report from the Report view: what downloads is a Quarto document that fetches its own data and renders outside the board. Two of its chunks call blockr.seasonal and blockr.ts, so those two have to be installed; no board, no board file and no other blockr package. Open inst/examples/ch-gdp-season.R on GitHub to see exactly what the script does.
Cat Breeds
A full cat-breeds analysis end to end: trait radar, headline KPIs, correlations, a temperament word cloud and a chart-filter to drilldown pair, with AI wired both per-block and board-level (the useR! 2026 demo).
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.leaflet") # custom "map block" we built (markers per origin)
pak::pak("cynkra/blockr.catbreeds") # this package: catbreeds data block + card/flags/stats/similarLaunch the demo:
source(system.file("examples/app.R", package = "blockr.catbreeds"))Open inst/examples/app.R on GitHub to see exactly what the script does.
DuckDB Lazy (100M rows)
A 100,000,000-row parquet opened as a lazy DuckDB table and transformed through a chain of blockr.dplyr blocks. Every verb pushes to SQL and the preview pages through 100M rows without ever materializing the full table; only the filtered ~1000-row result is collected into R.
First install blockr as described on the Install page. Then add the extra packages:
install.packages("duckdb") # embedded OLAP engine, reads parquet
install.packages("DBI") # database connection layer
install.packages("dbplyr") # translates dplyr verbs to SQLLaunch the demo:
source(system.file("examples/duckdb-lazy.R", package = "blockr.dplyr"))The 100M-row parquet is generated once into a local cache on first run (override with n_rows <- 5e6 before sourcing for a lighter run). On blockr.cloud it is pre-generated on the host and mounted read-only at /data instead. Open inst/examples/duckdb-lazy.R on GitHub to see exactly what the script does.
DuckDB Remote dm (5M-row star schema)
A 5,000,000-row DuckDB star schema (one fact table, three dimensions) bound into a dm and explored with the Key-lines preview - the fact table pages in the database and is never collected. A second in-memory example dm renders through the same preview.
First install blockr as described on the Install page. Then add the extra packages:
install.packages("duckdb") # embedded OLAP engine, reads parquet
install.packages("DBI") # database connection layer
install.packages("dbplyr") # translates dplyr verbs to SQLLaunch the demo:
source(system.file("examples/duckdb-remote-dm.R", package = "blockr.dm"))The star-schema parquet self-generates into a local cache on first run (override with n_orders <- 5e5L); no external data or host mount needed. Open inst/examples/duckdb-remote-dm.R on GitHub to see exactly what the script does.
Data Collection Process
A quarterly data collection from eight reporting units, run as a process rather than a dashboard. The definition is one wide table; the state is an append-only event log; a headless worker runs the tasks that are scripts. The three front tasks repeat per unit inside a BPMN multi-instance sub-process, the QA check answers true/false on stdout so the branch and its rework loop live in the table, and "Simulate delivery" writes an inbox message the way an upload platform would - the worker turns it into an event.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.outline") # the outline rail the process editor is built on
pak::pak("cynkra/blockr.process")Launch the demo:
source(system.file("examples/data-collection.R", package = "blockr.process"))The board starts with NO instance: opening one is the first move. The store is per container at /tmp/blockr-process-demo, so a second browser window watches the same event log - tick a task in one and it appears in the other. The app starts its own worker as a hosting convenience; the design rule is that the worker lives outside the app (see vignette("running-scripts")), and BLOCKR_PROCESS_WORKER=0 turns it off so you can run one in a terminal and watch it work. Open inst/examples/data-collection.R on GitHub to see exactly what the script does.
Portfolio Advisor
A portfolio advisor: pick an investor risk profile and an optimizer strategy on the left, and a diversified allocation dashboard recomputes on the right. A second Workflow tab shows the live block graph.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.portfolio")Launch the demo:
source(system.file("examples/app-portfolio.R", package = "blockr.portfolio"))This loads the bundled asset universe and the same blocks as the live demo: the investor profile, the mean-variance optimizer, and the allocation dashboard. Edit the risk profile or strategy and the dashboard recomputes. Open inst/examples/app-portfolio.R on GitHub to see exactly what the script does.
Share Explorer
An interactive share explorer: choose tickers and a date range on the left and the price / return charts recompute on the right. A second Workflow tab shows the live block graph.
First install blockr as described on the Install page. Then add the extra packages:
pak::pak("cynkra/blockr.portfolio")Launch the demo:
source(system.file("examples/app-explorer.R", package = "blockr.portfolio"))Ticker data is fetched via quantmod (AAPL / MSFT / GOOG / AMZN by default), with a bundled offline fallback. Change the ticker or date selection and the explorer recomputes. Open inst/examples/app-explorer.R on GitHub to see exactly what the script does.