protobuf-net
Provides simple access to fast and efficient "Protocol Buffers" serialization from .NET applications
3.4.14
262M downloads/mo
#210 most downloaded on NuGet
protobuf-net/protobuf-net
What this package is like to depend on
Last release 2 days ago
21 Aug 2026
Release timing varies
gaps range from 9 days to 13 months
Most releases are documented
notes for 50 of 74 stable releases
25 versions withdrawn
withdrawn after publishing
127 years old
105 releases · first in 1900
5 releases in the last 12 months
see the full history below
Release timeline
105 releases · Jan 1900 to Aug 2026Releases
latest 60 of 105-
3.4.1421 Aug 2026Release notes
Open source →Features:
Maintenance
- Package validation: diff each package against 3.4.0 at pack time by @mgravell in #1305
- Record the out-of-band sub-type design, and where its ticket went by @mgravell in #1309
- Shipping hygiene: security policy, Dependabot, SHA-pinned actions by @mgravell in #1306
- Bump actions/setup-dotnet from 4.3.1 to 6.0.0 by @dependabot[bot] in #1311
- Bump actions/cache from 4.3.0 to 6.1.0 by @dependabot[bot] in #1310
- Bump actions/checkout from 4.4.0 to 7.0.1 by @dependabot[bot] in #1312
- Bump actions/upload-artifact from 4.6.2 to 7.0.1 by @dependabot[bot] in #1313
- Bump coverlet.collector from 10.0.0 to 10.0.1 by @dependabot[bot] in #1318
- Bump Google.Protobuf from 3.34.1 to 3.36.0 by @dependabot[bot] in #1320
- Bump protobuf-net.Grpc to 1.3.14 by @mgravell in #1321
- Bump FSharp.Core from 10.1.203 to 10.1.400 by @dependabot[bot] in #1319
- Bump Microsoft.CodeAnalysis.Analyzers and 2 others by @dependabot[bot] in #1322
New Contributors
- @dependabot[bot] made their first contribution in #1311
Full Changelog: 3.4.0...3.4.14
-
3.4.020 Aug 2026Release notes
Open source →What's Changed
The headline feature is experimental gRPC AOT support to accompany type-model AOT support.
(features)
- Build-time gRPC proxies and server bindings, hung off a declared partial (alternative to #1255) by @mgravell in #1282
- PBN0022: don't nag about initializers that only restate the type's default by @mgravell in #1294
- PBN0024 / PBN0025: declared defaults that do not do what they look like (re-target to main) by @mgravell in #1297
- PBN0026: a declared default that SkipConstructor puts out of reach by @mgravell in #1301
(background)
- Pin the docs site config, and give it a favicon by @mgravell in #1289
- Use the vector mark for the favicon by @mgravell in #1290
- Document editions, and benchmark the delimited encoding it finally spells by @mgravell in #1292
- Switching framing is only a wire break for other implementations by @mgravell in #1300
- Split editions and delimited into two pages, and measure the skip cost by @mgravell in #1302
- NodaTime: LocalDate and LocalTime reach the compile-time model too by @mgravell in #1303
- Give each shipping package its own readme, and fix the package metadata by @mgravell in #1291
- NodaTime surrogates are structs, like the well-known types they sit beside by @mgravell in #1304
Full Changelog: 3.3.21...3.4.0
-
3.3.2117 Aug 2026Release notes
Open source →What's Changed
- Implement "editions" by @mgravell in #1287
- Parse the list form of aggregate option values:
foo: [a, b]by @rayokota in #1269
(CI etc)
- Add-a-model fixer: resolve the namespace from RootNamespace first by @mgravell in #1266
- Stop publishing protobuf-net.BuildTools (3.3.8 is final; deprecate it) by @mgravell in #1267
- Move the docs and tool to protobuf-net.dev, and delete the old site projects by @mgravell in #1278
- Point the URLs we ship at docs.protobuf-net.dev by @mgravell in #1279
- Don't re-resolve
objecton every non-generic serialize (2.3 KB/call, ~40x) by @mgravell in #1280 - Make protobuf-net.dev findable, and point release notes at GitHub releases by @mgravell in #1281
- AOT diagnostics move to PBN3000+: they were colliding with the gRPC analyzers by @mgravell in #1283
- Experimental APIs get a help link, and PBN9001 gets a page telling people how to opt in by @mgravell in #1284
- CI: cache the NuGet package folder by @mgravell in #1288
Full Changelog: 3.3.8...3.3.21
-
3.3.811 Aug 2026Release notes
Open source →(minor follow-up actions from 3.3.0 - read that!)
What's Changed
- Release via GitHub Releases: OIDC trusted publishing to nuget.org; retire AppVeyor/MyGet by @mgravell in #1258
- Post-release: build tooling moves to protobuf-net.Core; NodaTime packaging; NuGet readme image by @mgravell in #1259
- PBN0022 no longer fires for collection members by @mgravell in #1260
- AOT migration UX: PBN2010's example compiles; the generated model is internal and namespaced by @mgravell in #1261
- get-version scripts for the release flow by @mgravell in #1262
- Accept bare release tags (3.3.5) as public releases, not just v-prefixed by @mgravell in #1263
- AotDifferential: scan the configuration it was built as (unblocks the release workflow) by @mgravell in #1264
- Release workflow: --skip-duplicate (singular) by @mgravell in #1265
Full Changelog: 3.3.0...3.3.8
-
3.3.011 Aug 2026Release notes
Open source →What's Changed
The headline feature in 3.3.0 is AOT support.
- code-gen at build-time (AOT) by @mgravell in #1254
- Allows the [Description] attribute annotation to be added to the code so that the annotation is carried when the proto file is generated by @whuanle in #1164
- Allow custom measuring in user-defined serializers by @castorjavp in #1234
- feat: allow ProtoPartialMember to be used on struct types by @adrianotr in #1225
- Expose the Parent of descriptors by @Ju42 in #1235
- Reinitialize the _knownLengths-Dictionary to free up its allocated memory by @michaelkollmann in #1245
- Reduce allocations for large length-prefixed reads by @mgravell in #1253
(maintenance)
- Update dependencies by @mgravell in #1236
- update dependencies by @mgravell in #1246
- Update to xunit.v3 by @mgravell in #1247
- migrate to slnx by @mgravell in #1248
- Public API tracking: baseline the shipped surface by @mgravell in #1256
- 3.3.0 release cleanup: notes, readme, shipped APIs, and the version un-double-bump by @mgravell in #1257
New Contributors
- @adrianotr made their first contribution in #1225
- @Ju42 made their first contribution in #1235
- @castorjavp made their first contribution in #1234
- @whuanle made their first contribution in #1164
- @michaelkollmann made their first contribution in #1245
Full Changelog: 3.2.56...3.3.0
Release notes
Open source →- compile-time serializers, for native AOT and trimming (docs):
opt in with
[ProtoModel] partial class MyModel : TypeModel, seeded by[ProtoSerializable(typeof(...))]; the generator builds the serializers at compile time, so publishing native AOT works and cold start improves even on an ordinary JIT build. The trigger attributes are[Experimental](PBN9001) while the shape settles.[ProtoSurrogate]on the model or assembly is the compile-timeSetSurrogate, and[ProtoContract(IsScalar = true)]lets a hand-written serializer state its category where the generator cannot see itsFeatures - the build tools now ship inside the protobuf-net package (analyzers and generators; previously
the separate
protobuf-net.BuildToolspackage): installed by default, declined entirely with<ProtoBufDisableBuildTools>true</ProtoBufDisableBuildTools> - support of deserializing
ISet<T>andIReadOnlySet<T>(ladeak) - fix:
[ProtoPartialMember(..., OverwriteList = true)]was silently ignored; the option was read from the member's own[ProtoMember], which is necessarily absent when the partial-member path runs. It is now honoured, so such a member replaces rather than appends when deserializing into an existing collection — a behaviour change for anyone who had set it and not noticed it doing nothing - fix: merging two unrelated sub-types of one base (a payload carrying the same field twice with
conflicting sub-type markers) recursed without bound and killed the process with a
StackOverflowException, which cannot be caught and was reachable from untrusted input; it now throws a catchableInvalidOperationExceptionnaming both types - fix:
Extensible.AppendValuediscarded the result of the underlying write and reported success regardless, so a failure was silent data loss; it now throws if it cannot write Extensible.AppendValue<T>/GetValue<T>/TryGetValue<T>now keepTrather than boxing toobjectand re-resolving by reflection, so they work under native AOT at the defaultDataFormat; other formats and the legacyobject-based overload are unchanged
-
3.3.0-g6785ecbb3501 Jan 1900 pre-release withdrawnNothing published for this version
-
3.2.5631 Jul 2025 -
3.2.5527 Jul 2025Release notes
Open source →What's Changed
- Don't use [SkipLocalsInit] on ns2.* by @mgravell in #1216
- Null dereference in error message when stub is null by @dumprop in #1207
- #1144 package cleanup by @thompson-tomo in #1146
New Contributors
- @dumprop made their first contribution in #1207
- @thompson-tomo made their first contribution in #1146
Full Changelog: 3.2.52...3.2.55
-
3.2.5211 Apr 2025Release notes
Open source →What's Changed
- fix(ImmutableArray serializer): Serializing uninitialized ImmutableArray throws NullReferenceException by @johncrim in #1183
- Cleanup package dependencies by @pentp in #1195
- Propose HybridCache service extensions by @mgravell in #1197
- rev aux libs by @mgravell in #1206
New Contributors
Full Changelog: 3.2.46...3.2.52
-
3.2.4624 Jan 2025Nothing published for this version
-
3.2.4523 Oct 2024 -
3.2.3027 Sep 2023Release notes
Open source →- support
DateOnlyandTimeOnly(#1100 by @mgravell, fixes #977) - support Roslyn [DefaultValue] analyzer (#1040 by @deaglegross)
- support
-
3.2.2625 May 2023Release notes
Open source →- support
IncludeInOutputon .proto additional files, to exclude from code-gen (#1032, #1046, #1047, #1062 by @kmosegaard and @dxdjgl) - support
Uriin schema-generation asstring(#1072 by @Matti-Koopa)
- support
-
3.2.26-gbb5bfa802701 Jan 1900 pre-release withdrawnNothing published for this version
-
3.2.1617 Mar 2023Release notes
Open source →- implement
[NullWrappedCollection], usage as here (#1044) - support
nint(IntPtr) andnuint(UIntPtr) with layout perlong/ulong(#1043; fixes #1042, fixes grpc 282)
- implement
-
3.2.1204 Mar 2023Release notes
Open source →- fix bug with default values not including literal suffixes (#1037)
- fix SDKs used by BuildTools[.Legacy]
- expose
IncludeInOutputfor files generated by BuildTools (#1030)
-
3.2.827 Feb 2023Release notes
Open source →- add support for deserializing into uninitialized
IReadOnlyDictionary<TKey, TValue>(#1022 by ladeak) - fix missing namespace in
[CompatibilityLevel]in code-gen (#1026)
- add support for deserializing into uninitialized
-
3.2.020 Feb 2023Release notes
Open source →- implement
[NullWrappedValue](compile-time annotation forValueMember.SupportNull, see 3.1.26) - add
[NullWrappedValue]support in schema tools in both directions (#1001 by DeagleGross) - allow nullable primitives for optional values (#856 by dxdjgl, #855, #1016)
- update dependencies
- drop netcoreapp3.1 (still supported indirectly via netstandard2.1)
- (build) switch to central package management
- implement
-
3.1.3330 Jan 2023 -
3.1.33-gf6a8d8dfc201 Jan 1900 pre-release withdrawnNothing published for this version
-
3.1.31-g739615ac2301 Jan 1900 pre-release withdrawnNothing published for this version
-
3.1.2616 Dec 2022Release notes
Open source →- reinstate
ValueMember.SupportNull(from v2) for handlingnullvalues in lists
- reinstate
-
3.1.2509 Nov 2022Release notes
Open source →- fix issue with non-supported features in tuple-types (#964)
- add
MessageTypeandEnumTypeonFieldDescriptorProto(#971) - expose fully qualified name for
DescriptorProtoandEnumDescriptorProto(#974)
-
3.1.2221 Sep 2022Release notes
Open source →- fix schema parsing bug with semicolon-delimited options (#833)
- fix schema parsing bug with escape characters in custom options (#931 / #933)
- fix ProtoSyntax type-forwarding (#953)
- update TFMs (#946)
-
3.1.1726 Jun 2022Release notes
Open source →- add .NET 6 TFM for protogen (#928)
- fix protobuf-net.BuildTools usage with duplicate filenames (#925)
- fix protobuf-net.BuildTools issue with gRPC/WCF detection not working correctly
-
3.1.410 May 2022Release notes
Open source →- allow
OverwriteListto work with properties declared asIEnumerable<T>(as a special-case) even if the existing value is a non-null, non-clearable collection
- allow
-
3.1.022 Apr 2022Release notes
Open source →- enforce maximum model depth (
TypeModel.MaxDepth) during serialize and deserialize
- enforce maximum model depth (
-
3.0.13122 Apr 2022Release notes
Open source →- support unknwon/extension fields on models that involve inheritance (via either
ExtensibleorITypedExtensible) - detect Google.Protobuf types and provide guidance (#722)
- don't throw if
EnumPassthruis explicitly set totrue(#881) from code compiled against v2 - fix #479 (also backported as 2.4.7)
- support unknwon/extension fields on models that involve inheritance (via either
-
3.0.12501 Jan 1900 withdrawnNothing published for this version
-
3.0.10119 Mar 2021Nothing published for this version
-
3.0.7302 Dec 2020Nothing published for this version
-
3.0.7202 Dec 2020Nothing published for this version
-
3.0.6213 Nov 2020Release notes
Open source →- add .NET 5 TFM and support for related features such as record-types
- split
protobuf-net.ServiceModelinto a separate package to reduce the dependency tree for most users - fix .proto schema generation when an enum name is overridden
- attempt to declare dynamically-accessed members for linker compatibility
- fix init-only fields in IL-generation
-
3.0.5203 Oct 2020Release notes
Open source →- add new protobuf-net.NodaTime package that adds direct support for NodaTime primitives (note: this may be relocated to a NodaTime library)
- fix #700 - new APIs to allow surrogates to be defined externally, and to be implemented over primitive backing types
- fix #703 - new options on MSBuild targets (via Konstantin Sharon)
- fix #693 - new
IgnoreUnknownSubTypesAPI on[ProtoContract(...)]andMetaType; serializes the types it does understand, and silently ignores the unknown sub-types - fix #695 - JIT error when serialization callbacks declared at types other than the inheritance root
- fix #713 - work correctly with arrays (etc) of nullable enum types
- fix #697 - improve error reporting for invalid end-group markers
- fix #668 - additional non-generic APIs
- fix problem with protogen website not allowing imports
-
3.0.2908 Jul 2020Nothing published for this version
-
3.0.2706 Jul 2020Nothing published for this version
-
3.0.2406 Jul 2020 -
3.0.2105 Jul 2020Nothing published for this version
-
3.0.1805 Jul 2020Release notes
Open source →- add new
SchemaGenerationOptionsAPI for schema generation; this allows service generation - tweaks to reflection services for gRPC (#617 via mholo65)
- add new
-
3.0.1302 Jul 2020Release notes
Open source →- add support for deserializing directly from
ReadOnlySpan<byte> - allow using open generic surrogates (#446 via ocoanet)
- add netcoreapp3.1 target (#670 via iamcarbon)
- add new
protobuf-net.AspNetCorepackage with input/output formatter support
- add support for deserializing directly from
-
3.0.224 Jun 2020 -
3.0.101 Jan 1900 withdrawn -
3.0.009 Jun 2020Nothing published for this version
-
2.4.910 Feb 2025Nothing published for this version
-
2.4.809 Jan 2023 -
2.4.722 Apr 2022Nothing published for this version
-
2.4.628 Jan 2020 -
2.4.501 Jan 1900 withdrawn -
2.4.429 Oct 2019 -
2.4.301 Jan 1900 withdrawnRelease notes
Open source →- add
IProtoInput<T>/IProtoOutput<T>APIs for discovering input/output capabilities (this is to allow testing for 3.0 features)
- add
-
2.4.201 Jan 1900 withdrawnNothing published for this version
-
2.4.109 Oct 2019Release notes
Open source →- fixes for .NET Core 3, thanks @szehetner
- (this build deliberately does not update package dependencies, to reduce impact)
-
2.4.030 Aug 2018Release notes
Open source →- fix #442 - switched to 2.4.0 due to new versioning implementation breaking the assembly version; oops
-
2.3.1801 Jan 1900 withdrawnNothing published for this version
-
2.3.1703 Aug 2018Release notes
Open source →- (#430/#431) - ensure build output from
protobuf-net.MSBuildmakes it into build output; add error codes - #429 - use
$IntermediateOutputPathcorrectly from build tools
- (#430/#431) - ensure build output from
-
2.3.1602 Aug 2018Release notes
Open source →- new MSBuild .proto tools added (huge thanks go to Mark Pflug here)
- fix error where extension GetValues might only report the last item
- switch to git-based versioning implementation; versioning now unified over all tools
- extensions codegen (C#): add
Get*andAdd*implementations forrepeated; addSet*implementations for regular - update
protocto 3.6.1 - give advance warning of possible removal of ProtoReader/ProtoWriter constructors
- codegen (C#): implement "listset" option to control whether lists/maps get
setaccessors GetProto<T>now emitsoneof-style .proto syntax for inheritance
-
2.3.1530 Jul 2018Release notes
Open source →- merge #412/fix #408 -
ReadObject/WriteObjectfailed on value types - merge #421 - support
IReadOnlyCollectionmembers - merge #424 - make WCF configuration features available on TFMs that support them
- merge #396 - remove unnecessary #if defs
- merge #412/fix #408 -
-
2.3.1424 Jul 2018 -
2.3.14-alpha127 Jun 2018 pre-releaseNothing published for this version
-
2.3.1319 Jun 2018Release notes
Open source →- IMPORTANT fix #403 - key cache was incorrect in some cases involving multi-level inheritance; update from 2.3.8 or above is highly recommended