MCPcopy Index your code
hub / github.com/bufbuild/protovalidate-go

github.com/bufbuild/protovalidate-go @v1.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.0 ↗ · + Follow
20,308 symbols 22,586 edges 142 files 241 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

The Buf logo

protovalidate-go

CI Conformance Report Card GoDoc BSR

Protovalidate is the semantic validation library for Protobuf. It provides standard annotations to validate common rules on messages and fields, as well as the ability to use CEL to write custom rules. It's the next generation of protoc-gen-validate.

With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:

syntax = "proto3";

package acme.user.v1;

import "buf/validate/validate.proto";

message User {
  string id = 1 [(buf.validate.field).string.uuid = true];
  uint32 age = 2 [(buf.validate.field).uint32.lte = 150]; // We can only hope.
  string email = 3 [(buf.validate.field).string.email = true];
  string first_name = 4 [(buf.validate.field).string.max_len = 64];
  string last_name = 5 [(buf.validate.field).string.max_len = 64];

  option (buf.validate.message).cel = {
    id: "first_name_requires_last_name"
    message: "last_name must be present if first_name is present"
    expression: "!has(this.first_name) || has(this.last_name)"
  };
}

Once you've added protovalidate-go to your project, validation is idiomatic Go:

if err = protovalidate.Validate(moneyTransfer); err != nil {
    // Handle failure.
}

Installation

[!TIP] The easiest way to get started with Protovalidate for RPC APIs are the quickstarts in Buf's documentation. They're available for both Connect and gRPC.

To install the package, use go get from within your Go module:

go get buf.build/go/protovalidate

Documentation

Comprehensive documentation for Protovalidate is available at protovalidate.com.

Highlights for Go developers include:

API documentation for Go is available on pkg.go.dev.

Additional languages and repositories

Protovalidate isn't just for Go! You might be interested in sibling repositories for other languages:

Additionally, protovalidate's core repository provides:

Contributing

We genuinely appreciate any help! If you'd like to contribute, check out these resources:

Legal

Offered under the Apache 2 license.

Extension points exported contracts — how you extend this code

ValidatorOption (Interface)
A ValidatorOption modifies the default configuration of a Validator. See the individual options for their defaults and a [5 …
option.go
Validator (Interface)
Validator performs validation on any proto.Message values. The Validator is safe for concurrent use. [2 implementers]
validator.go
Filter (Interface)
The Filter interface determines which rules should be validated. [1 implementers]
filter.go
ValidationOption (Interface)
A ValidationOption specifies per-validation configuration. See the individual options for their defaults and effects. [2 …
option.go
FilterFunc (FuncType)
FilterFunc is a function type that implements the Filter interface, as a convenience for simple filters. A FilterFunc sh
filter.go
Option (Interface)
Option implements both [ValidatorOption] and [ValidationOption], so it can be applied both to validator instances as wel
option.go

Core symbols most depended-on inside this repo

Build
called by 159
cache.go
String
called by 152
violation.go
Validate
called by 67
validator.go
take
called by 52
cel/library.go
Equal
called by 51
map_value.go
Value
called by 51
map_value.go
New
called by 42
validator.go
Error
called by 26
runtime_error.go

Shape

Method 15,872
Struct 3,914
Function 329
TypeAlias 108
Interface 83
FuncType 2

Languages

Go100%

Modules by API surface

internal/gen/buf/validate/conformance/cases/numbers_protoopaque.pb.go1,701 symbols
internal/gen/buf/validate/conformance/cases/numbers.pb.go1,701 symbols
internal/gen/buf/validate/conformance/cases/ignore_proto_editions.pb.go741 symbols
internal/gen/buf/validate/conformance/cases/ignore_proto_editions_protoopaque.pb.go735 symbols
internal/gen/buf/validate/conformance/cases/strings.pb.go609 symbols
internal/gen/buf/validate/conformance/cases/strings_protoopaque.pb.go608 symbols
internal/gen/buf/validate/conformance/cases/ignore_proto2.pb.go528 symbols
internal/gen/buf/validate/conformance/cases/ignore_proto2_protoopaque.pb.go522 symbols
internal/gen/buf/validate/conformance/cases/predefined_rules_proto_editions_protoopaque.pb.go442 symbols
internal/gen/buf/validate/conformance/cases/predefined_rules_proto_editions.pb.go442 symbols
internal/gen/buf/validate/conformance/cases/predefined_rules_proto2_protoopaque.pb.go433 symbols
internal/gen/buf/validate/conformance/cases/predefined_rules_proto2.pb.go433 symbols

For agents

$ claude mcp add protovalidate-go \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact