A node type is a first-class citizen of the mesh: it is itself a MeshNode whose nodeType field is the literal "NodeType" and whose Content is a NodeTypeDefinition. This means you can browse it, query for it (nodeType:NodeType), version it, grant access on it, and open it in the navigator just like any other node.

A data node's nodeType field is the path to the type node that defines its shape. The Settings → Metadata panel links straight to it.

Node types are compiled on demand from Source/*.cs files. You never redeploy the portal to add or change one — the runtime compiles, caches, and versions the assembly for you. Source/*.cs C# record (content) Layout areas #r "nuget:…" NodeType JSON NodeTypeDefinition name, icon, CSV data… Runtime Compiler Roslyn compile cache + version no redeploy needed NodeType MeshNode nodeType: "NodeType" · Content: NodeTypeDefinition Typed Content C# record ↔ JSON Layout Areas C# views in Blazor Reference Data CSV seed + NuGet Data Nodes nodeType: path/to/type A node type lives in the mesh as a MeshNode, compiled on demand from its Source/*.cs files — no redeploy required. It gives every data node a typed content record, C# layout areas, and optional reference data.


What a Node Type Gives You

Capability What it means
Typed content A C# record you design; the mesh serializes it to JSON and back.
Layout areas Razor-free views declared in C# — rendered in the browser via Blazor.
Reference data CSV or inline data seeded into the graph at first creation.
Child types Nested node types that live under a parent (e.g. line items under an invoice).
NuGet packages #r "nuget:..." at the top of any Source/*.cs file — no redeploy, no SDK on the container.

Where to Start

The guides in this chapter are ordered by task. If you are new to node types, work through them in the order shown below.

Creating Node Types

The full walkthrough: Source/ folder layout, the content record, reference data, the NodeType JSON, CSV data, layout areas, and child types. Start here.

NodeType Configuration Reference

JSON schema reference for the NodeTypeDefinition object: every field, its type, and when to use it.

NodeType Compilation & Releases

The runtime lifecycle — how a compile is triggered, how to watch progress, how to cancel, where releases live, and how to pin an instance to a fixed release. Covers the verify-before-skip rules (including framework-version freezing) that decide when a recompile is required.

NuGet Packages

Pull in third-party libraries (Math.NET, Markdig, and more) by dropping a #r "nuget:..." directive at the top of any source file.

Calling Python

Compute a layout area's content in an external python3 process through the bounded Process I/O pool — reactive end to end, degrading gracefully when Python is absent.

A pandas node in Python

Connect a Python process to the mesh as a participant, load a CSV file kept in mesh content into a live pandas.DataFrame, control that object over the mesh, and render its state back as a real DataGridControl — GUI in C#, backend in Python.

A standalone hub in Python

Program a complete MeshWeaver hub in Python — its own address, message handlers, owned state — connect it to the mesh, load information from the mesh and save results back.

Fine-tuning an LLM on mesh content

Distill the documentation into a training dataset kept in mesh content, fine-tune a language model on it in Python, and stream training progress live back onto a mesh node.

Testing Node Types

Stand up a MonolithMeshTestBase test project against a samples directory, render layout areas against a real client, and assert on the streaming response.


Prerequisites

This chapter assumes familiarity with Data Modeling, Unified Path, and CRUD.


Live Example — Node Type as a Mesh Node

The snippet below shows what a query for node types looks like. Because every node type is a plain MeshNode, the same query API works for types and data alike.

MeshWeaver.Layout.Controls.Stack
    .WithView(MeshWeaver.Layout.Controls.Markdown(
        "**Node types are queryable like any other node.**\n\n" +
        "Try: `nodeType:NodeType` in the search bar — every type in the mesh appears as a result.\n\n" +
        "Each result row has a `nodeType` of `NodeType` and a `Content` of `NodeTypeDefinition`."
    ))
    .WithView(MeshWeaver.Layout.Controls.Markdown(
        $"_This cell rendered at {DateTime.Now:HH:mm:ss}._"
    ))
Reconnecting…
The server was updated. Reloading the page to pick up the latest version.