Skip to content

Request: Migrate from protoc-gen-validate (PGV) to Buf’s protovalidate Runtime #7775

@AdamMagaluk

Description

@AdamMagaluk

Summary

Hi TTN team,

I’m currently integrating TTN’s gRPC API into a codebase and encountered a recurring issue stemming from TTN’s continued use of:

buf.build/envoyproxy/protoc-gen-validate

which corresponds to the deprecated protoc-gen-validate (PGV) runtime.

This is creating namespace conflicts with modern Buf-generated protobuf code using the Protovalidate runtime: https://protovalidate.com/

Specifically, PGV and Protovalidate both register the same proto:

validate/validate.proto

which leads to the following panic at runtime:

panic: proto: file "validate/validate.proto" is already registered
    previously from: "buf.build/gen/go/envoyproxy/protoc-gen-validate/protocolbuffers/go/validate"
    currently from:  "github.com/envoyproxy/protoc-gen-validate/validate"

Current Situation

No response

Why do we need this? Who uses it, and when?

Why TTN Should Migrate to Protovalidate
1. PGV is no longer maintained, and the Envoy project does not recommend using its Go runtime.
2. Protovalidate is the official successor, built and maintained by Buf.
3. Protovalidate:
• provides a more modern validation engine
• supports rich validation semantics
• avoids global registration conflicts
• integrates cleanly with Buf’s ecosystem and codegen
4. Many Go teams (mine included) are increasingly adopting Protovalidate, making PGV-based APIs difficult to integrate without hacks or stubbing modules.

Proposed Implementation

In Buf yaml: buf.build/envoyproxy/protoc-gen-validate -> buf.build/bufbuild/protovalidate

And change imports in protos:

import "buf/validate/validate.proto";

Contributing

  • I can help by doing more research.
  • I can help by implementing the feature after the proposal above is approved.
  • I can help by testing the feature before it's released.

Validation

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    wontfixWe're not going to do this

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions