MeshWeaver 3.0.0
Support lifetime
MeshWeaver 3.x is based on .NET 10 LTS. Its support ends on November 14, 2028, matching Microsoft's published .NET 10 lifecycle. Official 3.x release artifacts are retained throughout that support period. See the Release Support Policy.
3.0.0 is the first clean release of the 3.x line. It ran as 3.0.0-rc1 through 3.0.0-rc13
between 2026-08-13 and 2026-08-31, and none of those was a release of this build: each candidate
was rebuilt on tagging rather than promoted, and SemVer sorts rc13 below rc2, so the last four
were invisible to anything that asked for "the newest". Both defects are gone: 3.0.0 is one
sealed continuous build, 3.0.0-ci.<n>, given its clean name, and there are no candidates any more
(details in Release Process & Versioning).
Everything below shipped as continuous builds and has been running on production portals for weeks. The day-by-day record — 837 entries since 2026-07-08, 668 of them fixes — is the What's New feed under Settings; this page is the map.
A release is a promotion
3.0.0 is the same bytes as one 3.0.0-ci.<n> build. Pushing the annotated tag resolves that
build's already-promoted, already-sealed image set, retags it with the clean version, copies the
release marker under that name, publishes this page as the GitHub Release, and opens the pull
request that moves the line to 3.1.0. Nothing is compiled twice, so what is released is exactly
what was tested, baked and sealed. NuGet publication is retired with the rc line: modules compile
against the platform image, never against a package feed.
- Release Process & Versioning · Release & Self-Update Strategy
- A release can no longer ship modules that disagree about the platform
- A module built once is not built again
The platform is modular
The AI engine, the view packs, approvals, import, mail, Teams, the MCP server, web search, course delivery, collaboration and the AKS update mechanics all left the platform image and ship as modules — installed and updated from the Store, carrying their own dependency closures, gated by the framework identity they were built against. A new installation arrives with the platform plugins already installed and granted; a plugin install brings its dependencies with it; a release states which packages it can carry and where their assemblies are.
- The built-in agents are a plugin now · Plugins can update themselves
- View packs load as modules · View packs update without waiting for the platform
- Modules install and update from the Store · Installing a plugin brings its dependencies with it
- New installations arrive with the plugins already installed · New installations get the platform plugins automatically
- A release now says which packages it can carry · A release says where its assemblies are
- Module lanes: Approvals, Excel and CSV import, Mail over Microsoft Graph, the Teams channel, the MCP server, web search, course delivery, comments and track changes, the AKS update mechanics, LinkedIn publishing, the mesh gRPC link
- Commercial plugins need a Global Admin, and orphaned install records can be removed · A plugin's paywall is now part of its type
Installations update, verify and describe themselves
Content is compiled once on CI and adopted at boot, so a platform update prepares in about a minute and no installation bakes at startup. An update waits for the packages it needs and, when it is held, says why. Every installation can state exactly what it runs, the header names the build serving you and when it was deployed, and a fresh install asks to be set up instead of assuming. Local installations consume the cloud registry, update from it, and arrive through Homebrew.
- Deployments start faster — content is compiled once on CI and reused · No startup bake anywhere · Every platform update now prepares in about a minute
- Updates now wait for the packages they need · A blocked update now tells you why · Updates recompile content only when the API actually changed
- An installation can now state exactly what it is running · The header names the build serving you · The header says when this build was deployed
- A fresh install now asks you to set it up · An installation asks before it registers · Instances get an identity, a licence and a setup app
- A local install consumes the cloud registry — and Homebrew delivers it · Local installs auto-update from the registry · A local portal serves every plugin repo you have checked out
- The licence lives on the instance, and every package fetch checks it · A registry grant can name a plan · The mesh trusts a build without holding a secret
- A platform release reaches plugin repositories through memex · The cluster can no longer hide configuration
Home, apps and navigation
The home is tabbed — apps on top, one content list, pins and spaces — with one search across it. Threads have their own app, apps can be arranged in groups, the Store opens with its categories, and your deployments appear in the mesh switcher. A click can open a thread beside the page, a suggested prompt is something you can run, and a page inside a package wears that package's mark.
- The tabbed home — apps, pins, and spaces · A home with apps on top and one content list · One search across your home tabs · Arrange your apps in groups
- The Threads app · A click can open a thread beside the page · A suggested prompt is now something you can run · Pages can point at the chat
- The Store opens with its categories · Your deployments appear in the mesh switcher · Official vendor logos on store cards
- The node menu groups related actions into sub-menus · Recycle is one click in the node menu · Delete by link — a single node or a whole query result · Moved pages keep their links working
- Presentation mode hides what you would rather not share · Every page shows its own icon · A page inside a package now wears that package's mark · Breadcrumb trail in the portal
- Menu wording and grouping can be changed without a release · Actions that run when you sign in
Documents, decks and collaboration
Select any text and comment on it; track changes come from the document's own history and the redline lives in the version comparison. Link previews render as cards, decks export exactly as they look, slide shows carry the whole deck, and a document can be shared as an email in your own name. GitHub sync is two-way and compares what you authored, not compile bookkeeping.
- Select text and comment — on any content · Track changes now come from the document's history · The redline moved to where you ask for it
- Link-preview cards in documents · Decks can now export exactly as they look · Slide shows can carry the whole deck at once · Instant slide navigation
- Share a document as an email, in your own name · Standard analysis views ship as controls · Maps become provider-neutral with OpenStreetMap and Apple MapKit providers
- Two-way GitHub sync — your edits are kept · GitHub sync now compares what you authored · GitSync updates recompile what they change
- Course videos now ship with the course · The course index now shows the whole course and marks where you are
Language services for NodeType authoring
Roslyn-backed language services run over every NodeType's live compilation and drive three
surfaces from one backend: the Coder agent's Lsp plugin (LspCheckNode, LspDiagnosticsForNode,
LspHoverForNode, LspCompletionsForNode), the same four tools on the MCP server for Claude Code
and any other MCP client, and live squiggles in the portal's Monaco editor. LspCheckNode is a
full-substitution pre-flight: it rebuilds the whole source set with the proposed file in place, so
cross-file breakage is caught before a commit, and #r "nuget:…" directives resolve through the
same resolver the production compile uses.
Around it: a page waiting on a compile shows live progress, a compile reports what it costs per type, rebuilds scope to what a type actually uses, a sync or install no longer reverts a type's compile state, and a node type can say where its instances live.
- A page waiting on a compile now shows live progress · What a NodeType compile costs, per type · Rebuilds scope to what a type actually uses
- A sync or install no longer reverts a type's compile state · A node type can now say where its instances live · Why a green build does not mean your node types still compile
- Builds are coordinated by nodes, not by lease files · Builds can run in their own disposable process · The compiler is its own assembly
AI
Models are picked by what they are for and Auto is the default; agents keep working files in the mesh and load their guidance on demand; Claude Code and GitHub Copilot are opt-in per user; OpenRouter threads cache their prompts and the token counter counts cached tokens.
- Models are picked by what they are for — and Auto is the new default · Auto picks the right model for the job
- Agents can keep working files, and they live in the mesh · Agent guidance loads on demand
- Claude Code and GitHub Copilot are now opt-in per user · OpenRouter threads now cache their prompts · Token counter now counts cached tokens
- Send feedback right from chat with /feedback · New /thread skill · AI models now show their provider's logo
The portal speaks German
Every platform string ships in English and German, on the Blazor portal and on the web and mobile clients alike, and you choose your language when you sign up. Authored content renders as authored; platform chrome inside it follows the viewer.
- The portal speaks German · The web and mobile clients speak German, and render everything the portal renders · Choose your language when you sign up
Clients
The React frontend looks and works like the portal, the new home is on React, React Native and Next.js, the portal can run as Blazor, the Next shell, or both, mobile deployments are configurable, and your browser tabs tell themselves apart.
- The React frontend looks and works like the portal · The new home on the React, React Native and Next.js clients
- Choose your portal: Blazor, the new Next shell, or both · Configurable mobile-app deployments · The mobile app keeps its mesh list in your local mesh
- Your browser tabs tell themselves apart · UI extensibility guide, for every renderer
Data and storage
A Snowflake storage backend joins Postgres; many nodes are created in one round-trip and plugin installs land their nodes in bulk; durable streams are mesh nodes; long activity logs stay fast, old notifications clear themselves away, and interactive kernels release their memory.
- Snowflake storage backend · One round-trip to create many nodes · Plugin installs are minutes faster — nodes now land in bulk
- Durable streams are mesh nodes · Long activity logs stay fast · Old notifications now clear themselves away · Interactive kernels now release their memory
Operating a deployment
Errors in production open their own tickets; imports and startup builds report what they cost; each environment declares what it carries; a deployment can be checked for currency from inside or outside; admins enroll a user in one step; and there is a playbook for host crashes.
- Errors in production open their own tickets · Imports and startup builds report what they cost · Frame-loss lines in the log are a recovery counter
- Each environment declares what it carries · Checking that a deployment is up to date, from inside or outside · Instance keys rotate through the Hosting operator
- Admins can enroll a user in one step · Coupons administration tab · Invite a whole list of emails to a group · See at a glance what is public
- A playbook for host crashes · A guide for standing up a new repository · What's New now covers every repository
Security
Every release is scanned with OWASP ZAP against the deployment serving the candidate build, in
two runs — a public active scan and an authenticated passive baseline — and the tag is pushed
only after every finding has a disposition (OWASP ZAP Scan — Every Release).
For 3.0.0, scanned on 2026-09-06: the public run reads FAIL-NEW: 0 · WARN-NEW: 5 · PASS: 136
and the authenticated run FAIL-NEW: 0 · WARN-NEW: 9 · PASS: 58. The one Medium finding unique
to the signed-in portal — a DOMPurify with published cross-site-scripting advisories inside the
code editor's bundle — is fixed on this line: the portal builds its own Monaco editor with a
current sanitiser and a guard test keeps it there. Every other warning has a measured disposition
on that page: two are false positives (the icon route synthesises an icon for any name; TRACE
and OPTIONS answer 405), two more leave with the old editor loader, and the content-security
policy and the cross-origin headers are carried by design, with the reasons written beside them.
- The full 3.0.0 scan report — attack classes exercised, the delta against the 23 August scan, live header verification, CORS posture, limitations, and the raw verdict output.
- Every release is scanned with OWASP ZAP · the editor fix itself ships from MeshWeaver.Plugins and appears in the What's New feed from there
- Unanchored security reads · Access control
How the platform itself is built
Core main merges through a merge queue with a steward; a platform change runs the plugin suites
before it merges; a change that spans two repositories lands in the right order; a rule shared
between repositories can no longer drift apart unnoticed; and the test tree holds zero hand-woven
concurrency gates.
- The merge queue runs itself · A platform change now runs the plugin suites before it merges · A change that spans two repositories now lands in the right order
- A rule shared between repos can no longer drift apart unnoticed · The test tree holds zero hand-woven concurrency gates · Hand-woven concurrency gates cannot come back
Upgrading from a 3.0.0-rc build
- Nothing to do for a running installation. The clean
3.0.0sorts above every3.0.0-rc*build, so a Continuous install rolls forward onto it on its own, and a Stable install takes it as its first release. After it, the line moves to3.1.0-ci.<n>and continuous rolling resumes. Module bundles are keyed by framework identity and re-baked per set, so nothing an install adopts changes with the name. - Module floors are satisfied. A module declaring
minMeshVersion: 3.0.0-rc8(or any3.0.0-*) runs on3.0.0; the floor is judged as a regression check, never absolutely (Release gates). - NuGet is retired. The last packages on nuget.org are
3.0.0-rc13for the framework and3.0.0-rc7forMeshWeaver.Hosting.PostgreSql,MeshWeaver.AIandMeshWeaver.Blazor, which moved to MeshWeaver.Plugins and ship as bundles. Nothing in the fleet restores them; they stay listed as history. Build a module against the platform image (Plugin packaging). - Deck and slide types live in the Publish package, the AI engine in MeshWeaver.Plugins, the view packs, maps and collaboration in their modules — an installation that had them installed keeps them; one that did not installs them from the Store.
Fixes
668 fixes shipped on this line, bundled by day in the What's New feed. The classes that recur are worth naming because each now has a guard: hand-woven concurrency gates and async bridges on the actor model (the test tree holds zero and cannot regain one), writes that ran as the hub instead of the user (every write primitive carries the caller's access context), point reads of nodes that may not exist yet (the storm-breaker no longer suppresses the write it is waiting for), and builds that produced two copies of one module for one identity (a release can no longer ship modules that disagree).