diff --git a/README.md b/README.md
index 8f46ffd6..e80970df 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
@@ -46,7 +46,7 @@ dotnet tool install -g Verso.Cli
verso serve
```
-Requirements: the VS Code extension needs the [.NET runtime, version 8.0 or later](https://dotnet.microsoft.com/download/dotnet) and offers to install it for you if it is missing; the `verso` CLI needs the [.NET SDK](https://dotnet.microsoft.com/download/dotnet/10.0) for `dotnet tool install`. [Node.js 18+](https://nodejs.org/) and [Python 3.8 or newer](https://www.python.org/downloads/) are optional; they enable the JavaScript/TypeScript and Python kernels (JavaScript falls back to the pure .NET Jint interpreter when Node.js is absent).
+Requirements: the VS Code extension needs the [.NET runtime, version 10.0 or later](https://dotnet.microsoft.com/download/dotnet/10.0) and offers to install it for you if it is missing; the `verso` CLI needs the [.NET SDK](https://dotnet.microsoft.com/download/dotnet/10.0) for `dotnet tool install`. [Node.js 18+](https://nodejs.org/) and [Python 3.8 or newer](https://www.python.org/downloads/) are optional; they enable the JavaScript/TypeScript and Python kernels (JavaScript falls back to the pure .NET Jint interpreter when Node.js is absent).
## Why Verso
diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md
index 9b0e792d..a4f0aff9 100644
--- a/THIRD-PARTY-NOTICES.md
+++ b/THIRD-PARTY-NOTICES.md
@@ -7,10 +7,10 @@ The original copyright notices and license texts are provided for each component
| Component | Version | License | Project |
|---|---|---|---|
-| Microsoft.CodeAnalysis (Roslyn) | 4.12.0 | MIT | [dotnet/roslyn](https://github.com/dotnet/roslyn) |
+| Microsoft.CodeAnalysis (Roslyn) | 5.0.0 | MIT | [dotnet/roslyn](https://github.com/dotnet/roslyn) |
| NuGet.Protocol | 6.9.1 | Apache-2.0 | [NuGet/NuGet.Client](https://github.com/NuGet/NuGet.Client) |
-| Microsoft.AspNetCore.Components | 8.0.0 | MIT | [dotnet/aspnetcore](https://github.com/dotnet/aspnetcore) |
-| Microsoft.PowerShell.SDK | 7.4.7 | MIT | [PowerShell/PowerShell](https://github.com/PowerShell/PowerShell) |
+| Microsoft.AspNetCore.Components | 10.0.14 | MIT | [dotnet/aspnetcore](https://github.com/dotnet/aspnetcore) |
+| Microsoft.PowerShell.SDK | 7.6.9 | MIT | [PowerShell/PowerShell](https://github.com/PowerShell/PowerShell) |
| FSharp.Compiler.Service | 43.12.202 | MIT | [dotnet/fsharp](https://github.com/dotnet/fsharp) |
| Jint | 4.12.0 | BSD-2-Clause | [sebastienros/jint](https://github.com/sebastienros/jint) |
| Markdig | 0.37.0 | BSD-2-Clause | [lunet-io/markdig](https://github.com/lunet-io/markdig) |
diff --git a/docs/extensions/best-practices.md b/docs/extensions/best-practices.md
index b535ee91..15fcf024 100644
--- a/docs/extensions/best-practices.md
+++ b/docs/extensions/best-practices.md
@@ -90,10 +90,10 @@ Where possible, keep your extensions stateless. The Dice sample demonstrates thi
### Random Number Generators
-If using `Random`, be aware that `System.Random` is not thread-safe prior to .NET 6. On .NET 8, `Random.Shared` is the preferred thread-safe option:
+If using `Random`, be aware that `System.Random` is not thread-safe prior to .NET 6. `Random.Shared` is the thread-safe option:
```csharp
-// Good - thread-safe on .NET 8
+// Good - thread-safe
var roll = Random.Shared.Next(1, sides + 1);
// Risky - private instance may be called from multiple threads
diff --git a/docs/extensions/getting-started.md b/docs/extensions/getting-started.md
index f37675f0..4c01e824 100644
--- a/docs/extensions/getting-started.md
+++ b/docs/extensions/getting-started.md
@@ -4,7 +4,7 @@ This guide walks you through creating your first Verso extension, from setting u
## Prerequisites
-- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) or later
+- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later
- A code editor (Visual Studio, VS Code, or Rider)
- Familiarity with C# and async/await
@@ -12,7 +12,7 @@ Verify your SDK installation:
```bash
dotnet --version
-# Should output 8.0.x or higher
+# Should output 10.0.x or higher
```
## Installing the Verso Extension Template
@@ -89,7 +89,7 @@ The generated `.csproj` references the `Verso.Abstractions` NuGet package and en
```xml
- net8.0
+ net10.0
enable
enable
true
@@ -145,7 +145,7 @@ dotnet build MyDashboard/
dotnet build MyDashboard/MyDashboard.Tests/
```
-The build output (DLL) will be in `bin/Debug/net8.0/`. Because `GeneratePackageOnBuild` is set, a `.nupkg` is also produced on each build.
+The build output (DLL) will be in `bin/Debug/net10.0/`. Because `GeneratePackageOnBuild` is set, a `.nupkg` is also produced on each build.
## Running Tests
@@ -164,7 +164,7 @@ During development you can load your extension straight from its build output, w
**From a notebook**, use the `#!extension` magic command with the path to your compiled assembly:
```
-#!extension ./MyDashboard/bin/Debug/net8.0/MyDashboard.dll
+#!extension ./MyDashboard/bin/Debug/net10.0/MyDashboard.dll
```
The path is resolved relative to the notebook's directory, and local assemblies load without a consent prompt.
@@ -172,7 +172,7 @@ The path is resolved relative to the notebook's directory, and local assemblies
**From the CLI**, point any command at a directory of extension assemblies with `--extensions`:
```bash
-verso serve notebook.verso --extensions ./MyDashboard/bin/Debug/net8.0/
+verso serve notebook.verso --extensions ./MyDashboard/bin/Debug/net10.0/
```
Verso scans that directory for extension DLLs and loads them alongside the built-ins. The `--extensions` flag works on `serve`, `run`, `repl`, `convert`, and `export`. In VS Code, set the `verso.extensionsPath` setting instead.
diff --git a/docs/extensions/packaging-and-publishing.md b/docs/extensions/packaging-and-publishing.md
index edcefee6..80b3c295 100644
--- a/docs/extensions/packaging-and-publishing.md
+++ b/docs/extensions/packaging-and-publishing.md
@@ -9,7 +9,7 @@ The Verso extension template generates a `.csproj` that is already configured fo
```xml
- net8.0
+ net10.0
enable
enable
@@ -195,7 +195,7 @@ Once your package is on NuGet.org (or any feed in a user's NuGet configuration),
- macOS and Linux: `~/.verso/extensions////`
- Windows: `%APPDATA%\verso\extensions\\\\`
-The `` segment records the runtime the assemblies were installed for, so hosts running on different .NET versions each keep a compatible copy side by side. A package that multi-targets (for example `net8.0` and `net10.0`) lets each host pick the newest lib group its runtime can load; a single `net8.0` target also works on newer runtimes.
+The `` segment records the runtime the assemblies were installed for, so hosts running on different .NET versions each keep a compatible copy side by side. Extensions that reference Verso.Abstractions 1.3.0 or later target `net10.0`. Packages built earlier for `net8.0` still load, because a newer runtime runs older assets.
Because an extension is executable code, Verso asks the user to approve a package the first time it loads, and remembers that approval per version. A new version prompts again. Keep this in mind when you publish updates: bumping the version is a deliberate re-consent point for your users, not a silent upgrade.
diff --git a/docs/extensions/testing-extensions.md b/docs/extensions/testing-extensions.md
index 01453a32..cb2122d7 100644
--- a/docs/extensions/testing-extensions.md
+++ b/docs/extensions/testing-extensions.md
@@ -11,7 +11,7 @@ Add `Verso.Testing` (and a test framework) to your test project:
```xml
- net8.0
+ net10.0
enable
enable
false
diff --git a/docs/guides/cli-reference.md b/docs/guides/cli-reference.md
index b8d6866e..3179f43f 100644
--- a/docs/guides/cli-reference.md
+++ b/docs/guides/cli-reference.md
@@ -14,7 +14,7 @@ dotnet tool install -g Verso.Cli
dotnet tool update -g Verso.Cli
```
-It requires the .NET 8.0 SDK or later. After installing, `verso --help` lists the commands, and every command has its own `--help`.
+It requires the .NET 10 SDK or later. After installing, `verso --help` lists the commands, and every command has its own `--help`.
## Global options
diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md
index 39ec0c03..c040e460 100644
--- a/docs/guides/getting-started.md
+++ b/docs/guides/getting-started.md
@@ -12,7 +12,7 @@ Install the **Verso Notebook** extension (`datafication.verso-notebook`) from th
### Command line
-Verso is also a .NET global tool. It needs the .NET 8.0 SDK or later:
+Verso is also a .NET global tool. It needs the .NET 10 SDK or later:
```bash
dotnet tool install -g Verso.Cli
diff --git a/docs/guides/managing-extensions.md b/docs/guides/managing-extensions.md
index f8ec46cb..3006a0db 100644
--- a/docs/guides/managing-extensions.md
+++ b/docs/guides/managing-extensions.md
@@ -22,7 +22,7 @@ Installed packages are unpacked into a managed store on disk:
- macOS and Linux: `~/.verso/extensions////`
- Windows: `%APPDATA%\verso\extensions\\\\`
-Each version lives in its own folder, so multiple versions can coexist. Inside a version folder, assemblies are grouped by the .NET runtime they were installed for (for example `net8.0`), so notebook hosts running on different .NET versions can share the same store.
+Each version lives in its own folder, so multiple versions can coexist. Inside a version folder, assemblies are grouped by the .NET runtime they were installed for (for example `net10.0`), so notebook hosts running on different .NET versions can share the same store.
Once a package is installed, its row lists what it added: a kernel, a layout engine, a theme, and so on. A package that loaded but contributed no extension point at all is marked as adding nothing, which is worth knowing since the marketplace searches all of NuGet and will happily install an ordinary library.
@@ -74,7 +74,7 @@ You do not need to publish to a feed to try an extension you are building. Two o
- From a notebook, use the `#!extension` magic command with a path to the compiled assembly:
```
- #!extension ./MyExtension/bin/Debug/net8.0/MyExtension.dll
+ #!extension ./MyExtension/bin/Debug/net10.0/MyExtension.dll
```
The path is resolved relative to the notebook's directory, and a local assembly loads without a consent prompt.
@@ -82,7 +82,7 @@ You do not need to publish to a feed to try an extension you are building. Two o
- From the CLI, point any command at a directory of extension assemblies:
```bash
- verso serve notebook.verso --extensions ./MyExtension/bin/Debug/net8.0/
+ verso serve notebook.verso --extensions ./MyExtension/bin/Debug/net10.0/
```
The `--extensions` flag works on `serve`, `run`, `repl`, `convert`, and `export`. In VS Code, set the `verso.extensionsPath` setting to the same directory.
diff --git a/docs/showcase/overview.md b/docs/showcase/overview.md
index 6f8dc27d..02ff97fd 100644
--- a/docs/showcase/overview.md
+++ b/docs/showcase/overview.md
@@ -45,7 +45,7 @@ dotnet build samples/showcase/grid-studio/src/Verso.Showcase.GridStudio
Load the result into a notebook with a `#!extension` line naming the built assembly, then switch layouts. The path resolves relative to the notebook's folder:
```
-#!extension ./src/Verso.Showcase.GridStudio/bin/Debug/net8.0/Verso.Showcase.GridStudio.dll
+#!extension ./src/Verso.Showcase.GridStudio/bin/Debug/net10.0/Verso.Showcase.GridStudio.dll
```
This is the loop to work in if you are reading a sample in order to write your own layout: edit, build, reopen, look.
diff --git a/samples/cell-types/Verso.Sample.Diagram.Tests/Verso.Sample.Diagram.Tests.csproj b/samples/cell-types/Verso.Sample.Diagram.Tests/Verso.Sample.Diagram.Tests.csproj
index dbeaff0b..97b82f08 100644
--- a/samples/cell-types/Verso.Sample.Diagram.Tests/Verso.Sample.Diagram.Tests.csproj
+++ b/samples/cell-types/Verso.Sample.Diagram.Tests/Verso.Sample.Diagram.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/cell-types/Verso.Sample.Diagram/Verso.Sample.Diagram.csproj b/samples/cell-types/Verso.Sample.Diagram/Verso.Sample.Diagram.csproj
index 4b427801..37fccad5 100644
--- a/samples/cell-types/Verso.Sample.Diagram/Verso.Sample.Diagram.csproj
+++ b/samples/cell-types/Verso.Sample.Diagram/Verso.Sample.Diagram.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/extensions/Verso.Sample.Dice.Tests/Verso.Sample.Dice.Tests.csproj b/samples/extensions/Verso.Sample.Dice.Tests/Verso.Sample.Dice.Tests.csproj
index 676e53c2..708c66e2 100644
--- a/samples/extensions/Verso.Sample.Dice.Tests/Verso.Sample.Dice.Tests.csproj
+++ b/samples/extensions/Verso.Sample.Dice.Tests/Verso.Sample.Dice.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/extensions/Verso.Sample.Dice/Verso.Sample.Dice.csproj b/samples/extensions/Verso.Sample.Dice/Verso.Sample.Dice.csproj
index 63c433ca..2e15eaa1 100644
--- a/samples/extensions/Verso.Sample.Dice/Verso.Sample.Dice.csproj
+++ b/samples/extensions/Verso.Sample.Dice/Verso.Sample.Dice.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/kernels/Verso.Sample.Perl/Verso.Sample.Perl.csproj b/samples/kernels/Verso.Sample.Perl/Verso.Sample.Perl.csproj
index ece5bf9d..45d43ace 100644
--- a/samples/kernels/Verso.Sample.Perl/Verso.Sample.Perl.csproj
+++ b/samples/kernels/Verso.Sample.Perl/Verso.Sample.Perl.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/layouts/Verso.Sample.Slides.Tests/Verso.Sample.Slides.Tests.csproj b/samples/layouts/Verso.Sample.Slides.Tests/Verso.Sample.Slides.Tests.csproj
index 6e145235..b002048f 100644
--- a/samples/layouts/Verso.Sample.Slides.Tests/Verso.Sample.Slides.Tests.csproj
+++ b/samples/layouts/Verso.Sample.Slides.Tests/Verso.Sample.Slides.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/layouts/Verso.Sample.Slides/Verso.Sample.Slides.csproj b/samples/layouts/Verso.Sample.Slides/Verso.Sample.Slides.csproj
index bb3cbd86..c43ba3ab 100644
--- a/samples/layouts/Verso.Sample.Slides/Verso.Sample.Slides.csproj
+++ b/samples/layouts/Verso.Sample.Slides/Verso.Sample.Slides.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/layouts/Verso.Sample.Sparkline.Tests/Verso.Sample.Sparkline.Tests.csproj b/samples/layouts/Verso.Sample.Sparkline.Tests/Verso.Sample.Sparkline.Tests.csproj
index bdec21ec..be4f17ab 100644
--- a/samples/layouts/Verso.Sample.Sparkline.Tests/Verso.Sample.Sparkline.Tests.csproj
+++ b/samples/layouts/Verso.Sample.Sparkline.Tests/Verso.Sample.Sparkline.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/layouts/Verso.Sample.Sparkline/Verso.Sample.Sparkline.csproj b/samples/layouts/Verso.Sample.Sparkline/Verso.Sample.Sparkline.csproj
index 5c13ed98..3121705a 100644
--- a/samples/layouts/Verso.Sample.Sparkline/Verso.Sample.Sparkline.csproj
+++ b/samples/layouts/Verso.Sample.Sparkline/Verso.Sample.Sparkline.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
diff --git a/samples/notebooks/sql/sql-getting-started.verso b/samples/notebooks/sql/sql-getting-started.verso
index 592b6fd7..92321e5b 100644
--- a/samples/notebooks/sql/sql-getting-started.verso
+++ b/samples/notebooks/sql/sql-getting-started.verso
@@ -23,7 +23,7 @@
"id": "00000002-0001-0001-0001-000000000030",
"type": "code",
"language": "csharp",
- "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 8.0.8\u0022"
+ "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 10.0.14\u0022"
},
{
"id": "00000002-0001-0001-0001-000000000003",
diff --git a/samples/notebooks/sql/sql-intellisense-and-schema.verso b/samples/notebooks/sql/sql-intellisense-and-schema.verso
index ba90e965..49ed0f5b 100644
--- a/samples/notebooks/sql/sql-intellisense-and-schema.verso
+++ b/samples/notebooks/sql/sql-intellisense-and-schema.verso
@@ -23,7 +23,7 @@
"id": "10000001-0001-0001-0001-000000000003",
"type": "code",
"language": "csharp",
- "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 8.0.8\u0022"
+ "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 10.0.14\u0022"
},
{
"id": "10000001-0001-0001-0001-000000000004",
diff --git a/samples/notebooks/sql/sql-scaffold-ef-core.verso b/samples/notebooks/sql/sql-scaffold-ef-core.verso
index 70cb9b3f..666ecc4f 100644
--- a/samples/notebooks/sql/sql-scaffold-ef-core.verso
+++ b/samples/notebooks/sql/sql-scaffold-ef-core.verso
@@ -23,7 +23,7 @@
"id": "00000003-0001-0001-0001-000000000003",
"type": "code",
"language": "csharp",
- "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 8.0.8\u0022\n#r \u0022nuget: Microsoft.EntityFrameworkCore.Sqlite, 8.0.8\u0022"
+ "source": "#r \u0022nuget: Microsoft.Data.Sqlite, 10.0.14\u0022\n#r \u0022nuget: Microsoft.EntityFrameworkCore.Sqlite, 10.0.14\u0022"
},
{
"id": "00000003-0001-0001-0001-000000000004",
diff --git a/samples/showcase/dag-notebook/README.md b/samples/showcase/dag-notebook/README.md
index c7154c10..64178521 100644
--- a/samples/showcase/dag-notebook/README.md
+++ b/samples/showcase/dag-notebook/README.md
@@ -65,7 +65,7 @@ opens straight into the layout. You can also install it yourself from the **Exte
(search `Verso.Showcase`) and switch to **DAG Notebook** from the layout picker.
To run against a local build instead, load the freshly built assembly with
-`#!extension ./src/Verso.Showcase.DagNotebook/bin/Debug/net8.0/Verso.Showcase.DagNotebook.dll`
+`#!extension ./src/Verso.Showcase.DagNotebook/bin/Debug/net10.0/Verso.Showcase.DagNotebook.dll`
(the path resolves relative to the notebook's folder), then switch to **DAG Notebook**.
The demo notebook seeds a small pricing model: base inputs feed revenue, revenue feeds profit,
diff --git a/samples/showcase/dag-notebook/dag-notebook-widget.verso b/samples/showcase/dag-notebook/dag-notebook-widget.verso
index c515de94..518a2157 100644
--- a/samples/showcase/dag-notebook/dag-notebook-widget.verso
+++ b/samples/showcase/dag-notebook/dag-notebook-widget.verso
@@ -17,7 +17,7 @@
{
"id": "da610000-0001-4000-8000-000000000001",
"type": "markdown",
- "source": "# A control at the top of the graph\n\nThis notebook uses the **DAG Notebook** layout. Cells that share variables are linked with chips,\nand running a cell re-runs the cells that depend on it.\n\nA widget is the other way a value changes. A Python cell shares one of its widget's traits as a\nnotebook variable, which puts that variable at the top of the dependency graph with a control\nbehind it rather than a computation. Move the control and the cells below it run, in order,\nwithout anything being clicked.\n\nThe `↻` chip marks the variable that follows the control.\n\n**The re-running is the layout's doing, not the widget's.** `#!bind` shares the value in any\nlayout; it is this one that treats the control as a producer and runs what depends on it. If the\nheader above does not read **DAG Notebook** and the cells carry no chips, the layout is not\nactive and moving the slider will correctly do nothing. This notebook declares\n`Verso.Showcase.DagNotebook` as a required extension, so the host installs it from NuGet and\nopens straight into the layout; if it did not, pick **DAG Notebook** from the layout picker.\nTo run against a local build instead, load the freshly built assembly with a first cell reading\n`#!extension ./src/Verso.Showcase.DagNotebook/bin/Debug/net8.0/Verso.Showcase.DagNotebook.dll`,\nor start the host with `--extensions ./src/Verso.Showcase.DagNotebook/bin/Debug/net8.0`."
+ "source": "# A control at the top of the graph\n\nThis notebook uses the **DAG Notebook** layout. Cells that share variables are linked with chips,\nand running a cell re-runs the cells that depend on it.\n\nA widget is the other way a value changes. A Python cell shares one of its widget's traits as a\nnotebook variable, which puts that variable at the top of the dependency graph with a control\nbehind it rather than a computation. Move the control and the cells below it run, in order,\nwithout anything being clicked.\n\nThe `↻` chip marks the variable that follows the control.\n\n**The re-running is the layout's doing, not the widget's.** `#!bind` shares the value in any\nlayout; it is this one that treats the control as a producer and runs what depends on it. If the\nheader above does not read **DAG Notebook** and the cells carry no chips, the layout is not\nactive and moving the slider will correctly do nothing. This notebook declares\n`Verso.Showcase.DagNotebook` as a required extension, so the host installs it from NuGet and\nopens straight into the layout; if it did not, pick **DAG Notebook** from the layout picker.\nTo run against a local build instead, load the freshly built assembly with a first cell reading\n`#!extension ./src/Verso.Showcase.DagNotebook/bin/Debug/net10.0/Verso.Showcase.DagNotebook.dll`,\nor start the host with `--extensions ./src/Verso.Showcase.DagNotebook/bin/Debug/net10.0`."
},
{
"id": "da610000-0002-4000-8000-000000000002",
diff --git a/samples/showcase/form-studio/tests/Verso.Showcase.FormStudio.Tests/Verso.Showcase.FormStudio.Tests.csproj b/samples/showcase/form-studio/tests/Verso.Showcase.FormStudio.Tests/Verso.Showcase.FormStudio.Tests.csproj
index 4f3111f0..b5f2c011 100644
--- a/samples/showcase/form-studio/tests/Verso.Showcase.FormStudio.Tests/Verso.Showcase.FormStudio.Tests.csproj
+++ b/samples/showcase/form-studio/tests/Verso.Showcase.FormStudio.Tests/Verso.Showcase.FormStudio.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
12
enable
enable
diff --git a/samples/showcase/image-studio/README.md b/samples/showcase/image-studio/README.md
index 35b6b132..627e48dd 100644
--- a/samples/showcase/image-studio/README.md
+++ b/samples/showcase/image-studio/README.md
@@ -45,7 +45,7 @@ into the layout. You can also install it yourself from the **Extensions** pane (
`Verso.Showcase`) and switch to **Image Studio** from the layout picker.
To run against a local build instead, load the freshly built assembly with
-`#!extension ./src/Verso.Showcase.ImageStudio/bin/Debug/net8.0/Verso.Showcase.ImageStudio.dll`
+`#!extension ./src/Verso.Showcase.ImageStudio/bin/Debug/net10.0/Verso.Showcase.ImageStudio.dll`
(the path resolves relative to the notebook's folder), then switch to **Image Studio**.
You will land on a seeded composition: a sunset gradient, a soft sun, a dot grid, a procedural
diff --git a/samples/showcase/image-studio/tests/Verso.Showcase.ImageStudio.Tests/Verso.Showcase.ImageStudio.Tests.csproj b/samples/showcase/image-studio/tests/Verso.Showcase.ImageStudio.Tests/Verso.Showcase.ImageStudio.Tests.csproj
index 15e17072..51f80d4a 100644
--- a/samples/showcase/image-studio/tests/Verso.Showcase.ImageStudio.Tests/Verso.Showcase.ImageStudio.Tests.csproj
+++ b/samples/showcase/image-studio/tests/Verso.Showcase.ImageStudio.Tests/Verso.Showcase.ImageStudio.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
12
enable
enable
diff --git a/samples/showcase/slide-studio/README.md b/samples/showcase/slide-studio/README.md
index a9e3dad8..fa8580ae 100644
--- a/samples/showcase/slide-studio/README.md
+++ b/samples/showcase/slide-studio/README.md
@@ -91,7 +91,7 @@ opens straight into the layout. You can also install it yourself from the **Exte
(search `Verso.Showcase`) and switch to **Slide Studio** from the layout picker.
To run against a local build instead, load the freshly built assembly with
-`#!extension ./src/Verso.Showcase.SlideStudio/bin/Debug/net8.0/Verso.Showcase.SlideStudio.dll`
+`#!extension ./src/Verso.Showcase.SlideStudio/bin/Debug/net10.0/Verso.Showcase.SlideStudio.dll`
(the path resolves relative to the notebook's folder), then switch to **Slide Studio**.
The demo notebook is a small quarterly review deck: a title slide, a results table, a chart, a
diff --git a/samples/showcase/slide-studio/tests/Verso.Showcase.SlideStudio.Tests/Verso.Showcase.SlideStudio.Tests.csproj b/samples/showcase/slide-studio/tests/Verso.Showcase.SlideStudio.Tests/Verso.Showcase.SlideStudio.Tests.csproj
index fe7b9054..806507b3 100644
--- a/samples/showcase/slide-studio/tests/Verso.Showcase.SlideStudio.Tests/Verso.Showcase.SlideStudio.Tests.csproj
+++ b/samples/showcase/slide-studio/tests/Verso.Showcase.SlideStudio.Tests/Verso.Showcase.SlideStudio.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
12
enable
enable
diff --git a/src/Verso.Abstractions/Verso.Abstractions.csproj b/src/Verso.Abstractions/Verso.Abstractions.csproj
index 37291698..d37b08d2 100644
--- a/src/Verso.Abstractions/Verso.Abstractions.csproj
+++ b/src/Verso.Abstractions/Verso.Abstractions.csproj
@@ -11,8 +11,22 @@
Verso.Abstractions
Verso Abstractions
Pure interfaces and types for the Verso extensible notebook platform.
+
+ true
+ 1.2.3
+
+
+
+
+
diff --git a/src/Verso.Blazor.Shared/Verso.Blazor.Shared.csproj b/src/Verso.Blazor.Shared/Verso.Blazor.Shared.csproj
index 50649f31..b0ed689f 100644
--- a/src/Verso.Blazor.Shared/Verso.Blazor.Shared.csproj
+++ b/src/Verso.Blazor.Shared/Verso.Blazor.Shared.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
10
enable
enable
@@ -40,7 +40,7 @@