Developers

Tools that finish the job .NET left open.

A data library, a notebook with an embeddable engine, and browser automation with an MCP server. Native to .NET, documented alongside the code, and plain about what's free.

120,000+NuGet downloads of the SDK packages
MITVerso and Motus, developed in public
.NET 8+Windows, macOS and Linux
# The in-memory DataBlock
$ dotnet add package Datafication.Core
# A connector for each format you read, CSV here
$ dotnet add package Datafication.CsvConnector
# VelocityDataBlock, when the data outgrows memory
$ dotnet add package Datafication.Storage.Velocity

Datafication SDK

Commercial, free for small teams

Analytical data processing for .NET. A column-oriented, in-memory DataBlock with a pandas-style API, a disk-backed VelocityDataBlock for data that outgrows memory, and connectors for the formats your data already lives in.

The need it fulfills

LINQ is wonderful until you need a moving average, a pivot or a join across two files. Analysis kept leaving .NET for another language or a spreadsheet, and the app that made the data never got to use it.

Who it's for

.NET teams who load, shape and analyze data inside their own applications, services and tools.

Load and shape

Every operation returns a new DataBlock, so a pipeline reads top to bottom and never changes its input.

using Datafication.Core.Data;
using Datafication.Extensions.Connectors.CsvConnector;

var sales = await DataBlock.Connector.LoadCsvAsync("sales.csv");

var result = sales
    .Where("region", "North America", ComparisonOperator.Equals)
    .Compute("profit_margin", "profit / revenue")
    .Where("profit_margin", 0.25, ComparisonOperator.GreaterThan)
    .GroupByAggregate("product_category", "revenue",
        AggregationType.Sum, "total_revenue")
    .Sort(SortDirection.Descending, "total_revenue");

Where the data comes from

CSV
Parquet
JSON
Excel
ADO.NET
S3 and the web
One shape, one API
DataBlockColumnar, in memory. Filter, group, join, pivot, window functions.
VelocityDataBlockThe same calls, on disk: SIMD filters, compression, a write-ahead log.
Each connector is its own package, so an application takes only the formats it reads.

Install

Coredotnet add package Datafication.Core
A connectordotnet add package Datafication.CsvConnector
On diskdotnet add package Datafication.Storage.Velocity
LicenseCommercial. Free while fewer than five developers in your organization build with it and revenue is under $500,000 a year. Open-source projects with under $500,000 a year in funding are exempt from the developer limit.
ConnectorsCSV, Parquet, JSON, Excel, ADO.NET, Web, S3, text
Runtime.NET 8.0 or later; Windows, macOS, Linux
ReleasedDatafication.Core 1.0 on 2026-01-09

Verso

MIT1.0 since 2026-02-20

An interactive notebook platform and an embeddable .NET execution engine. Eight language kernels share one variable store, and every feature, including the built-in ones, is an extension.

The need it fulfills

Understanding data means load, look, reshape, look again. .NET developers needed a maintained notebook for that loop, and apps needed a notebook engine they could build on.

Who it's for

Developers exploring data in VS Code, the browser or a terminal, and teams putting a programmable notebook runtime inside their own product.

One variable store, eight kernels

A value set in C# is visible to Python, bound as a SQL parameter and substituted into Markdown. Nothing to import, nothing to declare.

One variable store C# F# Python SQL HTTP PowerShell JavaScript Markdown
Every kernel ships completions, diagnostics and hover. Add your own by implementing ILanguageKernel, on the same interfaces the built-in kernels use.
// [1] C#
record Sale(string Region, decimal Revenue);
var revenue = new[] { new Sale("East", 52_000m), new Sale("West", 38_500m) };
var threshold = 40_000m;

# [2] Python: revenue and threshold came from the C# cell
over = [r.Region for r in revenue if r.Revenue > threshold]

-- [3] SQL: bound from the shared store
SELECT * FROM orders WHERE total > @threshold

<!-- [4] Markdown -->
Regions above @threshold are on track this quarter.

Install

VS CodeVerso in the MarketplaceOpen
Command linedotnet tool install -g Verso.Cli
Enginedotnet add package Verso
SurfacesVS Code, browser, terminal, CI. All run the same headless engine.
Formats.verso, .ipynb, .md; imports .dib
LayoutsDashboards, slides, spreadsheets, reactive graphs and an image compositor ship as extensions.
Runtime.NET 8, .NET 10

Motus

MIT1.0 since 2026-03-29

Browser automation and testing for .NET that talks straight to the browser over CDP and WebDriver BiDi. No Node.js sidecar, no driver binaries, and every built-in feature is a plugin you could have written yourself.

The need it fulfills

Browser testing from .NET meant borrowing another runtime: a proxy process or a driver binary per browser, a second toolchain in CI, and a boundary between your test and the page.

Who it's for

.NET teams who ship to the web and want tests that run in their own process, and anyone whose AI assistant needs a real browser to work in.

Nothing in between

Your testA .NET process: MSTest, xUnit or NUnit
The browserChrome, Edge or Firefox
Your AI assistantAny MCP client
The same engineNavigate, snapshot, click, audit
The MCP server is a verb on the CLI, not a separate download. Perception is built on the browser's accessibility tree, so an assistant reasons over labeled elements rather than pixels.
using Motus;
using Motus.Testing.MSTest;
using static Motus.Assertions.Expect;

[MotusTestClass]
public class SearchTests : MotusTestBase
{
    [TestMethod]
    public async Task SearchReturnsResults()
    {
        var page = await Context.NewPageAsync();
        await page.GotoAsync("https://example.com");
        await page.Locator("input[name='q']").FillAsync("motus automation");
        await page.Locator("button[type='submit']").ClickAsync();
        await That(page).ToHaveUrlAsync("**/search**");
        await That(page.Locator(".results")).ToBeVisibleAsync();
    }
}

Install

Librarydotnet add package Motus
Test adapterdotnet add package Motus.Testing.MSTest
Command linedotnet tool install --global Motus.Cli
ProtocolsCDP for Chromium, Chrome and Edge; WebDriver BiDi for Firefox
Test frameworksMSTest, xUnit, NUnit
Built inAuto-waiting locators and assertions, network interception, accessibility and performance audits, coverage, tracing, a recorder and code generation
Runtime.NET 8, .NET 10; NativeAOT friendly

Licenses, stated up front

We'd rather be clear about what's open and what pays for the open parts than blur the two.

ProductLicenseWhat it means for you
Datafication SDKCommercialFree under five developers and $500,000 in yearly revenue. Open-source projects with under $500,000 a year in funding are exempt from the developer limit. Above that, a commercial license adds priority email support.
VersoMITUse it, embed it, ship it. The license will not change under you.
MotusMITUse it, extend it, ship it. The license will not change under you.

Stuck, or missing something?

Email reaches the person who writes the code. Verso and Motus also take issues and pull requests on GitHub.