Toon.Format
0.2.0
Prefix Reserved
See the version list below for details.
dotnet add package Toon.Format --version 0.2.0
NuGet\Install-Package Toon.Format -Version 0.2.0
<PackageReference Include="Toon.Format" Version="0.2.0" />
<PackageVersion Include="Toon.Format" Version="0.2.0" />
<PackageReference Include="Toon.Format" />
paket add Toon.Format --version 0.2.0
#r "nuget: Toon.Format, 0.2.0"
#:package Toon.Format@0.2.0
#addin nuget:?package=Toon.Format&version=0.2.0
#tool nuget:?package=Toon.Format&version=0.2.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)
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.