AvroSharp 1.0.0
dotnet add package AvroSharp --version 1.0.0
NuGet\Install-Package AvroSharp -Version 1.0.0
<PackageReference Include="AvroSharp" Version="1.0.0" />
<PackageVersion Include="AvroSharp" Version="1.0.0" />
<PackageReference Include="AvroSharp" />
paket add AvroSharp --version 1.0.0
#r "nuget: AvroSharp, 1.0.0"
#:package AvroSharp@1.0.0
#addin nuget:?package=AvroSharp&version=1.0.0
#tool nuget:?package=AvroSharp&version=1.0.0
AvroSharp
A high-performance .NET implementation of the Apache Avro™ specification: schemas, binary and JSON encoding, schema resolution, object container files and single-object encoding. It is written for spans and IBufferWriter<byte>, allocates little, and needs no reflection, so it works with Native AOT and trimming.
Status: stable. The public API follows semantic versioning: no breaking changes before 2.0.
Documentation · API reference · Code generation · Benchmarks · Compared with Apache.Avro
Targets net10.0, net9.0, net8.0, netstandard2.1 and netstandard2.0.
Getting started
Parse a schema with AvroSchema.Parse, then write and read values of it with the generic data model: GenericDatumWriter and GenericDatumReader. AvroValue holds any Avro value without boxing, and a GenericRecord holds a record's fields by name or position.
using AvroSharp.Generic;
using AvroSharp.Schemas;
var schema = (RecordSchema)AvroSchema.Parse("""
{"type":"record","name":"User","namespace":"example","fields":[
{"name":"id","type":"int"},
{"name":"name","type":"string"}]}
""");
var user = new GenericRecord(schema) { ["id"] = 1, ["name"] = "Ada" };
byte[] bytes = GenericDatumWriter.Create(schema).WriteToArray(user);
GenericRecord copy = GenericDatumReader.Create(schema).Read(bytes).AsRecord();
Schema evolution. Data written with one version of a schema can be read as another: GenericDatumReader.Create(writerSchema, readerSchema). Fields are matched by name or alias, removed fields are skipped, added fields take their defaults, and numbers are promoted. Readers and writers are cached per schema (or schema pair) and are thread-safe.
JSON. GenericDatumJsonWriter and GenericDatumJsonReader implement the specification's JSON encoding.
Object container files
AvroFileWriter writes .avro files and AvroFileReader reads them:
using var writer = AvroFileWriter.CreateGeneric(stream, schema, new AvroFileWriterOptions { Codec = AvroCodec.Deflate });
writer.Write(user);
using var reader = AvroFileReader.OpenGeneric(stream);
foreach (var value in reader.ReadAll()) { ... }
Asynchronous reading and writing are available too (OpenGenericAsync, ReadAllAsync). null and deflate are built in (AvroCodec, DeflateCodec); the AvroSharp.Codecs package adds snappy, zstandard, bzip2 and xz.
Single-object encoding, schema registries and streams
AvroMessage and AvroMessageReader write and read single-object encoded messages, with a schema store (AvroSchemaStore, or your own IAvroSchemaResolver) that finds the writer schema by fingerprint. AvroRegistryMessage and AvroRegistryMessageReader write and read messages in a schema registry's framing, with a schema ID instead of the fingerprint (AvroRegistryFraming: Confluent, Apicurio, AWS Glue). AvroStreamWriter and AvroStreamReader handle a stream of values without a container.
C# types from schema files
The AvroSharp.Generators package generates C# classes from .avsc files at build time, with serializers that call AvroWriter/AvroReader directly:
byte[] bytes = order.ToAvroBytes();
var copy = shop.Order.FromAvroBytes(bytes);
More
- Documentation and samples
- Changelog
- Third-party notices (also in the package)
- Licensed under the MIT license.
| 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 is compatible. 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 is compatible. 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 is compatible. |
| .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
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.12)
- System.Memory (>= 4.6.3)
- System.Text.Json (>= 10.0.12)
- System.Threading.Channels (>= 10.0.12)
-
.NETStandard 2.1
- System.Text.Json (>= 10.0.12)
- System.Threading.Channels (>= 10.0.12)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on AvroSharp:
| Package | Downloads |
|---|---|
|
AvroSharp.Codecs
The snappy, zstandard, bzip2 and xz codecs for AvroSharp object container files, on fully managed libraries. |
|
|
AvroSharp.Generators
Source generator for AvroSharp: C# types and allocation-free serializers from Apache Avro™ schema files (.avsc). |
|
|
AvroSharp.CodeGen
C# code generation from Apache Avro™ schemas, used by the AvroSharp source generator and tools. |
|
|
AvroSharp.Aws.Glue
A managed AWS Glue Schema Registry serializer on AvroSharp, for every platform: generated and [AvroSerializable] types and generic records, and zlib compression, in AWS's wire format, for Kinesis, Kafka and any transport. No Apache.Avro, no native library. Confluent.Kafka serializers are in AvroSharp.Aws.Glue.Kafka. |
|
|
AvroSharp.Azure.SchemaRegistry
An Azure Schema Registry serializer on AvroSharp for Event Hubs and Service Bus messages (MessageContent): generated and [AvroSerializable] types and generic records, with the content type and bytes of Microsoft's Avro serializer. No Apache.Avro. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 243 | 10/3/2026 |
| 1.0.0-rc.1 | 103 | 10/1/2026 |
| 0.2.0 | 776 | 9/29/2026 |
| 0.1.1 | 165 | 9/28/2026 |
| 0.1.0 | 141 | 9/28/2026 |