# Unions > Dependency-free C# 15 unions that do not box value-type cases. The C# 15 `union` keyword lowers to a single `object?` field, so every value-type case is boxed on entry. Purview.Unions generates the language's non-boxing custom-union shape instead: each case gets its own typed field, a public constructor, and a `TryGetValue` that never allocates. The compiler still sees a union — implicit conversions, exhaustive `switch`, and `is`/`null` patterns all work — plus a hand-written `Union` for the two-case shape. ## Documentation version - Channel: live (default) - Source: purview-dev/unions@main ## Resources - Repository: https://github.com/purview-dev/unions - NuGet package: https://www.nuget.org/packages/Purview.Unions - Project page: https://purview.dev/projects/unions/ - Documentation: https://purview.dev/docs/unions/ - Full machine-readable content: https://purview.dev/projects/unions/llms-full.txt ## Documentation pages - Unions: https://purview.dev/docs/unions/ - Union design: https://purview.dev/docs/unions/union-design/ - Diagnostics: https://purview.dev/docs/unions/diagnostics/ - Interop: https://purview.dev/docs/unions/interop/ - Trimming and Native AOT: https://purview.dev/docs/unions/trimming-aot/ - Performance: https://purview.dev/docs/unions/performance/ - Agent Skills: https://purview.dev/docs/unions/agent-skills/ - Release Flow: https://purview.dev/docs/unions/release-flow/