Protocol Buffers
When You Need This Skill
- Creating or editing
.proto files
- Setting up
buf.yaml or buf.gen.yaml
- Designing gRPC or Connect services
- Adding protovalidate constraints
- Troubleshooting buf lint or breaking change errors
Core Workflow
1. Match Project Style
Before writing proto code, review existing .proto files in the project.
Match conventions for naming, field ordering, structural patterns, validation, and documentation style.
If none exists, ask the user what style should be used or an existing library to emulate.
2. Write Proto Code
- Apply universal best practices from best_practices.md:
- For service templates, see assets/.
3. Verify Changes
Always run after making changes:
buf format -w && buf lint
Check for a Makefile first—many projects use make lint or make format.
Fix all errors before considering the change complete.
Quick Reference
| Task |
Reference |
| Field types, enums, oneofs, maps |
quick_reference.md |
| Schema evolution, breaking changes |
best_practices.md |
| Validation constraints |
protovalidate.md |
| Complete service examples |
examples.md, assets/ |
| buf CLI, buf.yaml, buf.gen.yaml |
buf_toolchain.md |
| Migrating from protoc |
migration.md |
| Lint errors, common issues |
troubleshooting.md |
Project Setup
New Project
Create directory structure:
proto/
├── buf.yaml
├── buf.gen.yaml
└── company/
└── domain/
└── v1/
└── service.proto
Use assets/buf.yaml as starting point
Use assets/buf.gen.*.yaml for code generation config
Code Generation Templates
| Template |
Use For |
buf.gen.go.yaml |
Go with gRPC |
buf.gen.go-connect.yaml |
Go with Connect |
buf.gen.ts.yaml |
TypeScript with Connect |
buf.gen.python.yaml |
Python with gRPC |
buf.gen.java.yaml |
Java with gRPC |
Proto File Templates
Located in assets/proto/example/v1/:
| Template |
Description |
book.proto |
Entity message, BookRef oneof, enum |
book_service.proto |
Full CRUD with batch ops, pagination, ordering |
Common Tasks
Add a new field
- Use next sequential field number
- Add appropriate semantic validation
- Document the field
- Run
buf format -w && buf lint
Remove a field
- Reserve the field number AND name:
reserved 4;
reserved "old_field_name";
- Run
buf breaking --against '.git#branch=main' to verify
Add semantic validation
See protovalidate.md for constraint patterns:
- Required fields:
(buf.validate.field).required = true
- String formats:
.string.uuid, .string.email, .string.uri
- Numeric bounds:
.int32.gt, .uint32.lte
- Repeated bounds:
.repeated.min_items, .repeated.max_items
Verification Checklist
After making changes:
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: way-platform-tachograph-go-protobuf3description: Protocol Buffers4---56# Protocol Buffers78## When You Need This Skill910- Creating or editing `.proto` files11- Setting up `buf.yaml` or `buf.gen.yaml`12- Designing gRPC or Connect services13- Adding protovalidate constraints14- Troubleshooting buf lint or breaking change errors1516## Core Workflow1718### 1. Match Project Style1920Before writing proto code, review existing `.proto` files in the project.21Match conventions for naming, field ordering, structural patterns, validation, and documentation style.22If none exists, ask the user what style should be used or an existing library to emulate.2324### 2. Write Proto Code2526- Apply universal best practices from [best_practices.md](references/best_practices.md):27- For service templates, see [assets/](assets/).2829### 3. Verify Changes3031**Always run after making changes:**3233```bash34buf format -w && buf lint35```3637Check for a Makefile first—many projects use `make lint` or `make format`.3839Fix all errors before considering the change complete.4041## Quick Reference4243| Task | Reference |44|------|-----------|45| Field types, enums, oneofs, maps | [quick_reference.md](references/quick_reference.md) |46| Schema evolution, breaking changes | [best_practices.md](references/best_practices.md) |47| Validation constraints | [protovalidate.md](references/protovalidate.md) |48| Complete service examples | [examples.md](references/examples.md), [assets/](assets/) |49| buf CLI, buf.yaml, buf.gen.yaml | [buf_toolchain.md](references/buf_toolchain.md) |50| Migrating from protoc | [migration.md](references/migration.md) |51| Lint errors, common issues | [troubleshooting.md](references/troubleshooting.md) |5253## Project Setup5455### New Project56571. Create directory structure:58 ```59 proto/60 ├── buf.yaml61 ├── buf.gen.yaml62 └── company/63 └── domain/64 └── v1/65 └── service.proto66 ```67682. Use `assets/buf.yaml` as starting point693. Use `assets/buf.gen.*.yaml` for code generation config7071### Code Generation Templates7273| Template | Use For |74|----------|---------|75| `buf.gen.go.yaml` | Go with gRPC |76| `buf.gen.go-connect.yaml` | Go with Connect |77| `buf.gen.ts.yaml` | TypeScript with Connect |78| `buf.gen.python.yaml` | Python with gRPC |79| `buf.gen.java.yaml` | Java with gRPC |8081### Proto File Templates8283Located in `assets/proto/example/v1/`:8485| Template | Description |86|----------|-------------|87| `book.proto` | Entity message, BookRef oneof, enum |88| `book_service.proto` | Full CRUD with batch ops, pagination, ordering |8990## Common Tasks9192### Add a new field93941. Use next sequential field number952. Add appropriate semantic validation963. Document the field974. Run `buf format -w && buf lint`9899### Remove a field1001011. Reserve the field number AND name:102 ```protobuf103 reserved 4;104 reserved "old_field_name";105 ```1062. Run `buf breaking --against '.git#branch=main'` to verify107108### Add semantic validation109110See [protovalidate.md](references/protovalidate.md) for constraint patterns:111- Required fields: `(buf.validate.field).required = true`112- String formats: `.string.uuid`, `.string.email`, `.string.uri`113- Numeric bounds: `.int32.gt`, `.uint32.lte`114- Repeated bounds: `.repeated.min_items`, `.repeated.max_items`115116## Verification Checklist117118After making changes:119- [ ] `buf format -w` (apply formatting)120- [ ] `buf lint` (check style rules)121- [ ] `buf breaking --against '.git#branch=main'` (if modifying existing schemas)122123---124> Converted and distributed by [TomeVault](https://tomevault.io/claim/way-platform) — claim your Tome and manage your conversions.125<!-- tomevault:4.0:skill_md:2026-04-11 -->