diff --git a/docs/assets/aspnet/project.zip b/docs/assets/aspnet/project.zip
index 2a296c2..58f08a2 100644
Binary files a/docs/assets/aspnet/project.zip and b/docs/assets/aspnet/project.zip differ
diff --git a/docs/assets/aspnet/source.json b/docs/assets/aspnet/source.json
index 0a48e59..12935ed 100644
--- a/docs/assets/aspnet/source.json
+++ b/docs/assets/aspnet/source.json
@@ -2,8 +2,8 @@
"source": "https://github.com/fullbleed-engine/docs/tree/main/examples/aspnet",
"framework": "net10.0",
"package": "FullBleed.DotNet",
- "packageVersion": "0.1.5",
- "projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
+ "packageVersion": "0.1.6",
+ "projectZipSha256": "d1ae5a403f64f1d9c1037d63c90f4b3eac55762af7a7d83ceca529c7e542fa4a",
"files": [
{
"path": "Assets/fonts/BebasNeue-OFL.txt",
@@ -63,7 +63,7 @@
{
"path": "FullbleedWeb.csproj",
"bytes": 534,
- "sha256": "2bc53bcbbc531d70bd1c1807b79cb45802963897f062994b50b401d7ae31e6c7"
+ "sha256": "e8be83f61609d89459784ccb714a9f69770114da888cac266284d03f193ae23a"
},
{
"path": "InvoiceRenderer.cs",
@@ -83,7 +83,7 @@
{
"path": "README.md",
"bytes": 2460,
- "sha256": "b03e0964a7fe57921a94729b0b7b3b304fa3bbeb623be4956345141c647921a6"
+ "sha256": "8ba0734422df2353c8d0ed692877bcff9d34a562e3601454d810c988c860a42c"
},
{
"path": "global.json",
@@ -93,7 +93,7 @@
{
"path": "packages.lock.json",
"bytes": 305,
- "sha256": "afc891b007fd4475a4bd71b62f8942e930e9c15d0c54145e249ab6dd0597b35c"
+ "sha256": "7b946040ffcf764a043bde1bac3b28cf40bb758b4f983ba99a809acaa377868b"
}
],
"outputs": {
diff --git a/docs/assets/aspnet/verification.json b/docs/assets/aspnet/verification.json
index 10dad45..4791ff4 100644
--- a/docs/assets/aspnet/verification.json
+++ b/docs/assets/aspnet/verification.json
@@ -1,16 +1,16 @@
{
"ok": true,
- "checkedAt": "2026-10-06T18:50:48.109029+00:00",
+ "checkedAt": "2026-10-07T03:17:42.756735+00:00",
"platform": "Windows",
"architecture": "AMD64",
"runtime": "10.0.12",
"framework": "net10.0",
"package": "FullBleed.DotNet",
- "packageVersion": "0.1.5",
- "engineVersion": "2.5.10",
- "packageSha256": "9ef3696b303c82679e4cb0ad4f0ab2da9d0c10f7f73283fd443f49dd8d459eef",
+ "packageVersion": "0.1.6",
+ "engineVersion": "2.5.11",
+ "packageSha256": "eff0aec8678dc2b974c8bd9f1a98cba5e4583f0d67e84ab1f9ae70b4b40c848d",
"freshNuGetCache": true,
- "projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
+ "projectZipSha256": "d1ae5a403f64f1d9c1037d63c90f4b3eac55762af7a7d83ceca529c7e542fa4a",
"pdfSha256": "6f898f935a5491572e5b6222428cc861c8d131694a73c441036e8545f477367f",
"previewSha256": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7",
"commands": [
diff --git a/docs/getting-started/dotnet.md b/docs/getting-started/dotnet.md
index 31827f2..daf3f58 100644
--- a/docs/getting-started/dotnet.md
+++ b/docs/getting-started/dotnet.md
@@ -4,7 +4,7 @@ description: Install FullBleed.DotNet from NuGet, render a PDF from C#, and run
---
# Generate PDFs from C# and .NET
-[`FullBleed.DotNet`](https://www.nuget.org/packages/FullBleed.DotNet/0.1.5)
+[`FullBleed.DotNet`](https://www.nuget.org/packages/FullBleed.DotNet/0.1.6)
brings Fullbleed's Rust rendering engine into a .NET process. Use static HTML
and CSS to create invoices, reports, and variable-data documents. Native
rendering needs neither Python nor a browser.
@@ -16,7 +16,7 @@ With the .NET 10 SDK installed:
```bash
dotnet new console -n InvoiceDemo --framework net10.0
cd InvoiceDemo
-dotnet add package FullBleed.DotNet --version 0.1.5
+dotnet add package FullBleed.DotNet --version 0.1.6
```
Replace `Program.cs` with:
@@ -40,14 +40,14 @@ Console.WriteLine($"Created invoice.pdf: {inspection.PageCount} page(s).");
Run `dotnet run` and open `invoice.pdf` in the project directory. You can also
return the bytes from an HTTP handler or write them to your own storage.
-The first example uses standard PDF fonts. Register explicit font files for
-your document's typography, character coverage, and portable PNG previews.
-Native previews of unembedded standard fonts use host-font fallbacks and can
-vary between machines; the designed example below embeds its fonts.
+The first example uses standard PDF fonts. Their PNG previews now use bundled
+outline substitutes, so they work without system fonts. Register explicit font
+files for your chosen type design and character coverage; the designed example
+below embeds its fonts.
The package's managed library targets `net8.0`; your application can target
`net8.0`, `net9.0`, or `net10.0`. It contains native libraries for Windows x64,
-Linux x64, Intel macOS, and Apple Silicon macOS. It pins Fullbleed 2.5.10.
+Linux x64, Intel macOS, and Apple Silicon macOS. It pins Fullbleed 2.5.11.
The managed assembly has no third-party NuGet runtime dependencies.
Use .NET 10 LTS for a new application. Microsoft lists November 10, 2026 as
@@ -58,6 +58,14 @@ The [package verification workflow](https://github.com/fullbleed-engine/fullblee
checks the actual runtime and compares fixture PDFs and previews across all
three .NET versions and the four native platforms.
+Version 0.1.6 also checks 52 font fixtures across those twelve consumers:
+Helvetica, Times and Courier in their regular/bold/italic variants, plus an
+embedded-font control, through ordinary and compiled rendering. A separate
+Linux check hides system fonts and rejects the blank previews from public
+0.1.5. The corrected previews retain the same PDF bytes and embedded-font
+controls. These checks cover the retained fixtures, not every font or document.
+[Inspect the 0.1.6 evidence](https://github.com/fullbleed-engine/fullbleed-dotnet/releases/tag/v0.1.6).
+
## Run a designed invoice
The Northstar sample combines explicit fonts, CSS grid, tables, print
@@ -147,8 +155,8 @@ For a web application, download the [ASP.NET Core PDF starter](../guides/aspnet-
It includes a download page, styled invoice, private responses, and checks against
the published application artifact.
-[.NET API reference](https://github.com/fullbleed-engine/fullbleed-dotnet/blob/v0.1.5/docs/api.md)
-· [LINQ and variable-data example](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.5/samples/FullBleed.DotNet.LinqVdp)
+[.NET API reference](https://github.com/fullbleed-engine/fullbleed-dotnet/blob/v0.1.6/docs/api.md)
+· [LINQ and variable-data example](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.6/samples/FullBleed.DotNet.LinqVdp)
· [CSS coverage](../css-coverage.md)
· [More document designs](../examples.md)
· [Report a .NET issue](https://github.com/fullbleed-engine/fullbleed-dotnet/issues)
diff --git a/docs/guides/aspnet-pdf.md b/docs/guides/aspnet-pdf.md
index 39c7375..061ecd7 100644
--- a/docs/guides/aspnet-pdf.md
+++ b/docs/guides/aspnet-pdf.md
@@ -31,8 +31,8 @@ dotnet run -c Release --no-restore -- --urls http://127.0.0.1:5080
Open `http://127.0.0.1:5080` and choose **Download sample PDF**. The browser
downloads `invoice-NS-1042.pdf` from `/invoices/NS-1042/pdf` and stays on the page.
-The lockfile pins the public `FullBleed.DotNet` **0.1.5** package, which contains
-engine **2.5.10**. For a console app or the broader native API, use the
+The lockfile pins the public `FullBleed.DotNet` **0.1.6** package, which contains
+engine **2.5.11**. For a console app or the broader native API, use the
[C# and .NET quickstart](../getting-started/dotnet.md).
## Return PDF bytes as an attachment
diff --git a/docs/index.md b/docs/index.md
index cc1d564..485fefb 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -188,7 +188,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro
```bash
dotnet new console -n InvoiceDemo --framework net10.0
cd InvoiceDemo
- dotnet add package FullBleed.DotNet --version 0.1.5
+ dotnet add package FullBleed.DotNet --version 0.1.6
```
Replace `Program.cs` with:
@@ -218,7 +218,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro
Open `invoice.pdf`. This first example uses standard PDF fonts. Existing .NET 8 and 9 applications can use the same package; see the guide for platform support and explicit fonts.
- [C# and .NET quickstart →](getting-started/dotnet.md) · [LINQ and variable data](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.5/samples/FullBleed.DotNet.LinqVdp)
+ [C# and .NET quickstart →](getting-started/dotnet.md) · [LINQ and variable data](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.6/samples/FullBleed.DotNet.LinqVdp)
## Pick a document to build
diff --git a/examples/aspnet/FullbleedWeb.csproj b/examples/aspnet/FullbleedWeb.csproj
index b9937c4..c282dbc 100644
--- a/examples/aspnet/FullbleedWeb.csproj
+++ b/examples/aspnet/FullbleedWeb.csproj
@@ -7,7 +7,7 @@
true
-
+
diff --git a/examples/aspnet/README.md b/examples/aspnet/README.md
index d46b7c2..4d7f5e2 100644
--- a/examples/aspnet/README.md
+++ b/examples/aspnet/README.md
@@ -1,6 +1,6 @@
# Fullbleed PDF downloads in ASP.NET Core
-A .NET 10 Minimal API that generates a fictional Northstar invoice from bundled HTML, CSS, and fonts. Uses the public `FullBleed.DotNet` 0.1.5 NuGet package (engine 2.5.10).
+A .NET 10 Minimal API that generates a fictional Northstar invoice from bundled HTML, CSS, and fonts. Uses the public `FullBleed.DotNet` 0.1.6 NuGet package (engine 2.5.11).
```sh
dotnet restore --locked-mode
diff --git a/examples/aspnet/packages.lock.json b/examples/aspnet/packages.lock.json
index 88949e7..31175f2 100644
--- a/examples/aspnet/packages.lock.json
+++ b/examples/aspnet/packages.lock.json
@@ -4,9 +4,9 @@
"net10.0": {
"FullBleed.DotNet": {
"type": "Direct",
- "requested": "[0.1.5, )",
- "resolved": "0.1.5",
- "contentHash": "JQenfVuPx1Tn5O8fZIz28rRFobP/51LPH5N1ROdZfnrVMeBZA47W2moSUwYtn63p1qfrGLElQlxckXKQw7CKRg=="
+ "requested": "[0.1.6, )",
+ "resolved": "0.1.6",
+ "contentHash": "aw/XplkgXTk62YDDg6yVK5XxS42Y490NszRch9DGCnjC5i/+tQV2QEMAFXyCACcBmQhqN7y/0c3cM7s0aWH2Xg=="
}
}
}
diff --git a/examples/dotnet/NorthstarInvoice.csproj b/examples/dotnet/NorthstarInvoice.csproj
index 68740d3..1204779 100644
--- a/examples/dotnet/NorthstarInvoice.csproj
+++ b/examples/dotnet/NorthstarInvoice.csproj
@@ -7,7 +7,7 @@
enable
-
+
diff --git a/tools/build_aspnet_starter.py b/tools/build_aspnet_starter.py
index e9edbd3..24b9938 100644
--- a/tools/build_aspnet_starter.py
+++ b/tools/build_aspnet_starter.py
@@ -39,7 +39,7 @@ def build():
(ASSETS / "project.zip").write_bytes(archive)
manifest = {
"source": "https://github.com/fullbleed-engine/docs/tree/main/examples/aspnet",
- "framework": "net10.0", "package": "FullBleed.DotNet", "packageVersion": "0.1.5",
+ "framework": "net10.0", "package": "FullBleed.DotNet", "packageVersion": "0.1.6",
"projectZipSha256": digest(archive),
"files": [{"path": name, "bytes": len(data), "sha256": digest(data)} for name, data in files.items()],
"outputs": {name: digest((ASSETS / name).read_bytes()) for name in ["invoice.pdf", "invoice.png"]},
diff --git a/tools/verify_aspnet_starter.py b/tools/verify_aspnet_starter.py
index b7239ed..4fb96e9 100644
--- a/tools/verify_aspnet_starter.py
+++ b/tools/verify_aspnet_starter.py
@@ -193,7 +193,7 @@ def concurrent_request(_):
package = installed / f"fullbleed.dotnet.{version}.nupkg"
provenance = json.loads((installed / "native-provenance.json").read_text(encoding="utf-8"))
engine = next(item for item in provenance["dependencies"] if item["name"] == "fullbleed")
-assert version == "0.1.5" and engine["version"] == "2.5.10"
+assert version == "0.1.6" and engine["version"] == "2.5.11"
report = {
"ok": True, "checkedAt": datetime.now(timezone.utc).isoformat(),
"platform": platform.system(), "architecture": platform.machine(),