diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 491b37b..0e11697 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -35,7 +35,6 @@ jobs:
dotnet restore src/Matplotlib.Interactive/Matplotlib.Interactive.fsproj
dotnet restore src/Matplotlib.Mcp/Matplotlib.Mcp.fsproj
dotnet restore src/Matplotlib.DataFrame/Matplotlib.DataFrame.fsproj
- dotnet restore src/Matplotlib.Reports/Matplotlib.Reports.fsproj
# pack builds and packs in one step. We do NOT pass --no-build: the
# single-package bundling target (CopyProjectReferencesToPackage) resolves
@@ -49,7 +48,6 @@ jobs:
dotnet pack src/Matplotlib.Interactive/Matplotlib.Interactive.fsproj -c Release --no-restore --output . -p:Version=$VERSION
dotnet pack src/Matplotlib.Mcp/Matplotlib.Mcp.fsproj -c Release --no-restore --output . -p:Version=$VERSION
dotnet pack src/Matplotlib.DataFrame/Matplotlib.DataFrame.fsproj -c Release --no-restore --output . -p:Version=$VERSION
- dotnet pack src/Matplotlib.Reports/Matplotlib.Reports.fsproj -c Release --no-restore --output . -p:Version=$VERSION
- name: Push to nuget.org
env:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0b58ff1..7d22752 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,14 @@ may contain breaking changes.
actively-developed successor to the now-deprecated .NET Interactive / Polyglot
Notebooks ([#1](https://github.com/gnrkr789/dotnet-matplotlib/issues/1)).
+### Changed
+
+- **Folded `DotnetMatplotlib.Reports` into the core `DotnetMatplotlib` package.** The
+ `Report` type (namespace `Matplotlib.Reports`) needs nothing beyond the core library,
+ so it no longer ships as a separate package — trimming the published set to four.
+ **Migration:** drop the `DotnetMatplotlib.Reports` package reference; `Report` now
+ comes from `DotnetMatplotlib`, and `open Matplotlib.Reports` is unchanged.
+
## [0.0.9] — 2026-06-20
### Changed — ⚠️ BREAKING
diff --git a/DotnetMatplotlib.slnx b/DotnetMatplotlib.slnx
index 3e3d794..899294a 100644
--- a/DotnetMatplotlib.slnx
+++ b/DotnetMatplotlib.slnx
@@ -9,7 +9,6 @@
-
diff --git a/PORTING.md b/PORTING.md
index 362017a..5ac0157 100644
--- a/PORTING.md
+++ b/PORTING.md
@@ -76,7 +76,7 @@ and is not part of this repository (it is git-ignored).
| 2026-06-06 | 27 | Model Context Protocol server (new capability) | `Matplotlib.Mcp` (.NET tool `DotnetMatplotlib.Mcp`, command `matplotlib-mcp`) | MCP server exposing `plot_line`/`scatter`/`bar`/`heatmap` tools that render to PNG/SVG/PDF for AI agents (`ModelContextProtocol` SDK, stdio transport) |
| 2026-06-06 | 28 | Browser rendering (Blazor WebAssembly) | `samples/BlazorDemo` | the pure-managed library runs in the browser via .NET WASM, rendering plots as inline SVG with no JS/native deps; implicit FSharp.Core floor lowered to 8.0.400 to avoid consumer NU1605 downgrades |
| 2026-06-07 | 29 | `pandas.DataFrame.plot` | `Matplotlib.DataFrame` (package `DotnetMatplotlib.DataFrame`) | `Microsoft.Data.Analysis.DataFrame` extension methods `PlotLine`/`PlotScatter`/`PlotBar`/`PlotHist` returning a `Plt`; usable from C# and F# |
-| 2026-06-07 | 30 | server-side reporting (new capability) | `Matplotlib.Reports` (package `DotnetMatplotlib.Reports`) | composable multi-panel `Report` → SVG/PNG/PDF; pure-managed with zero native dependencies, deterministic byte-reproducible vector output, and a `Sha256()` fingerprint for audit/compliance |
+| 2026-06-07 | 30 | server-side reporting (new capability) | `Matplotlib/Report` (in the core `DotnetMatplotlib` package) | composable multi-panel `Report` → SVG/PNG/PDF; pure-managed with zero native dependencies, deterministic byte-reproducible vector output, and a `Sha256()` fingerprint for audit/compliance. Originally a separate `DotnetMatplotlib.Reports` package, since folded into core (no extra dependencies) |
| 2026-06-15 | 30 | accuracy corrections (`colors.Colormap.__call__`, `_cm._jet_data`/`_hot_data`, `ticker.AutoMinorLocator`, mpl2014 contour saddles, `mlab.GaussianKDE`, `axes.scatter` `s`, `markers._set_star`, `colors.to_rgba` `CN`) | `Primitives/{Colormap,ColorResolver}`, `Domain/Axes` (`minorTicks`, `marchingSquares`, `Violinplot`, `Scatter`), `Artists/Line2D` | colormap sampling now matches matplotlib's quantized `int(t·N)` flat lookup (no neighbour blending); `jet`/`hot` rebuilt from the exact per-channel `_jet_data`/`_hot_data` segments; `AutoMinorLocator` subdivisions use `round(mantissa) ∈ {1,5,10}`; contour saddle cells (5/10) disambiguated by the cell-centre mean; violin KDE uses Scott's factor with sample variance (ddof = 1) over a 100-point grid; `scatter` `s` is now a points² area (diameter = √s, default 36); star marker inner-radius ratio 0.381966; only the uppercase `CN` cycle form resolves to the property cycle (`'c'` stays cyan) |
| 2026-06-15 | 31 | completing partial plot ports (`axes.scatter` `c`/`cmap`/array-`s`, `axes.hist`, `axes.errorbar` `capsize`, `axes.fill_betweenx`) | `Domain/Axes` (`Scatter`, `Hist`, `Errorbar`, `FillBetweenx`), `Artists/Line2D` (per-point `MarkerColors`/`MarkerSizes`), `Matplotlib/Plt`, `samples/Gallery` | `scatter` maps a numeric `c` array through a colormap + `Normalize` (default viridis) to per-point colors and accepts a per-point `sizes` array (areas → √ diameters); 1-D `hist` (equal-width bins, `range`, `density`, edge-aligned bars on a sticky baseline) returning heights + edges; `errorbar` renders caps as `_`/`|` markers sized by `capsize`; `fill_betweenx` mirrors `fill_between`; Gallery renders demos for each (`scatter_colormap`/`hist`/`fill_betweenx`/`colormaps`/`errorbar` PNGs) |
| 2026-06-15 | 32 | new chart types & axis control (`axes.stackplot`, `vlines`/`hlines`, `pie`, `set_aspect('equal')`, `axis('off')`) | `Domain/Axes` (`Stackplot`, `Vlines`, `Hlines`, `Pie`, `SetAspect`, `SetAxisOff`, `YTicksVisible`, equal-aspect in `BuildContext`), `Matplotlib/Plt` (`Axis`), `samples/Gallery` | stacked cumulative areas; vertical/horizontal line segments; `pie` wedges (flattened polygon arcs) with white separators; `set_aspect('equal')` shrinks the axes box to equal pixels-per-(scaled)-unit (adjustable='box', default `auto` unchanged), so `pie` is round; `axis('off')` hides ticks + spines; Gallery `stackplot`/`vlines`/`pie` PNGs |
diff --git a/README.md b/README.md
index bd719de..ab8e161 100644
--- a/README.md
+++ b/README.md
@@ -166,9 +166,10 @@ title or choose the output format. The same extension methods work from C#.
## Reports (server-side, deterministic)
-`DotnetMatplotlib.Reports` composes multi-panel reports — a grid of titled charts
-under a report title — and renders them to SVG / PNG / PDF. It is built for
-server-side and regulated / cloud-native use:
+The core `DotnetMatplotlib` package includes a `Report` type (namespace
+`Matplotlib.Reports`) that composes multi-panel reports — a grid of titled charts under a
+report title — and renders them to SVG / PNG / PDF. Built for server-side and regulated /
+cloud-native use:
- **Pure-managed, zero native dependencies** — it builds and runs on Linux (the
CI builds and tests it there) and needs no UI or native graphics components.
@@ -177,10 +178,6 @@ server-side and regulated / cloud-native use:
vector output, so a report can be checksummed (`report.Sha256()`) for audit
trails, change detection and compliance.
-```bash
-dotnet add package DotnetMatplotlib.Reports
-```
-
```fsharp
open Matplotlib.Reports
diff --git a/nuget/README.md b/nuget/README.md
index 67973e4..9740d00 100644
--- a/nuget/README.md
+++ b/nuget/README.md
@@ -78,10 +78,11 @@ package as an extension. For legacy .NET Interactive / Polyglot, add
## Reports (server-side, deterministic)
-`DotnetMatplotlib.Reports` composes multi-panel SVG/PNG/PDF reports for
-server-side use: pure-managed with zero native dependencies (builds and tests on
-Linux; SVG and PDF need no system fonts) and **byte-reproducible** output that can
-be checksummed (`report.Sha256()`) for audit and compliance.
+The core package includes a `Report` type (`open Matplotlib.Reports`) that composes
+multi-panel SVG/PNG/PDF reports for server-side use: pure-managed with zero native
+dependencies (builds and tests on Linux; SVG and PDF need no system fonts) and
+**byte-reproducible** output that can be checksummed (`report.Sha256()`) for audit and
+compliance.
## AI agents (MCP)
diff --git a/src/Matplotlib.Reports/Matplotlib.Reports.fsproj b/src/Matplotlib.Reports/Matplotlib.Reports.fsproj
deleted file mode 100644
index 343ff0e..0000000
--- a/src/Matplotlib.Reports/Matplotlib.Reports.fsproj
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- Matplotlib.Reports
- Matplotlib.Reports
- DotnetMatplotlib.Reports
- A deterministic, dependency-free server-side reporting engine for DotnetMatplotlib: compose multi-panel SVG/PNG/PDF reports with byte-reproducible output for audit and compliance. Pure-managed with zero native dependencies.
- matplotlib;reporting;pdf;charts;deterministic;compliance;fsharp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Matplotlib/Matplotlib.fsproj b/src/Matplotlib/Matplotlib.fsproj
index 15f154a..f5fe533 100644
--- a/src/Matplotlib/Matplotlib.fsproj
+++ b/src/Matplotlib/Matplotlib.fsproj
@@ -14,6 +14,7 @@
+
diff --git a/src/Matplotlib.Reports/Report.fs b/src/Matplotlib/Report.fs
similarity index 100%
rename from src/Matplotlib.Reports/Report.fs
rename to src/Matplotlib/Report.fs
diff --git a/tests/Matplotlib.Tests/Matplotlib.Tests.fsproj b/tests/Matplotlib.Tests/Matplotlib.Tests.fsproj
index ae0fbbb..badf9fb 100644
--- a/tests/Matplotlib.Tests/Matplotlib.Tests.fsproj
+++ b/tests/Matplotlib.Tests/Matplotlib.Tests.fsproj
@@ -57,7 +57,6 @@
-