Skip to content

bufbuild/protovalidate-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

095842f · Apr 24, 2025
Apr 3, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Feb 26, 2024
May 30, 2023
Mar 3, 2025
May 31, 2023
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Jan 8, 2025
Mar 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Jan 8, 2025
Apr 24, 2025
Apr 24, 2025
Feb 26, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Feb 26, 2025
Apr 24, 2025
Feb 26, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Jan 8, 2025
Feb 26, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Jan 8, 2025
Apr 24, 2025
Apr 24, 2025
Jan 8, 2025
Apr 24, 2025
Apr 24, 2025
Apr 24, 2025
Mar 26, 2025
Jan 8, 2025
Apr 24, 2025

Repository files navigation

The Buf logo

protovalidate-go

CI Conformance Report Card GoDoc BSR

Protovalidate 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, the only widely used validation library for Protobuf.

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

syntax = "proto3";

package banking.v1;

import "buf/validate/validate.proto";

message MoneyTransfer {
  string to_account_id = 1 [
    // Standard rule: `to_account_id` must be a UUID.
    (buf.validate.field).string.uuid = true
  ];

  string from_account_id = 2 [
    // Standard rule: `from_account_id` must be a UUID.
    (buf.validate.field).string.uuid = true
  ];

  // Custom rule: `to_account_id` and `from_account_id` can't be the same.
  option (buf.validate.message).cel = {
    id: "to_account_id.not.from_account_id"
    message: "to_account_id and from_account_id should not be the same value"
    expression: "this.to_account_id != this.from_account_id"
  };
}

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 github.com/bufbuild/protovalidate-go

Documentation

Comprehensive documentation for Protovalidate is available in Buf's documentation library.

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:

Contribution

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

Related Sites

Legal

Offered under the Apache 2 license.