verso-v1.1.1
Release introducing custom layout extensibility with inline and isolated renderers, an in-app extension marketplace with per-notebook required extensions and persisted trust, three showcase layout extensions published as NuGet packages, a redesigned notebook toolbar with icon-only actions and export, smarter .NET runtime detection in the VS Code extension, hardened Python variable publishing, GitHub Codespaces support, and a major documentation expansion alongside a reworked extension project template with a new layout scaffold.
Thanks to @fluentfoundation and @fiVISION for sponsoring and supporting this project.
New: Custom Layout Extensibility
- Extensions can now ship complete notebook layouts through
ILayoutEngine, withILayoutInteractionHandlerfor routing UI interactions andILayoutLifecycleHandlerfor cell lifecycle notifications - Inline layouts render in the host page: the layout emits a slot per cell and the host mounts live, fully interactive cell components into the layout's own HTML
- Isolated layouts render in a sandboxed iframe with their own renderer package, a bridge API for host communication, and a strict content security policy
- Layouts declare capabilities (insert, delete, reorder, edit, execute) and hosts adapt: display-only layouts skip mounting the editor, ignore command-mode keys, and keep outputs visible when clicked
- Layout styling follows the active theme through
--verso-*CSS variables that cascade across the web and VS Code hosts, and themes gain coarse background and foreground tokens for layouts to consume - Layouts persist their state in notebook metadata and can provide scoped static assets such as stylesheets
- The built-in layouts run on the same public API, and everything works across Blazor Server, WebAssembly, and the VS Code extension
New: Extension Marketplace
- A marketplace pane searches NuGet and installs or uninstalls extension packages without leaving the notebook
- Notebooks can declare required extensions, which are resolved and loaded before the notebook initializes
- Trust prompts pin to the resolved package version and re-prompt if it drifts; trust decisions persist per notebook
- Installed extensions that fail to load are flagged in the extension panel with a warning and the reason
- Package extraction guards against path traversal, and extension load failures degrade to a banner instead of blocking the notebook
New: Showcase Layout Extensions
- Three sample extensions demonstrate the layout API end to end and are published as
Verso.Showcase.*NuGet packages: Image Studio (an isolated-layout image compositor), Form Studio (form-driven notebooks with charts), and Grid Studio (data grid editing) - Form Studio charts and Grid Studio grids bind
System.Data.DataTablevariables in addition toDataBlock, so SQL cell results display directly; DataTable sources are shown read-only
Improved: Notebook Toolbar
- The toolbar was redesigned with icon-only actions, and extension toolbar actions can declare
IconOnly,IsPrimary, andConfirmationPrompt - Notebook export is available from the toolbar, backed by a per-host file download mechanism that also works from isolated layouts
- Extension health is tracked and surfaced in the UI
Improved: Notebook Reliability
- Transient outputs, such as the parameters form, no longer mark the notebook edited when they auto-render; cell types declare whether their outputs persist, and interaction handlers can signal persisted-state changes
- Cell type and language menus render in the browser top layer using the Popover API, so they no longer paint beneath neighbouring cells
- Publishing Python variables with self-referential or deeply nested structures no longer crashes the host; conversion guards against cycles and depth
New: .NET Runtime Detection and Install Guidance in VS Code
- The extension resolves which
dotnetto use (an explicitverso.dotnetPathsetting, a previously acquired runtime, or PATH) and checks it against the host's required runtime - Missing or incompatible runtimes produce actionable errors, including an offer to install the runtime on demand through the .NET Install Tool
- Host start failures are classified (dotnet not found, incompatible runtime, timeout, crash) so the guidance matches the actual problem
Improved: GitHub Codespaces Support
- The notebook editor now works in GitHub Codespaces from Chromium-based browsers such as Chrome and Edge; a remaining Safari limitation is documented in the known issues
Improved: Extension Project Template
- Template packaging is fixed so
dotnet new install Verso.Templatesyields a working, buildable template (package folder structure and the companion test project are preserved) - A new
--includeLayoutparameter scaffolds an inline layout with cell slots, interaction routing, metadata persistence, and themed CSS, along with tests - The sample theme and toolbar action scaffolds were refreshed for the new extension points
Improved: Documentation
- New guides cover cell types, the command line (all six commands and
--extensionsusage), and embedding the engine - Extension documentation expands to layout authoring, inline versus isolated renderers, packaging and marketplace install paths, and security guidance
- Architecture docs clarify engine and execution behavior, including kernel restart handling and notebook format migration