# uber/prototool

**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/uber-prototool).**

5,036 stars · 338 forks · Go · MIT · archived

## Links

- GitHub: https://github.com/uber/prototool
- awesome-repositories: https://awesome-repositories.com/repository/uber-prototool.md

## Topics

`grpc` `grpc-go` `proto3` `protobuf` `protoc` `protocol-buffers`

## Description

Prototool is a development toolkit for Protocol Buffers that provides a suite of tools for linting, formatting, and generating code from schema files. It functions as a system for managing the lifecycle of Protocol Buffer definitions through a command line interface.

The toolkit distinguishes itself by providing a breaking change detector that compares different versions of definitions to identify wire or source incompatible changes. It also includes a gRPC client interface capable of invoking endpoints using JSON requests by dynamically compiling Protobuf definitions.

The project covers broad capability areas including schema validation and style enforcement, language-specific code stub generation, and automated compiler binary management. It also provides utilities for file descriptor set export and schema file generation with automated boilerplate.

## Tags

### Data & Databases

- [Breaking Change Detectors](https://awesome-repositories.com/f/data-databases/data-modification-apis/incremental-syncing/incremental-data-merging/specification-merging/breaking-change-detectors.md) — Identifies wire and source incompatible changes by comparing serialized FileDescriptorSets between different versions of definitions.
- [JSON-to-gRPC Translation](https://awesome-repositories.com/f/data-databases/graphql-integrations/json-to-grpc-translation.md) — Enables calling gRPC endpoints using JSON requests by dynamically compiling Protobuf definitions.
- [Protobuf Syntax Validation](https://awesome-repositories.com/f/data-databases/protobuf-contract-validators/protobuf-syntax-validation.md) — Validates schema files by compiling them without output stubs to ensure syntax correctness. ([source](https://github.com/uber/prototool/tree/dev/docs))

### Development Tools & Productivity

- [Protobuf Code Generators](https://awesome-repositories.com/f/development-tools-productivity/protobuf-code-generators.md) — Produces language-specific source code and file descriptor sets from Protocol Buffer definitions.
- [Protobuf Formatters](https://awesome-repositories.com/f/development-tools-productivity/protobuf-formatters.md) — Standardizes the layout of schema files by alphabetizing imports and applying consistent spacing. ([source](https://github.com/uber/prototool#readme))
- [Protobuf Linters](https://awesome-repositories.com/f/development-tools-productivity/protobuf-linters.md) — Analyzes schema files against configurable rule groups to enforce naming conventions and structural requirements. ([source](https://github.com/uber/prototool/blob/dev/style/README.md))
- [Protobuf Style Rules](https://awesome-repositories.com/f/development-tools-productivity/rule-definition-languages/ast-style-rule-definitions/protobuf-style-rules.md) — Provides static analysis of Protobuf schemas to enforce naming conventions and structural rules via AST traversal.
- [Binary Cache Managers](https://awesome-repositories.com/f/development-tools-productivity/binary-cache-managers.md) — Manages the downloading and caching of specific compiler binaries and type definitions to ensure consistent builds.
- [Binary Process Wrappers](https://awesome-repositories.com/f/development-tools-productivity/cli-wrappers/binary-wrappers/binary-process-wrappers.md) — Wraps the official Protocol Buffer compiler to manage its installation and execution across different environments.
- [Compiler Binary Management](https://awesome-repositories.com/f/development-tools-productivity/compiler-binary-management.md) — Buf CLI & Automation downloads, caches, and updates the schema compiler and type definitions automatically or via configuration. ([source](https://github.com/uber/prototool/blob/dev/docs/protoc.md))
- [gRPC Command-Line Clients](https://awesome-repositories.com/f/development-tools-productivity/grpc-command-line-clients.md) — Provides a command-line interface for invoking gRPC methods and inspecting service definitions using JSON.

### Software Engineering & Architecture

- [API Specification Breaking Change Detectors](https://awesome-repositories.com/f/software-engineering-architecture/file-comparison-tools/comparison-reporting/specification-difference-reporting/api-specification-breaking-change-detectors.md) — Compares different versions of Protobuf definitions to identify incompatible changes that could break service clients.
- [Protobuf Stub Generators](https://awesome-repositories.com/f/software-engineering-architecture/interface-definition-languages/type-safe-code-generators/protobuf-stub-generators.md) — Generates language-specific client and server stubs from Protocol Buffer interface definitions. ([source](https://github.com/uber/prototool#readme))
- [Multi-Language Code Generators](https://awesome-repositories.com/f/software-engineering-architecture/openapi-specification-parsers/go-code-generators/specification-from-code-generators/code-from-specification-generators/multi-language-code-generators.md) — Transforms schema definitions into source code for various languages using managed compiler versions. ([source](https://github.com/uber/prototool/blob/dev/go.mod))
- [Protobuf Code Generators](https://awesome-repositories.com/f/software-engineering-architecture/plugin-based-extensibility/code-generation-plugins/protobuf-code-generators.md) — Generates language-specific source code from Protobuf definitions using a configuration-driven template mapping.
- [Style Enforcement Strategies](https://awesome-repositories.com/f/software-engineering-architecture/style-enforcement-strategies.md) — Validates schema files against a set of rules for naming, ordering, and structure to ensure consistency. ([source](https://github.com/uber/prototool/blob/dev/etc/style/uber1/uber1.proto))

### Networking & Communication

- [Interactive Clients](https://awesome-repositories.com/f/networking-communication/tcp-proxies/grpc/interactive-clients.md) — Enables sending JSON requests to gRPC servers by dynamically compiling Protobuf files. ([source](https://github.com/uber/prototool/blob/dev/docs/grpc.md))

### Testing & Quality Assurance

- [gRPC API Testing](https://awesome-repositories.com/f/testing-quality-assurance/grpc-api-testing.md) — Sends JSON requests to gRPC endpoints by dynamically compiling Protobuf files to validate server behavior.

### Part of an Awesome List

- [Protocol Buffer Tools](https://awesome-repositories.com/f/awesome-lists/devtools/protocol-buffer-tools.md) — Integrated suite for compiling, linting, and formatting Protobuf files.
