PackageTrack
Sign in Get early access

protobuf

Runtime library for protocol buffers support. Use with package:protoc_plugin to generate Dart code for your '.proto' files.

6.0.0 2.0M downloads/mo #258 most downloaded on pub.dev google/protobuf.dart

What this package is like to depend on

Last release 9 months ago

26 Nov 2025

Release timing varies

gaps range from 3 weeks to 1.6 years

Most releases are documented

notes for 81 of 92 stable releases

Nothing withdrawn

no release was ever pulled

13 years old

94 releases · first in 2013

3 releases in the last 12 months

see the full history below

Release timeline

94 releases · Sep 2013 to Nov 2025
2014 2016 2018 2020 2022 2024 2026
Release Pre-release

Releases

latest 60 of 94
  1. 6.0.0 26 Nov 2025
    Release notes
    • New GeneratedMessage extension methods toTextFormat and writeTextFormat added to convert the message into the official protocol buffers text format. (#1080, #125)

    • Add well-known proto types as libraries. This change is required for protoc_plugin-25.0.0. (#1081)

    • Breaking: Hide PbList and PbMap constructors. It is not possible to construct these values correctly in user code, so the constructors are now private. Existing uses of PbList can be replaced by List and PbMap can be replaced by Map.

      For immutable lists and maps, you can use built_value. (#1072)

    • Map fields now check key and value validity when adding elements. (#1065, #1076)

    Open source →
    Release notes
    • New GeneratedMessage extension methods toTextFormat and writeTextFormat added to convert the message into the official protocol buffers text format. (#1080, #125)

    • Add well-known proto types as libraries. This change is required for protoc_plugin-25.0.0. (#1081)

    • Breaking: Hide PbList and PbMap constructors. It is not possible to construct these values correctly in user code, so the constructors are now private. Existing uses of PbList can be replaced by List and PbMap can be replaced by Map.

      For immutable lists and maps, you can use built_value. (#1072)

    • Map fields now check key and value validity when adding elements. (#1065, #1076)

    Open source →
  2. 5.1.0 06 Nov 2025
    Release notes
    • Update default size limit of CodedBufferReader from 67,108,864 bytes to 2,147,483,647 bytes, and default recursion limit from 64 to 100.

      The new limits are consistent with the Java and C++ implementations. (#1060)

    • Fix GeneratedMessage.addExtension returning non-frozen and GeneratedMessage.getExtension allowing modifying an extension when the message is frozen before initializing the extension field set. (#1062)

    • Fix GeneratedMessage.getExtension returning differently typed lists when the message extension field set is initialized and frozen and initialized but not frozen. (#1062)

    • Fix PbList methods addAll, insertAll, replaceRange, setAll, setRange iterating the Iterable argument twice. (#730, #1070)

    • Fix GeneratedMessage.== throwing a type error when comparing map fields in some cases. (#1075, #1077)

      This bug was introduced with protobuf-5.0.0.

    Open source →
    Release notes
    • Update default size limit of CodedBufferReader from 67,108,864 bytes to 2,147,483,647 bytes, and default recursion limit from 64 to 100.

      The new limits are consistent with the Java and C++ implementations. (#1060)

    • Fix GeneratedMessage.addExtension returning non-frozen and GeneratedMessage.getExtension allowing modifying an extension when the message is frozen before initializing the extension field set. (#1062)

    • Fix GeneratedMessage.getExtension returning differently typed lists when the message extension field set is initialized and frozen and initialized but not frozen. (#1062)

    • Fix PbList methods addAll, insertAll, replaceRange, setAll, setRange iterating the Iterable argument twice. (#730, #1070)

    • Fix GeneratedMessage.== throwing a type error when comparing map fields in some cases. (#1075, #1077)

      This bug was introduced with protobuf-5.0.0.

    Open source →
  3. 5.0.0 30 Sep 2025
    Release notes
    • Improve performance of GeneratedMessage.deepCopy. (#742)
    • Fix unknown enum handling in GeneratedMessage.mergeFromProto3Json when the ignoreUnknownFields optional argument is true. (#853)
    • Add BuilderInfo methods to support protoc-plugin 23.0.0. (#1047)
    • Generalize argument type of PbList.from from List<T> to Iterable<T>. (#1054)
    • Fix clearing oneof fields with GeneratedMessage.clear. (#1057)
    • Fix unknown JSON handling when using GeneratedMessage methods mergeFromJson, mergeFromJsonMap, writeToJson, writeToJsonMap. (#1058)
    Open source →
    Release notes
    • Improve performance of GeneratedMessage.deepCopy. (#742)
    • Fix unknown enum handling in GeneratedMessage.mergeFromProto3Json when the ignoreUnknownFields optional argument is true. (#853)
    • Add BuilderInfo methods to support protoc-plugin 23.0.0. (#1047)
    • Generalize argument type of PbList.from from List<T> to Iterable<T>. (#1054)
    • Fix clearing oneof fields with GeneratedMessage.clear. (#1057)
    • Fix unknown JSON handling when using GeneratedMessage methods mergeFromJson, mergeFromJsonMap, writeToJson, writeToJsonMap. (#1058)
    Open source →
  4. 4.2.0 12 Aug 2025
    Release notes

    Release protobuf 4.2.0 (#1038)

    Open source →
    Release notes
    • Internal refactoring to split the package into libraries. This allows conditionally importing different libraries and improving performance by using different encoding/decoding libraries based on the target platform. (#1026)

    • Some of the private PbFieldType members are made public, to allow using them in internal libraries. This type is for internal use only. (#1027)

    • Improve performance of GeneratedMessage members: writeToJsonMap, writeToJson, mergeFromJson, mergeFromJsonMap. (#1028)

    • Remove BuilderInfo.fromProto3Json and BuilderInfo.toProto3Json as a part of an internal refactoring.

    Open source →
  5. 4.1.1 16 Jul 2025
    Release notes
    • Minimum SDK dependency bumped from 3.6.0 to 3.7.0. ([#1024])
      [#1024]: #1024
    Open source →
    Release notes
    • Minimum SDK dependency bumped from 3.6.0 to 3.7.0. (#1024)
    Open source →
  6. 4.1.0 19 May 2025
    Release notes
    • Improve packed field decoding performance. (#959, #981)
    • Minimum SDK dependency bumped from 3.3.0 to 3.6.0. (#1001)
    Open source →
  7. 4.0.0 28 Mar 2025
    Release notes
    • Breaking: The following types and members are now removed:

      • PbEventMixin
      • PbFieldChange
      • EventBuffer
      • GeneratedMessage.createRepeatedField
      • GeneratedMessage.createMapField

      These were used to implement events, which are unused internally. To keep API surface small (to make it easier to change the library or migrate to another library) these types and members are removed. (#738)

    • Breaking: CodedBufferWriter.writeRawBytes now takes a Uint8List argument (instead of TypedData).

    • GeneratedMessageGenericExtensions.deepCopy is now annotated with @useResult and will generate a warning when its result is not used. (#896)

    • Breaking: PbMap.unmodifiable now takes key and value field types as arguments, instead of another PbMap.

      To migrate, use PbMap.unmodifiable(map.keyFieldType, map.valueFieldType) instead of PbMap.unmodifiable(map). (#902)

    • Messages deserialized from JSON now generate the unknown fields when serialized as JSON.

      Note that, as before, unknown fields in JSON messages are not stored in the unknownFields of the message. They are only used by the JSON serializers to support roundtripping.

      (#49, #918)

    • Minimum SDK dependency bumped from 2.19.0 to 3.3.0. (#953)

    Open source →
  8. 3.1.0 14 Aug 2023
    Release notes
    • CodedBufferReader readBytes now copies the returned bytes to avoid accidental sharing of the input buffer with the returned Uint8List. New member readBytesAsView added with the old behavior. (#863)

    • Avoid sharing the input buffer in unknown length-delimited fields using the new readBytes. (#863)

    Open source →
  9. 3.0.0 15 Jun 2023
    Release notes
    • Require Dart 2.19.
    • Remove ReadonlyMessageMixin (#183, #644)
    • Remove frozenMessageModificationHandler (#175, #643)
    • Remove PbListBase and FrozenPbList types. All proto repeated fields now use PbList. To check if a list is frozen, use isFrozen getter. (#624, #626)
    • Initialize map fields in GeneratedMessage.getField. This behavior is consistent with getField called on repeated fields. (#373, #707)
    • Remove unused and optional PbMap constructor argument BuilderInfo? info. (d94d3f0)
    • UnknownFieldSetField methods hasRequiredFields, isInitialized and getter length removed. (#721)
    • Update library documentation to hide internals, add documentation for public types. (#681)
    • Fix PbMap._isReadonly field initialization in PbMap.unmodifiable. (#741, #754)
    • Fix decoding map fields when key or value (or both) fields of a map entry is missing. (#719, #745)
    • Fix updating frozen (immutable) messages with merge methods (mergeFromBuffer, mergeFromProto3Json, ...). (#489, #727)
    • Fix handling null values in proto3 JSON deserializer. (#751, #760, #763)
    • Fix handling negative JSON values when parsing uint32 fields. (#839)
    • Avoid serializing unknown fields twice in reparseMessage. (#840)
    Open source →
  10. 2.1.0 15 Jun 2022
    Release notes
    • Update READMEs of protobuf and protoc_plugin:
      • Use dart pub instead of pub in command examples (a7e75cb)
      • Fix typos, clarify installation instructions, mention native compilation, fix proto syntax for protoc_plugin (#610, #617, #641)
    • Update some of the documentation according to Effective Dart documentation guide (#664, #674)
    • Improve runtime perf by removing some of the runtime type checks (#574, #573)
    • Fix a bug when converting negative Timestamp to Dart DateTime (#580, #577)
    • Document BuilderInfo and FieldInfo properties (#597)
    • Improve BuilderInfo initialization by doing some of the work lazily (#606)
    • Improve enum hash code generation (#556)
    • Fix parsing nested Any messages from JSON (#568)
    • Improve message hash code generation performance (#554, #633)
    • Fix reading uninitialized map fields changing equality and hash code of messages. (#638)
    • Fix setting an extension field when there's an unknown field with the same tag. (#639)
    • Fix sharing backing memory for repeated bytes and optional bytes fields. (#640)
    • GeneratedMessage.rebuild now generates a warning when the return value is not used. (#631)
    • Fix hash code of messages with empty unknown field set (#648)
    • Show field tags with protobuf.omit_field_names, enum value tags with protobuf.omit_enum_names in debug strings (toString methods) (#649)
    • TimestampMixin.toDateTime now takes an optional named bool argument toLocal (defaults to false) for generating a DateTime in the local time zone (instead of UTC). (#653)
    • Fix serialization of infinity and nan doubles in JSON serializers (#652)
    • Fix Dart generation for fields starting with underscore (#651)
    • Fix proto3 JSON deserialization of fixed32 fields (#655)
    • Fix uninitialized repeated field values runtime types for frozen messages (#654)
    Open source →
  11. 2.0.1 02 Dec 2021
    Release notes
    • Fix bug of parsing map-values with default values.
    • Merge fixes from version 1.1.2 - 1.1.4 into v2.
    Open source →
  12. 2.0.0 11 Feb 2021
    Release notes
    • Stable null safety release.
    Open source →
  13. 2.0.0-nullsafety.1 07 Jan 2021 pre-release

    Nothing published for this version

  14. 2.0.0-nullsafety.0 13 Nov 2020 pre-release

    Nothing published for this version

  15. 1.1.4 21 Jun 2021
    Release notes
    • Fix comparison of empty lists from frozen messages.
    • Switch repo internals to use dart format instead of dartfmt.
    Open source →
  16. 1.1.3 26 Feb 2021
    Release notes
    • Fix that fixed32 int could be negative.
    Open source →
  17. 1.1.2 23 Feb 2021
    Release notes
    • Fix proto deserialization issue for repeated and map enum value fields where the enum value is unknown.
    Open source →
  18. 1.1.1 04 Feb 2021
    Release notes
    • Fix decoding of oneof fields from proto3 json. The 'whichFoo' state would not be set.
    • Fix the return type of copyWith.
    Open source →
  19. 1.1.0 28 Oct 2020
    Release notes
    • Require at least Dart SDK 2.7.0 to enable usage of extension methods.
    • Introduce extension methods GeneratedMessage.rebuild and GeneratedMessage.deepCopy replacing copyWith and clone. Using these alternatives can result in smaller binaries, because it is defined once instead of once per class. Use protoc_plugin from 19.1.0 to generate deprecation warnings for copyWith and clone methods.
    • GeneratedMessage.getExtension throws when reading trying to read an extension that is present in the unknown fields. We consider this change a bug-fix because depending on the old behavior is indicative of a bug in your program.
    Open source →
  20. 1.0.1 11 Nov 2019
    Release notes
    • Fix issue with ExtensionRegistry.reparseMessage not handling map fields with scalar value types correctly.
    • Fix issue with the non-json name of a field (protoName) not being set correctly.
    • Fix: Allow decoding tagnumbers of unknown fields of up to 29 bits.
    Open source →
  21. 1.0.0 30 Sep 2019
    Release notes
    • Graduate package to 1.0. No functional changes.
    Open source →
  22. 0.14.4 26 Sep 2019
    Release notes
    • Add permissiveEnums option to mergeFromProto3Json. It will do a case-insensitive matching of enum values ignoring - and _.
    • Add support for 'ensureX' methods generated by protoc_plugin 19.0.0.
    • Add specialized getters for String, int, and bool with usual default values.
    • Shrink dart2js generated code for getDefault().
    • Added an annotation class TagNumber. This is used by code generated by protoc_plugin from version 19.0.0.
    Open source →
  23. 0.14.3 17 Sep 2019
    Release notes
    • Fix: Allow decoding tagnumbers of up to 29 bits. Would fail before with more than 28 bits.
    Open source →
  24. 0.14.1 06 Sep 2019
    Release notes
    • Support for import public.

      The generated code for a protofile a.proto that import public "b.proto" will export the generated code for b.proto.

      See https://developers.google.com/protocol-buffers/docs/proto#importing-definitions.

    Open source →
  25. 0.14.0 06 Sep 2019
    Release notes
    • Support for proto3 json (json with field names as keys)

      • encoding and decoding.
      • Support for well-known types.
      • Use GeneratedMessage.toProto3Json() to encode and GeneratedMessage.mergeFromProto3Json(json) to decode.
    • FieldInfo objects have a new getter .protoName that gives the non-camel-case name of the field as in the .proto-file.

    • Breaking: The field-adder methods on BuilderInfo now takes only named optional arguments. To migrate, update protoc_plugin to version 18.0.0 or higher.

    • The field-adder methods on BuilderInfo all take a new argument protoName.

    • Breaking: Changed ExtensionRegistry.reparseMessage to reparse extensions deeply, that is it looks at every nested message and tries to reparse extensions from its unknown fields.

    Open source →
  26. 0.13.16 12 Sep 2019
    Release notes
    • Better handling of dummy calls to BuilderInfo.add with a tag number of 0. These would trigger assertions before.
    Open source →
  27. 0.13.16+1 12 Sep 2019
    Release notes
    • Reverts 0.13.16 which accidentally introduced a breaking change, #284. This release is identical to 0.13.15.
    Open source →
  28. 0.13.15 10 Jul 2019
    Release notes
    • Add new getter GeneratedMessage.isFrozen to query if the message has been frozen.
    Open source →
  29. 0.13.14 09 Jul 2019
    Release notes
    • Avoid needless copy when reading from a Uint8List buffer.
    Open source →
  30. 0.13.12 04 Jun 2019
    Release notes
    • BuilderInfo.add now ignores fields with tag number 0. These would never be generated by the protoc_plugin so this is not considered a breaking change.
    Open source →
  31. 0.13.11 11 Apr 2019
    Release notes
    • Save memory by only initializing _FieldSet.oneofCases if the message contains oneofs.
    Open source →
  32. 0.13.9 05 Apr 2019
    Release notes
    • Move 'eventPlugin' callback when setting a field in order to notify observers about field updates in the correct order.
    Open source →
  33. 0.13.8 03 Apr 2019
    Release notes
    • Fix JSON serialization of unsigned 64-bit fields.
    Open source →
  34. 0.13.6 01 Apr 2019
    Release notes
    • Fixed equality check between messages with and without extensions.
    Open source →
  35. 0.13.4 25 Feb 2019
    Release notes
    • Add new method pc on BuilderInfo for adding repeated composite fields and remove redundant type check on items added to a PbList.

      Deprecated BuilderInfo.pp and PbList.forFieldType.

    Open source →
  36. 0.13.3 12 Feb 2019
    Release notes
    • Fix issue with parsing map field entries. The values for two different keys would sometimes be merged.

    • Deprecated PBMap.add.

    Open source →
  37. 0.13.2 05 Feb 2019
    Release notes
    • Include extension fields in GeneratedMessage.toString().
    Open source →
  38. 0.13.1 04 Feb 2019
    Release notes
    • Fix issue with not being able to read unknown fields after freezing.

    Reading an unknown field set after freeze() now returns the existing field set before freezing instead of an empty UnknownFieldSet.

    Open source →
  39. 0.13.0 22 Jan 2019
    Release notes
    • Breaking change: Fix issue with not being able to read extensions after freezing.

    Reading an extension field after freeze() now returns the value set before freezing instead of the default value.

    Open source →
  40. 0.12.0 15 Jan 2019
    Release notes
    • Breaking change: Changed BuilderInfo.m() to take class and package name of the protobuf message representing the map entry. Also changed BuilderInfo.addMapField as well as the constructors PbMap and MapFieldInfo.map to take a map entry BuilderInfo object.

      This mostly affects generated code, which should now be built with protoc_plugin 15.0.0 or newer.

      With this change we avoid creating a map entry BuilderInfo object for each PbMap instance, instead it is passed through the static BuilderInfo object in the generated subclasses of GeneratedMessage.

    Open source →
  41. 0.11.0 08 Jan 2019
    Release notes
    • Breaking change: changed semantics of GeneratedMessage.toBuilder() to only make a shallow copy.

      GeneratedMessage has a new abstract method: createEmptyInstance() that subclasses must implement.

      Proto files must be rebuilt using protoc_plugin 14.0.0 or newer.

    Open source →
  42. 0.10.8 08 Jan 2019
    Release notes
    • Fix freezing of map fields.
    Open source →
  43. 0.10.7 08 Jan 2019
    Release notes
    • Fixed problem with recursive merging of sub messages.
    Open source →
  44. 0.10.6 02 Jan 2019
    Release notes
    • Added support for oneof. To use oneof support use Dart protoc_plugin version 13.0.0.
    Open source →
  45. 0.10.5 27 Nov 2018
    Release notes
    • Added support for map fields. Map fields are now represented as Dart maps and are accessed through a getter with the same name as the map field. To use the map support, use Dart protoc_plugin version 11.0.0 or newer.
    Open source →
  46. 0.10.4 02 Oct 2018
    Release notes
    • Added separate getter for BuilderInfo.qualifiedMessageName.
    Open source →
  47. 0.10.3 21 Sep 2018
    Release notes
    • Added type argument to ProtobufEnum.initByValue which allows the return value to be fully typed.
    Open source →
  48. 0.10.2 06 Sep 2018
    Release notes
    • Added ProtobufEnum reserved names.
    Open source →
  49. 0.10.1 30 Aug 2018
    Release notes
    • Added Support for any messages.
    Open source →
  50. 0.10.0 30 Aug 2018
    Release notes
    • Breaking change: Add GeneratedMessage.freeze(). A frozen message and its sub-messages cannot be changed.
    Open source →
  51. 0.9.1 08 Aug 2018
    Release notes
    • Fix problem with encoding negative enum values.
    • Fix problem with encoding byte arrays.
    Open source →
  52. 0.9.0 25 May 2018
    Release notes
    • Breaking change: Changed signature of CodedBufferWriter.writeTo to require Uint8List for performance.
    • More Dart 2 fixes.
    Open source →
  53. 0.9.0+1 18 Jul 2018
    Release notes
    • Dart SDK upper constraint raised to declare compatibility with Dart 2.0 stable.
    Open source →
  54. 0.8.0 17 May 2018
    Release notes
    • Breaking change: Added generics to RpcClient.invoke(). Proto files must be rebuilt using Dart protoc_plugin version 0.8.0 or newer to match.
    • Dart 2 fixes.
    Open source →
  55. 0.7.2 09 Apr 2018
    Release notes
    • Fix hashing for PbList.
    Open source →
  56. 0.7.1 22 Feb 2018
    Release notes
    • Fix type in PbList.fold() for Dart 2.
    • Small performance tweaks for DDC.
    Open source →
  57. 0.7.0 12 Jan 2018
    Release notes
    • Added fast getters for common types.
    • Only pass index instead of both tag and index to accessors.
    • Delegate more methods to underlying list in PbList.
    • Small fixes for Dart 2.0.
    Open source →
  58. 0.6.0 25 Oct 2017
    Release notes
    • Added enumValues to FieldInfo. Fixes #63.
    • Small performance optimization when deserializing repeated messages from JSON.
    • Type annotations for strong mode.
    Open source →
  59. 0.5.5 14 Aug 2017
    Release notes
    • Use real generic syntax instead of comment-based.
    • Support v2 dev SDKs.
    Open source →
  60. 0.5.4 20 Apr 2017
    Release notes
    • Unknown enum values are ignored when parsing JSON, instead of throwing an exception.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive