PicoSerDe.Core 2026.1.8

dotnet add package PicoSerDe.Core --version 2026.1.8
                    
NuGet\Install-Package PicoSerDe.Core -Version 2026.1.8
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PicoSerDe.Core" Version="2026.1.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PicoSerDe.Core" Version="2026.1.8" />
                    
Directory.Packages.props
<PackageReference Include="PicoSerDe.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PicoSerDe.Core --version 2026.1.8
                    
#r "nuget: PicoSerDe.Core, 2026.1.8"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PicoSerDe.Core@2026.1.8
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PicoSerDe.Core&version=2026.1.8
                    
Install as a Cake Addin
#tool nuget:?package=PicoSerDe.Core&version=2026.1.8
                    
Install as a Cake Tool

PicoSerDe

AOT-first, reflection-free serialization framework. Five formats, one unified API. Source-generated ref struct readers/writers with zero heap allocation on the hot path — deployable under NativeAOT and trimming where many serialization libraries cannot run.

CI NuGet License: MIT


Modules

Format Package Status AOT Readme
JSON PicoJetson ✅ Production
MessagePack PicoMsgPack ✅ Production
INI PicoIni 🟡 Beta
TOML PicoToml 🟡 Beta
YAML PicoYaml 🟡 Beta

PicoYaml is the only AOT-compatible YAML library on .NET.


Test Coverage

498+ tests across all 6 modules, with cross-validation against 5 competitor libraries:

Module Tests Competitor Cross-Validation
PicoJetson 145 System.Text.Json ✅ bidirectional, all 19 property types
PicoToml 80 Tomlyn ✅ bidirectional, 20 property types, NestedList via [[key]]
PicoYaml 81 YamlDotNet ✅ bidirectional, 19 property types, DateOnly/TimeOnly conerters
PicoIni 87 Microsoft.Extensions.Configuration.Ini ✅ bidirectional, 16 property types
PicoMsgPack 77 MessagePack-CSharp ✅ map/array dual-format, 14 property types
PicoSerDe.Core 35

Performance Summary

Numbers below are PicoSerDe on NativeAOT vs competitors on JIT — the competitors cannot run under NativeAOT at all. In a JIT environment, mature reflection-based parsers may still be faster; PicoSerDe's advantage is guaranteed deployability under trimming and self-contained publishing, not peak JIT throughput.

Benchmarks: AOT self-contained, .NET 10, 100K iterations, win-x64.

Module vs Competitor Avg Speedup Competitor AOT?
PicoJetson System.Text.Json 1.35x
PicoMsgPack MessagePack-CSharp 1.40x
PicoIni ini-parser 0.12x
PicoToml Tommy 0.30x
PicoYaml

JSON/MessagePack are faster than or competitive with JIT-based alternatives even in AOT mode. INI/TOML/YAML prioritize correct, reflection-free parsing over peak throughput — their JIT competitors benefit from years of runtime-level optimizations (cached keys, direct span writes, dynamic code gen) that are incompatible with NativeAOT. PicoSerDe is the only option that runs at all in a fully-trimmed, self-contained NativeAOT deployment for these formats.


Design

// One API across all formats
JsonSerializer.Serialize<T>(value)      // → byte[] via PicoJetson
MsgPackSerializer.Deserialize<T>(data)  // T ← byte[] via PicoMsgPack
IniSerializer.Serialize(config)         // → string via PicoIni
┌──────────────────────────────────────────────┐
│                 User Code                     │
└──────────────────┬───────────────────────────┘
                   │  Static Cache<T>
┌──────────────────▼───────────────────────────┐
│           PicoSerDe.Core                      │
│  ISerializer<T>  │  IDeserializer<T>         │
│  TokenType       │  SimdHelpers (Vector128)  │
│  TextHelpers     │  SerializerExtensions     │
└────┬────────┬─────────┬─────────┬─────────┬──┘
     │        │         │         │         │
 PicoJetson  PicoIni  PicoMsgPack PicoToml PicoYaml
   ││       ││         ││        ││       ││
  .Gen     .Gen       .Gen      .Gen     .Gen
  • Dual-package: each format → runtime library (net10.0) + source generator (netstandard2.0)
  • ref struct readers/writers — stack-allocated, zero heap allocation on hot path
  • Static Cache<T> — JIT/AOT inlineable, no dictionary lookups
  • file struct generated implementations — devirtualization without sealed class overhead
  • JsonOptions — runtime configuration (indentation, naming policy, ignore conditions, etc.) flowing through ThreadStatic to SG-generated code

PicoJetson JsonOptions

// Compact (default) — optimal for data transfer
byte[] data = JsonSerializer.SerializeToUtf8Bytes(model);

// Human-readable
byte[] data = JsonSerializer.SerializeToUtf8Bytes(model,
    new JsonOptions { Indented = true });

// CamelCase naming
byte[] data = JsonSerializer.SerializeToUtf8Bytes(model,
    new JsonOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });

// Skip null properties
byte[] data = JsonSerializer.SerializeToUtf8Bytes(model,
    new JsonOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull });

// Allow NaN/Infinity
byte[] data = JsonSerializer.SerializeToUtf8Bytes(model,
    new JsonOptions { NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals });

Available options:

Option Default Description
Indented false Human-readable indented output
MaxDepth 63 Maximum nesting depth
PropertyNamingPolicy null Naming policy: CamelCase, SnakeCaseLower, KebabCaseLower, PascalCase
DefaultIgnoreCondition Never Skip null/default properties: WhenWritingNull, WhenWritingDefault
NumberHandling Strict Allow named floats: AllowNamedFloatingPointLiterals
PropertyNameCaseInsensitive false Case-insensitive property matching (default is already case-insensitive)
AllowTrailingCommas false Accept trailing commas in objects/arrays
ReadCommentHandling Disallow Skip // and /* */ comments
UnmappedMemberHandling Skip Throw on unknown properties: Disallow

Packages

Package NuGet
PicoSerDe.Core NuGet
PicoJetson / .Gen NuGet
PicoMsgPack / .Gen NuGet
PicoIni / .Gen NuGet
PicoToml / .Gen NuGet
PicoYaml / .Gen NuGet

CI/CD

Target Runner
win-x64 windows-latest
win-arm64 windows-latest
linux-x64 ubuntu-latest
linux-arm64 ubuntu-24.04-arm
osx-arm64 macos-latest

Every push: build + test (498+ tests) + 5 benchmarks smoke + 5 AOT sample publishes. Release: v* tag → packs 11 packages in dependency order → NuGet.org.


Comparison

PicoSerDe S.T.Json YamlDotNet VYaml MsgPack-CS Tommy
Formats 5 1 1 1 1 1
AOT ⚠️
Zero-reflection
Zero annotations
ref struct
SIMD

License

MIT

Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on PicoSerDe.Core:

Package Downloads
PicoIni

PicoIni — high-performance, AOT-first INI serializer with zero-reflection source generation for the PicoHex ecosystem

PicoJetson

PicoJetson — zero-allocation, AOT-first JSON serializer. Lightning-fast serialization/deserialization with SIMD-accelerated parsing and source-generated zero-reflection code for the PicoHex ecosystem.

PicoYaml

PicoYaml — high-performance, AOT-first YAML serializer with zero-reflection source generation for the PicoHex ecosystem

PicoToml

PicoToml — high-performance, AOT-first TOML serializer with zero-reflection source generation for the PicoHex ecosystem

PicoMsgPack

PicoMsgPack — high-performance, AOT-first MessagePack serializer with zero-reflection source generation for the PicoHex ecosystem

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.1.8 176 6/8/2026
2026.1.7 128 6/5/2026
2026.1.6 118 6/5/2026
2026.1.5 282 6/3/2026
2026.1.4 138 5/30/2026
2026.1.3 134 5/30/2026
2026.1.2 147 5/30/2026