.NET implementation of the GhJSON specification for Grasshopper definition serialization.
GhJSON is a JSON-based format for representing Grasshopper definitions. This library provides:
- GhJSON.Core — Platform-independent document model and operations (read, write, validate, fix, merge, migrate)
- GhJSON.Grasshopper — Grasshopper integration (serialize from canvas, place on canvas, data type serializers, object handlers)
See the documentation index for detailed guides and architecture.
# Core library (platform-independent)
dotnet add package GhJSON.Core
# Grasshopper integration (requires Rhino 8+)
dotnet add package GhJSON.Grasshopperusing GhJSON.Core;
using GhJSON.Grasshopper;
// Serialize all objects from the active canvas
var document = GhJsonGrasshopper.Get();
string json = GhJson.ToJson(document);
// Or serialize only selected objects
var selected = GhJsonGrasshopper.GetSelected();using GhJSON.Core;
using GhJSON.Grasshopper;
// Parse JSON and place on the active canvas
var document = GhJson.FromJson(json);
var result = GhJsonGrasshopper.Put(document);using GhJSON.Core;
var result = GhJson.Validate(json);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
Console.WriteLine(error.Message);
}
}
// Or quick check
bool isValid = GhJson.IsValid(json);using GhJSON.Core;
using GhJSON.Core.SchemaModels;
var slider = new GhJsonComponent
{
Name = "Number Slider",
Id = 1,
Pivot = new GhJsonPivot(100, 100),
};
var doc = GhJson.CreateDocumentBuilder()
.AddComponent(slider)
.Build();See the GhJSON Specification or the ghjson-spec repo for the complete format definition.
{
"schema": "1.0",
"components": [
{
"name": "Number Slider",
"componentGuid": "57da07bd-ecab-415d-9d86-af36d7073abc",
"instanceGuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"id": 1,
"pivot": "100,200",
"componentState": {
"extensions": {
"gh.numberslider": {
"value": "5<0~10>"
}
}
}
}
],
"connections": []
}Apache-2.0
See CONTRIBUTING.md for guidelines.
- ghjson-spec — GhJSON format specification
- SmartHopper — AI-powered Grasshopper plugin (uses GhJSON)