Blog

Notes from the workbench.

Release notes with context, design decisions, how-to guides, and the occasional argument about how .NET should treat data. Written by the person who builds them.

2026
VersoFeature

Five layouts, one notebook file, no host changes

A layout decides how a notebook is arranged and rendered, and it is an extension like any other: five samples on NuGet turn one file into a graph, a deck, a spreadsheet, a dashboard, and an image editor.

VersoShowcase

One table, three languages, one variable

I parse the Palmer Penguins CSV once in C#, group it in Python, aggregate it in SQL, and render it as a typed DataFrame table in PowerShell, all in one notebook with no export step anywhere in it.

MotusShowcase

One suite, four shards, and everything it left on disk

I built a full Motus suite against two public pages, gated it on accessibility and Core Web Vitals, recorded a trace, a HAR and a video, then split it across four agents and merged the results back into one report.

MotusHow-to

Moving a Playwright for .NET suite to Motus

Most of it is search and replace, so here are the steps in the order you would do them, the four places the APIs really differ, and the parts that do not come across at all.

VersoFeature

Swap the host in the URL and your notebook is a page

Change github.com to www.versonotebooks.com/share/github in a notebook's address and the file reads as a page with its saved outputs, with nothing uploaded, nothing executed, and no account to create.

VersoRelease

Verso 1.2: live widgets, panels, and five languages

A rendered widget keeps talking to the interpreter that drew it, a widget's value can become a shared variable any kernel reads, extensions can add panels beside the notebook, and the interface now speaks five languages.

VersoFeature

Python cells that run the Python you already have

Verso runs your Python cells in a separate process against the CPython already on your machine, which is what makes an interrupt work, a crash survivable, a restart real, and your virtual environment's packages simply there.

VersoFeature

One variable store, eight languages, no hand-off

Every kernel in a Verso notebook reads and writes the same variable store, so a value you set in C# is already there in Python, SQL and JavaScript. The interesting part is what happens to that value when it leaves the process.

MotusRelease

Motus 1.0: browser testing without the middleman

Motus is a new MIT-licensed browser automation and testing framework for .NET, and your test talks to Chrome, Edge or Firefox directly: no Node.js sidecar in between and no driver binary to install.

VersoEssay

Every Verso feature is an extension, and a Perl kernel proves it

Verso's C# kernel, dark theme and dashboard layout are extensions written on the same public interfaces your package would use. Today's release adds a Perl kernel sample, which is a cheaper way to test that claim than another manifesto.

VersoRelease

Verso 1.0: the notebook, and the engine underneath it

The first release of Verso: a headless .NET notebook engine, C#, F# and SQL kernels that share one variable store, a file format you can read in a diff, and ten interfaces every built-in already uses.

SDKShowcase

Global broadband, one partition at a time

I pointed a .NET console app at one Parquet object in Ookla's public S3 bucket, landed 3,551,267 measurement tiles in a .dfc file, and started asking it questions.

SDKRelease

When the same string ID meant two different things

1.0.11 fixes GroupBy and Pivot giving wrong answers on DFC files with more than one segment, where each segment numbered its strings from 1 and the reader looked every ID up in the first segment's table.

SDKShowcase

246 years of weather in one .dfc file

NOAA puts every daily observation in the Global Historical Climatology Network on a public S3 bucket, so I pulled one station out of it, 234,470 rows across 246 years, into a .dfc file and started asking it questions, with every command and the output it gave back.

SDKFeature

Seven connectors, one shape

CSV, JSON, Excel, Parquet, ADO.NET, S3 and web pages all come back as the same DataBlock through the same two methods, and with 1.0.9 all seven connector packages are on NuGet.

SDKHow-to

Load a CSV, clean it, group it, write Parquet

A .NET 8 console pipeline you can run in ten minutes, from a messy CSV of orders to a Parquet file of revenue by region, with a look at the data after every step.

SDKFeature

A REST layer that speaks DataBlock

Register a DataBlock under a name and Datafication.Server.Core serves it over HTTP, with one route that takes filters, computed columns, grouping, sorting and paging in a single JSON body.

SDKRelease

The Datafication SDK is on NuGet

Eight packages went up on nuget.org today at 1.0.1, and everything we use to move data around inside a .NET process is now installable.

2025
2024
CompanyEssay

What I mean by a data-driven world

The phrase gets used for everything, including by me, so here is the version I can defend: fewer hops between a fact and a decision.

2023
2022
CompanyEssay

Why I started Datafication

I kept leaving .NET to answer questions about data my own C# code had written. Datafication is the company I started so I could stop.