lorawan-stack icon indicating copy to clipboard operation
lorawan-stack copied to clipboard

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

Open AdamMagaluk opened this issue 1 month ago • 2 comments

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

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

Validation

Code of Conduct

AdamMagaluk avatar Dec 01 '25 15:12 AdamMagaluk

Hey @AdamMagaluk. Thanks for filing the issue! We agree in theory with the idea, but this is a lot of work for us to test all the changes and account for edge-cases.

We'll consider starting with protovalidate in a future major version of TTS.

KrishnaIyer avatar Dec 08 '25 12:12 KrishnaIyer

Thank you for the response. Yeah the change is a bit larger than I expected originally. I tried playing with it locally.

For those needing it I did find a work around by providing: GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn as an env var when running the golang binary where both protos define validate.

AdamMagaluk avatar Dec 08 '25 19:12 AdamMagaluk