https://github.com/bufbuild/protovalidate
Protocol Buffer Validation - Go, Java, Python, C++ and JS/TS
https://github.com/bufbuild/protovalidate
cc cel common-expression-language cpp ecmascript golang java javascript protobuf protocol-buffers typescript validation
Last synced: 21 days ago
JSON representation
Protocol Buffer Validation - Go, Java, Python, C++ and JS/TS
- Host: GitHub
- URL: https://github.com/bufbuild/protovalidate
- Owner: bufbuild
- License: apache-2.0
- Created: 2023-05-25T19:32:20.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2026-01-22T15:41:17.000Z (about 1 month ago)
- Last Synced: 2026-01-31T14:41:16.191Z (27 days ago)
- Topics: cc, cel, common-expression-language, cpp, ecmascript, golang, java, javascript, protobuf, protocol-buffers, typescript, validation
- Language: Go
- Homepage: https://protovalidate.com
- Size: 2.54 MB
- Stars: 1,398
- Watchers: 15
- Forks: 56
- Open Issues: 27
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-grpc - Protovalidate - Protovalidate provides standard annotations to validate common rules on messages and fields, as well as the ability to use CEL to write custom rules. (Protocol Buffers / Tools)
README

# Protovalidate
[][ci]
[][slack]
[][buf-mod]
[Protovalidate][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][cel] to write custom rules. It's the next generation of [protoc-gen-validate][protoc-gen-validate].
With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:
```protobuf
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][quickstart], [Protovalidate overview][protovalidate-overview], or go directly to the repository for your language of choice:
- [`protovalidate-go`][pv-go] (Go)
- [`protovalidate-java`][pv-java] (Java)
- [`protovalidate-python`][pv-python] (Python)
- [`protovalidate-cc`][pv-cc] (C++)
- [`protovalidate-es`][pv-es] (TypeScript and JavaScript)
## Documentation
Comprehensive documentation for Protovalidate is available at [protovalidate.com][protovalidate].
Highlights include:
* The [developer quickstart][quickstart]
* Comprehensive RPC quickstarts for [Connect and Go][connect-go], [gRPC and Go][grpc-go], [gRPC and Java][grpc-java], and [gRPC and Python][grpc-python]
* A [migration guide for protoc-gen-validate][migration-guide] users
## Contributing
We genuinely appreciate any help! If you'd like to contribute, check out these resources:
- [Contributing Guidelines][contributing]: Guidelines to make your contribution process straightforward and meaningful
- [Conformance testing utilities](https://github.com/bufbuild/protovalidate/tree/main/docs/conformance.md): Utilities providing acceptance testing of `protovalidate` implementations
## Legal
Offered under the [Apache 2 license][license].
[buf]: https://buf.build
[cel]: https://cel.dev
[pv-go]: https://github.com/bufbuild/protovalidate-go
[pv-java]: https://github.com/bufbuild/protovalidate-java
[pv-python]: https://github.com/bufbuild/protovalidate-python
[pv-cc]: https://github.com/bufbuild/protovalidate-cc
[pv-es]: https://github.com/bufbuild/protovalidate-es
[buf-mod]: https://buf.build/bufbuild/protovalidate
[slack]: https://buf.build/links/slack
[license]: LICENSE
[contributing]: .github/CONTRIBUTING.md
[protoc-gen-validate]: https://github.com/bufbuild/protoc-gen-validate
[conformance]: https://github.com/bufbuild/protovalidate/blob/main/docs/conformance.md
[ci]: https://github.com/bufbuild/protovalidate/actions/workflows/ci.yaml
[protovalidate]: https://protovalidate.com/
[protovalidate-overview]: https://protovalidate.com/about/
[quickstart]: https://protovalidate.com/quickstart/
[connect-go]: https://protovalidate.com/quickstart/connect-go/
[grpc-go]: https://protovalidate.com/quickstart/grpc-go/
[grpc-java]: https://protovalidate.com/quickstart/grpc-java/
[grpc-python]: https://protovalidate.com/quickstart/grpc-python/
[migration-guide]: https://protovalidate.com/migration-guides/migrate-from-protoc-gen-validate/