Skip to content
generated from cloudwego/.github

Pure Go alternative to protocol buffers with minimum code generation

License

Notifications You must be signed in to change notification settings

cloudwego/prutal

Repository files navigation

Prutal

Prutal is a pure Go alternative to protocol buffers, it covers most of the functionality offered by Protocol Buffers.

Prutal aims to minimize code generation as much as possible while ensuring serialization and maintaining good performance.

Since Prutal is NOT yet ready for production use, we are not providing usage documentation at this time, nor do we guarantee backward compatibility of the interface.

Feature Comparison

Features Prutal Protobuf
Supported Languages Go C++, Java, Python, Go, and more
Code Generation
Generated Code Size 😄 compact 😡 bulky
Serialization
Performance ⭐️⭐️⭐️⭐️⭐️ ⭐️⭐️⭐️
Extensibility 😄 Package 😡 Plugin
Compatibility ✅ (see Protobuf Compatibility)
gRPC 🚧 Coming soon
Non-Pointer Field ✅ (aka gogoproto.nullable)

Protobuf Compatibility

  • ✅ Works with code generated by the official Protocol Buffer Go
  • ✅ Parsing .proto file. syntax: proto2, proto3, edition 2023
  • ✅ Protobuf wire format
    • double, float, bool, string, bytes
    • int32, int64, uint32, uint64, sint32, sint64
    • fixed32, fixed64, sfixed64, sfixed64
    • enum
    • repeated, map, oneof
  • ✅ Packed / unpack (proto2)
    • PACKED / EXPANDED (repeated field encoding, edition2023)
  • ✅ Reserved
  • ✅ Unknown Fields
  • ⚠️ JSON support: JSON struct tag only
  • ⚠️ Code generation: Go only
  • ⚠️ Protocol buffers well-known types link
  • ❌ Groups (proto2) link
  • ❌ Overriding default scalar values (proto2, edition2023) link

Contributing

Contributor guide: Contributing.

License

Prutal is licensed under the terms of the Apache license 2.0. See LICENSE for more information. Dependencies used by prutal are listed under licenses.

About

Pure Go alternative to protocol buffers with minimum code generation

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages