# bufbuild/protoc-gen-validate

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/bufbuild-protoc-gen-validate).**

4,122 stars · 604 forks · Go · Apache-2.0 · archived

## Links

- GitHub: https://github.com/bufbuild/protoc-gen-validate
- Homepage: https://github.com/bufbuild/protovalidate
- awesome-repositories: https://awesome-repositories.com/repository/bufbuild-protoc-gen-validate.md

## Topics

`constraints` `protoc` `protoc-plugin` `protocol-buffers` `validation`

## Description

This project is a protocol buffer validation plugin and code generator that creates consistent validation logic across multiple programming languages. It functions as a compiler extension for the Protocol Buffer toolchain, allowing developers to define semantic constraints directly within schema files to ensure data consistency.

The tool uses custom options to embed validation rules into message definitions, mapping these schema constraints to language-specific implementation patterns. It employs predicate-based constraint checking and recursive traversal to enforce rules across nested message hierarchies.

The validation surface covers numeric ranges and values, string patterns and formats, byte sequence constraints, and enum enforcement. It also manages collection and repeated field sizes, complex type validation for timestamps and durations, and requirements for union field selection.

## Tags

### Development Tools & Productivity

- [Validation Logic Generators](https://awesome-repositories.com/f/development-tools-productivity/api-code-generators/multi-protocol-code-generators/protocol-buffer-generators/validation-logic-generators.md) — Defines semantic constraints in Protobuf schemas to automatically generate code that ensures incoming messages are valid and consistent.
- [Validation Plugins](https://awesome-repositories.com/f/development-tools-productivity/api-code-generators/multi-protocol-code-generators/protocol-buffer-generators/validation-plugins.md) — Provides a protoc plugin that generates code to enforce semantic constraints and data validation rules for messages.

### Data & Databases

- [Strict Schema Enforcers](https://awesome-repositories.com/f/data-databases/schema-enforcement-tools/strict-schema-enforcers.md) — Sets strict rules for strings, numbers, and collections to prevent malformed data from entering a system via APIs.
- [Enum Membership Validators](https://awesome-repositories.com/f/data-databases/field-validation/enum-membership-validators.md) — Ensures enum fields match specific constants, exist within the enum descriptor, or belong to a specified list. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Recursive Hierarchy Validation](https://awesome-repositories.com/f/data-databases/nested-data-persistence/nested-schema-mapping/partial-nested-validation/recursive-hierarchy-validation.md) — Performs recursive validation on message fields to ensure required content is present or skipped throughout the hierarchy. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Polyglot Validator Mappings](https://awesome-repositories.com/f/data-databases/type-mapping-utilities/custom-type-assertion-mapping/type-to-validation-mappings/polyglot-validator-mappings.md) — Maps shared schema constraints to different implementation patterns across multiple target programming languages.

### Programming Languages & Runtimes

- [Message Validators](https://awesome-repositories.com/f/programming-languages-runtimes/source-code-generators/specification-from-code-generators/polyglot-code-generation/message-validators.md) — Generates consistent validation logic across multiple programming languages based on shared schema definitions.

### Software Engineering & Architecture

- [Distributed Data Integrity](https://awesome-repositories.com/f/software-engineering-architecture/distributed-data-integrity.md) — Ensures messages exchanged between microservices adhere to required formats and value ranges through generated validators.
- [Cross-Language Message Classes](https://awesome-repositories.com/f/software-engineering-architecture/interface-definition-languages/type-safe-code-generators/cross-language-message-classes.md) — Generates language-specific message classes with integrated validation to ensure consistency across different programming environments. ([source](https://github.com/bufbuild/protoc-gen-validate/tree/main/docs))
- [Protobuf Code Generators](https://awesome-repositories.com/f/software-engineering-architecture/plugin-based-extensibility/code-generation-plugins/protobuf-code-generators.md) — Functions as a protoc plugin to generate language-specific validation source code from Protocol Buffer schemas.
- [Polyglot API Validation](https://awesome-repositories.com/f/software-engineering-architecture/polyglot-api-validation.md) — Enforces the same data validation rules across multiple programming languages using a single shared Protocol Buffer definition.
- [Byte Sequence Validations](https://awesome-repositories.com/f/software-engineering-architecture/byte-sequence-validations.md) — Validates byte sequences using length limits, patterns, prefix and suffix matching, or network address formats. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Collection Constraints](https://awesome-repositories.com/f/software-engineering-architecture/collection-constraints.md) — Constrains the number of elements in repeated fields and enforces rules on individual items or keys. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Data Type Validation](https://awesome-repositories.com/f/software-engineering-architecture/data-schema-validation/data-type-validation.md) — Enforces constraints on specialized data types such as timestamps, durations, and scalar value wrappers. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Recursive Object Validation](https://awesome-repositories.com/f/software-engineering-architecture/data-schema-validation/data-type-validation/object-shape-validation/recursive-object-validation.md) — Implements depth-first traversal of nested message fields to enforce constraints across the entire data hierarchy.
- [Data Validation Schemas](https://awesome-repositories.com/f/software-engineering-architecture/data-validation-schemas.md) — Implements a system for defining numeric, string, and collection constraints within schemas to ensure data consistency.
- [Constraint Injection](https://awesome-repositories.com/f/software-engineering-architecture/data-validation-schemas/schema-driven-validations/constraint-injection.md) — Injects validation rules into generated data accessors by parsing semantic metadata from input descriptor files.
- [Custom Option Definitions](https://awesome-repositories.com/f/software-engineering-architecture/optional-value-types/optional-value-serializers/optionality-definitions/custom-option-definitions.md) — Uses Protocol Buffer custom options to embed semantic validation constraints directly within message definitions.
- [Range Constraints](https://awesome-repositories.com/f/software-engineering-architecture/optional-value-types/value-constraint-enforcers/range-constraints.md) — Restricts numeric fields using exact constants, range inequalities, or lists of permitted and denied values. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
- [Predicate-Based Validations](https://awesome-repositories.com/f/software-engineering-architecture/predicate-based-validations.md) — Evaluates field values against a set of predefined logical predicates including range checks and regular expressions.
- [Union Field Requirements](https://awesome-repositories.com/f/software-engineering-architecture/union-field-requirements.md) — Ensures that at least one field within a union is set to a value. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))

### Web Development

- [String Format Validators](https://awesome-repositories.com/f/web-development/string-format-validators.md) — Validates strings using length limits, regular expressions, and standard formats like emails and IP addresses. ([source](https://cdn.jsdelivr.net/gh/bufbuild/protoc-gen-validate@main/README.md))
