bufbuild/protovalidate

Protocol Buffer Validation - Go, Java, Python, C++ and JS/TS

1,559

stars

318

commits

Go

primary language

Sep 3, 2026

updated

protovalidate.com
cc
cel
common-expression-language
cpp
ecmascript
golang
java
javascript
protobuf
protocol-buffers
typescript
validation

README

The Buf logo

Protovalidate

CI Slack 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)"
  };
}

Supported languages

To start using Protovalidate in your projects, see the developer quickstart, Protovalidate overview, or go directly to the repository for your language of choice:

Documentation

Comprehensive documentation for Protovalidate is available at protovalidate.com.

Highlights include:

Contributing

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

Offered under the Apache 2 license.

Contributors

(top 30 of 34)

dependabot[bot]

90 commits

timostamm

45 commits

rodaine

42 commits

Alfus

20 commits

bufbuild/protovalidate

Protocol Buffer Validation - Go, Java, Python, C++ and JS/TS

1,559

stars

318

commits

Go

primary language

Sep 3, 2026

updated

protovalidate.com
cc
cel
common-expression-language
cpp
ecmascript
golang
java
javascript
protobuf
protocol-buffers
typescript
validation

README

The Buf logo

Protovalidate

CI Slack 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)"
  };
}

Supported languages

To start using Protovalidate in your projects, see the developer quickstart, Protovalidate overview, or go directly to the repository for your language of choice:

Documentation

Comprehensive documentation for Protovalidate is available at protovalidate.com.

Highlights include:

Contributing

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

Offered under the Apache 2 license.

Contributors

(top 30 of 34)

dependabot[bot]

90 commits

timostamm

45 commits

rodaine

42 commits

Alfus

20 commits

Languages

Go

97.0%

Starlark

2.6%