Toon.Format
1.0.0
Prefix Reserved
dotnet add package Toon.Format --version 1.0.0
NuGet\Install-Package Toon.Format -Version 1.0.0
<PackageReference Include="Toon.Format" Version="1.0.0" />
<PackageVersion Include="Toon.Format" Version="1.0.0" />
<PackageReference Include="Toon.Format" />
paket add Toon.Format --version 1.0.0
#r "nuget: Toon.Format, 1.0.0"
#:package Toon.Format@1.0.0
#addin nuget:?package=Toon.Format&version=1.0.0
#tool nuget:?package=Toon.Format&version=1.0.0
TOON for .NET
Encodes .NET values to TOON (Token-Oriented Object Notation) and decodes TOON back. TOON is a compact, indentation-based encoding of the JSON data model for LLM input.
Installation
dotnet add package Toon.Format
Usage
using Toon.Format;
var data = new
{
users = new[]
{
new { id = 1, name = "Ada", role = "admin" },
new { id = 2, name = "Bob", role = "user" }
}
};
string toon = ToonEncoder.Encode(data);
// users[2]{id,name,role}:
// 1,Ada,admin
// 2,Bob,user
var node = ToonDecoder.Decode(toon);
// {"users":[{"id":1,"name":"Ada","role":"admin"},{"id":2,"name":"Bob","role":"user"}]}
ToonDecoder.Decode returns a JsonNode; ToonDecoder.Decode<T> deserializes into T through System.Text.Json. Pass a ToonEncodeOptions or ToonDecodeOptions as the second argument:
| Option | Default | Description |
|---|---|---|
IndentSize |
2 |
Spaces per indentation level (encode and decode) |
Delimiter |
ToonDelimiter.Comma |
Array delimiter: Comma, Tab, or Pipe (encode) |
Strict |
true |
Throws on count mismatches, duplicate keys, tab or misaligned indentation, blank lines inside an array or keyed tabular object, and depth jumps; false recovers from these five only (decode) |
Specification
Targets TOON spec v4.4, and the test suite runs the spec's conformance fixtures.
- Integers in
longrange decode tolong, every other number todouble– integers beyondlongrange lose precision and a token beyonddoublerange (e.g.1e999) decodes as a string (§4) - Every .NET numeric type encodes as a number – integers in
longrange stay exact,ulongvalues abovelong.MaxValueanddecimalvalues round to the nearestdouble,floatkeeps its shortest digits (0.1fencodes as0.1),NaNand±Infinitybecomenull,JsonNodeandJsonElementvalues encode as the JSON they hold, dictionaries become objects with string keys, other enumerables become arrays, and any other value encodes asSystem.Text.Jsonserializes it, honoring its attributes and converters soDecode<T>reads it back – aDateTimebecomes an ISO 8601 string, an enum its number (§3)
Releases follow SemVer: a new spec MINOR version ships as a MINOR release, even when it changes how hand-written input decodes, and a MAJOR release means an API break or a new spec MAJOR version.
Migrating from spec v3.0
Spec v4 dropped key folding and path expansion, along with the KeyFolding, FlattenDepth, and ExpandPaths options, and reads a line whose first non-space character is # as a comment. Decode documents written with folded keys or #-leading lines using a v3.0 build (with ExpandPaths = ToonPathExpansion.Safe for folded keys), then encode the result again with this one.
Resources
- Specification: SPEC.md – Normative rules and conformance checklists
- Format Overview: toonformat.dev – Every form with examples
- Other Implementations: toonformat.dev – TOON in other languages
Contributing
See CONTRIBUTING.md for the development setup and pull request guidelines.
License
MIT License © 2025-PRESENT Daniel Destouche and Johann Schopplich
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Text.Json (>= 10.0.2)
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.