VersoRelease

Verso 1.1: layouts you can ship, and a marketplace inside the notebook

Verso 1.1.1 lets a package replace the notebook surface itself, puts a NuGet marketplace inside the Extensions panel, and ships three showcase layouts built on the same API you get.

Verso 1.1.1 is out. The part I am happiest about is that the notebook surface itself is now an extension point: a package can replace what you see when you open a file, and packages are found, installed, and trusted without you leaving the notebook.

What changed

Area 1.1.1
Layouts ILayoutEngine gains two renderer modes, plus ILayoutInteractionHandler and ILayoutLifecycleHandler
Capabilities Insert, delete, reorder, edit, resize, execute, multi-select, declared per layout
Marketplace A pane that searches NuGet and installs or uninstalls in place
Trust Pinned to the resolved version, re-prompted on drift, per notebook
Required extensions Declared in metadata, loaded before the first render
Showcase Grid Studio, Form Studio, and Image Studio on NuGet
VS Code Runtime detection and an offer to install a missing .NET runtime

Two ways to draw a layout

A layout decides what a notebook looks like when you open it, and there are two ways to build one.

An inline layout writes the arrangement and hands it to the host, and the host drops your real cells into the places the layout marked for them. Those are live cells: they still execute, still stream output, still edit. You write the arrangement, the host keeps the cells.

An isolated layout ships a JavaScript bundle that the host runs in a sandboxed frame. It draws its own content, keeps its own DOM and CSS, and has no network inside the frame, so anything it needs fetched gets fetched kernel side.

The trade is isolation against reuse. Inline is C# only, inherits the host CSS, and keeps the host's cells. Isolated needs a bundle and gets a clean room. Toolbars and grids usually want the first, visualizations and custom editors the second.

Either way, interactions come back through the same handler, so your code does not need to know which mode drew the screen. Both also take their colors from the host's CSS variables instead of asking what the theme is, which is why a layout recolors correctly in the browser and in VS Code alike.

A marketplace that is just NuGet

The Extensions panel now has a search box above the extensions you have loaded. Type a package name, pick a version, install. There is no Verso feed behind it: the search runs against the NuGet sources configured on the machine, private ones included. Packages unpack one folder per version into ~/.verso/extensions/<package-id>/<version>/ or %APPDATA%\verso\extensions\<package-id>\<version>\.

An extension is executable code, so the first load asks you. Trust is pinned to the exact version you approved, which means a notebook asking for a different version prompts again instead of quietly trusting the new build.

A notebook can declare what it needs:

"metadata": {
  "extensions": {
    "required": ["Contoso.Verso.ChartLayout@1.2.0"],
    "optional": []
  }
}

Those load before the notebook renders, so a layout the file depends on is there on the first paint. If one cannot be found or approved, the notebook still opens, with a notice, and falls back to a built-in layout. The on/off toggle beside a loaded extension stays local and does not travel with the file.

Three layouts that prove the API

We published three of them, each referencing Verso.Abstractions and nothing else, each isolated:

  • Grid Studio (Verso.Showcase.GridStudio) shows a kernel DataBlock as an editable spreadsheet and commits every edit back to the same variable with the column types preserved. A System.Data.DataTable, such as a shared SQL result, renders read-only on purpose. Bundles Jspreadsheet CE (MIT).
  • Form Studio (Verso.Showcase.FormStudio) is a dashboard you build by dragging. Sliders, dropdowns, toggles, and charts drop onto a canvas, each input writes a kernel variable by name, and with auto-run on the notebook recomputes and pushes fresh data back. Charts are Chart.js (MIT).
  • Image Studio (Verso.Showcase.ImageStudio) turns the same file into a layered image compositor. A procedural layer hands its drawing off to a kernel variable, so re-running a code cell repaints it. Bundles nothing.

They make the point from if a built-in feature needs a private API: the built-in Notebook, Dashboard, and Presentation layouts run on the same interfaces.

Getting it

dotnet tool update -g Verso.Cli
code --install-extension Datafication.verso-notebook
dotnet add package Verso

If you write extensions, the template has a new switch. dotnet new verso-extension --includeLayout scaffolds an inline layout with cell slots, interaction routing, metadata persistence, and themed CSS.

Also in 1.1.1: export moved to an icon-only toolbar behind a per-host download that works from inside an isolated frame, and publishing Python variables with cyclic or deeply nested structures no longer crashes the host.

Codespaces and Safari

The editor now works in GitHub Codespaces from Chromium-based browsers such as Chrome and Edge. Safari in the Codespaces browser client remains a documented limitation.

Thanks to @fluentfoundation and @fiVISION for sponsoring this work. The full notes are on the release notes page. Build a layout, and if the API will not let you do something you expected, that is the report I most want to see.