Protorip
---
site: protos.rip
page: compare/workflows
---
                      __   ______                  
 _      ______  _____/ /__/ __/ /___ _      _______
| | /| / / __ \/ ___/ //_/ /_/ / __ \ | /| / / ___/
| |/ |/ / /_/ / /  / ,< / __/ / /_/ / |/ |/ (__  ) 
|__/|__/\____/_/  /_/|_/_/ /_/\____/|__/|__/____/  
                                                   

# Protobuf schema workflows: Protorip vs buf.build vs Git submodules & OSS tools

When a team outgrows a single repository and needs to share Protocol Buffers schemas across services, they usually want to keep the `buf` CLI for linting, breaking-change detection, and code generation. The hard question is how to distribute those `.proto` files across repositories without paying a steep per-type bill or migrating away from the standard `buf` toolchain.
In practice, teams choose between four approaches:
ApproachCLI & manifestRemote plugins & upstream depsOperational burdenMonthly cost (300 private types)
1. `buf` CLI + ad-hoc Git wiringStandard `buf` CLI (`buf.yaml`)Manual vendoring or custom scriptsHigh (submodules, CI sync PRs, drift)$0 + engineering maintenance
2. OSS Protobuf managersBespoke CLI & manifestNone (`protoc` + custom backends)Medium to high (new toolchain + backend)$0 + storage/Artifactory host
3. Self-hosted BSRNot availableNot available in open sourceN/A (proprietary to Buf Pro/Enterprise)$3,000/mo minimum (Buf Pro)
4. Managed BSR (`protos.rip` / `buf.build`)Standard `buf` CLI (`buf.yaml`)Native `buf dep update` & `buf generate`Zero (centralised, content-addressed)$49/mo (Protorip) or $150/mo (Buf)

## 1. The default workaround: `buf` CLI + ad-hoc Git wiring

When teams see `buf.build`’s 100-type Community limit and $0.50/type monthly pricing, most do not switch to a different Protobuf tool. Instead, they keep the `buf` CLI for local tasks (`buf lint`, `buf breaking`, `buf generate`) and wire up their own distribution plumbing around Git:
  • >Git submodules or `git subtree`: Each service repository mounts a shared `protos/` repository at a pinned commit.
  • >CI sync bots: Pushing to a central schema repo triggers a GitHub Action that opens pull requests copying `.proto` files or generated code into downstream repos.
  • >Pre-built images in object storage: CI runs `buf build -o image.binpb`, uploads the artifact to S3 or GitHub Releases, and consumer repos run a custom wrapper script to fetch it before building.

### Where ad-hoc wiring breaks down

This setup works for two repositories, which is why so many engineering teams start with it (including ours before we built Protorip). The friction compounds as soon as you add more services or transitive dependencies:
  • >Submodule drift and broken onboarding: Developers forget `git submodule update --init --recursive`, accidentally commit rolled-back submodule pointers in unrelated PRs, or fight SSH/PAT token permissions inside Docker builds and CI runners.
  • >Vendoring public upstream schemas: Without a registry, importing `google/api/annotations.proto` or `buf/validate/validate.proto` means copying third-party `.proto` trees directly into your repository and keeping them updated by hand.
  • >Diamond dependency conflicts: When Service A depends on Common Protos and Event Protos, and Event Protos also depends on Common Protos, raw Git checkouts have no module graph or content-addressed lockfile (`buf.lock`) to resolve them cleanly.
Replacing custom Git scripts with `buf push` and `buf dep update` on Protorip costs $9/month (Solo) or $49/month (Team), which is less than a single hour of engineering time spent debugging a broken CI submodule checkout.

## 2. Alternative open-source Protobuf package managers (`buffrs`, `protodep`)

Frustration with `buf.build` pricing has led several teams to build open-source Protobuf dependency managers, such as Helsing’s `buffrs` (written in Rust, backed by Artifactory) or `protodep` (pulling files over Git/SSH via a TOML manifest).

### The hidden cost: leaving the `buf` CLI ecosystem

None of these open-source tools implement the BSR wire protocol that the `buf` CLI speaks. Adopting them requires migrating off the `buf` CLI’s dependency model into a smaller, bespoke ecosystem:
  • >Custom manifests and CLIs: Instead of standard `buf.yaml` and `buf.lock` files, every consumer must install a separate CLI binary and maintain a tool-specific manifest (`Proto.toml` or `protodep.toml`).
  • >Different resolution semantics: Tools like `buffrs` enforce their own packaging constraints and unpack files into local vendor directories, requiring extra wiring so `buf lint` or `protoc` can discover them.
  • >Loss of remote plugins and upstream mirrors: You lose access to `buf generate` remote plugins (`protocolbuffers/go`, `connectrpc/es`, etc.) and curated upstream modules (`googleapis`, `protovalidate`).
  • >You still have to run a backend: `buffrs` is not a standalone server; it relies on a JFog Artifactory instance to host packages.
The `buf` CLI already solved Protobuf workspace configuration, content-addressed `b5` digests, and remote code generation. Migrating to a bespoke CLI just to avoid per-type registry pricing trades a billing problem for a permanent toolchain tax.

## 3. Why not self-host an open-source BSR?

Developers evaluating registries often search for an open-source, self-hosted BSR implementation that works as a drop-in backend for the `buf` CLI. Today, that option does not exist:
  • >No open-source BSR server exists: While the [BSR protocol definitions](https://github.com/bufbuild/registry-proto) and the `buf` CLI are open source (Apache-2.0), the server implementation (including dependency graph resolution, legacy `v1alpha1` CLI endpoints, upstream module syncing, and containerised remote plugin execution) has no open-source equivalent.
  • >Self-hosting defeats the point of a central schema registry: A schema registry exists to eliminate infrastructure plumbing between repositories. Provisioning and maintaining your own database, blob storage, authentication, upstream mirror syncs, and sandboxed codegen containers creates more operational burden than the schema-sharing problem it solves.

## 4. Managed BSR compatibility: Protorip vs `buf.build`

Using a managed registry that natively speaks the BSR protocol lets you keep the best-in-class `buf` CLI workflow without custom Git scripts, bespoke manifests, or self-hosted servers:
```yaml
version: v2
modules:
- path: proto
name: protos.rip/acme/platform
deps:
- protos.rip/googleapis/googleapis
- protos.rip/bufbuild/protovalidate
```
```bash
buf dep update
buf lint
buf breaking --against .git#branch=main
buf generate
buf push
```
Within that model, [Protorip](/) and [`buf.build`](https://buf.build) serve different layers of the market:
  • >Protorip (`protos.rip`) gives you the core registry and codegen workflow at a flat utility price ($9/month Solo, $49/month Team, $0 for Free and [open source](/oss)). It supports `buf push`, `buf dep update`, `buf build`, and `buf generate` with the same mirrored community remote plugins and upstream public modules maintained on `buf.build`, while leaving linting and breaking-change enforcement in your CI pipeline where they already run.
  • >`buf.build` adds an enterprise control plane on top of the registry: hosted language package registries ([Generated SDKs](https://buf.build/docs/bsr/generated-sdks/) for npm, Go, Maven, PyPI, Cargo, and Swift), custom plugin hosting, [server-enforced schema checks](https://buf.build/docs/bsr/checks/), per-repository RBAC, SAML SSO, and dedicated private instances, priced at $0.50 per private type per month on Teams or from $3,000/month on Pro.

## Which workflow should you choose?

  • >Use `buf` CLI + Git submodules only if you have a single consumer repository, zero budget, and rarely touch your `.proto` definitions.
  • >Use Protorip (`protos.rip`) if you want the standard `buf` CLI workflow, private modules, upstream dependencies, and remote code generation plugins without maintaining Git glue scripts or paying per Protobuf type.
  • >Use `buf.build` if your organisation needs hosted npm/Go/Maven package registries (Generated SDKs), server-enforced review gates, SAML SSO, or per-repository RBAC.