---
title: protobuf_generator
description: Adapt an installed protoc plugin dependency for code generation.
---

# `protobuf_generator`

`protobuf_generator` combines a protoc plugin name with a dependency that installs or activates its executable. It returns a typed generator accepted by [`protobuf_generate`](protobuf_generate.md).

## Arguments

| Argument | Required | Description |
| --- | --- | --- |
| `name` | Yes | Plugin suffix used by protoc. `"go"` selects an executable named `protoc-gen-go` through `--go_out`. Must start with an ASCII letter and contain only ASCII letters, digits, hyphens, and underscores. Built-in and reserved protoc output names are rejected. |
| `dependency` | Yes | Dependency that makes `protoc-gen-<name>` available in `PATH`. |

Built-in generator names cannot be wrapped. Pass those names directly to `protobuf_generate`. Selecting a typed generator activates its dependency automatically.

Prefer language-specific helpers when available. Use this adapter with a generic installer or a custom build task.

## Examples

### Install a Go plugin manually

```starlark
load("@go@1.26.5", "go_install")
load("@protobuf@35.1", "protobuf_generate", "protobuf_generator")

plugin = go_install(
    package="google.golang.org/protobuf/cmd/protoc-gen-go",
    version="v1.36.6",
)

protobuf_generate(
    sources=["proto/service.proto"],
    generator=protobuf_generator("go", plugin),
    output="generated/go",
    proto_paths=["proto"],
    options=["paths=source_relative"],
)
```

### Generate TypeScript with Protobuf-ES

Pin `@bufbuild/protoc-gen-es` in the project's `package.json` and lockfile:

```json
{
  "devDependencies": {
    "@bufbuild/protoc-gen-es": "2.9.0"
  }
}
```

Install project dependencies, expose npm's local executable directory, and wrap `protoc-gen-es` as generator `es`:

```starlark
load("@nodejs@22.14.0", "npm_install")
load("@os@1", "env_prepend")
load("@protobuf@35.1", "protobuf_generate", "protobuf_generator")

plugin = protobuf_generator(
    "es",
    npm_install(frozen_lockfile=True) + env_prepend("PATH", "node_modules/.bin"),
)

protobuf_generate(
    sources=["proto/service.proto"],
    generator=plugin,
    output="generated/typescript",
    proto_paths=["proto"],
    options=["target=ts"],
)
```

<!--
Sitemap

URL: https://withxx.dev/index.md
Title: xx
Description: Practical, reproducible builds without build-system ceremony

URL: https://withxx.dev/examples/commands.md
Title: Command Examples
Description: General command, environment, and entrypoint patterns.

URL: https://withxx.dev/examples/go.md
Title: Go Examples
Description: Common Go build patterns with managed SDKs.

URL: https://withxx.dev/examples/nodejs.md
Title: Node.js Examples
Description: Common Node.js task patterns with a managed distribution.

URL: https://withxx.dev/examples/zig.md
Title: Zig Examples
Description: Direct Zig commands and Go CGO builds with a managed Zig distribution.

URL: https://withxx.dev/load.md
Title: Loading Files
Description: Split xx configuration into local Starlark modules.

URL: https://withxx.dev/packages/git/git_clone.md
Title: git_clone
Description: Materialize a pinned Git source tree with host Git configuration and access.

URL: https://withxx.dev/packages/git/git_init_repository.md
Title: git_init_repository
Description: Ensure an empty SHA-1 or SHA-256 Git repository exists.

URL: https://withxx.dev/packages/go/go.md
Title: go
Description: Activate a managed Go SDK for dependent tasks.

URL: https://withxx.dev/packages/go/go_binary.md
Title: go_binary
Description: Build a Go command with a managed SDK.

URL: https://withxx.dev/packages/go/go_install.md
Title: go_install
Description: Install a versioned Go command for dependent tasks.

URL: https://withxx.dev/packages/go/go_protobuf.md
Title: go_protobuf
Description: Install protoc-gen-go and provide it as a Protobuf generator.

URL: https://withxx.dev/packages/go/go_run.md
Title: go_run
Description: Run a local program or versioned Go command with a managed SDK.

URL: https://withxx.dev/packages/go/go_test.md
Title: go_test
Description: Test Go packages with a managed SDK.

URL: https://withxx.dev/packages/nodejs/nodejs.md
Title: nodejs
Description: Activate managed Node.js for dependent tasks.

URL: https://withxx.dev/packages/nodejs/npm_install.md
Title: npm_install
Description: Install project dependencies with managed npm.

URL: https://withxx.dev/packages/nodejs/npm_run.md
Title: npm_run
Description: Run a project package script with managed npm.

URL: https://withxx.dev/packages/nodejs/npx_run.md
Title: npx_run
Description: Run a versioned npm package command with managed npx.

URL: https://withxx.dev/packages/os/env_append.md
Title: env_append
Description: Append an item to a list-like environment variable.

URL: https://withxx.dev/packages/os/env_get.md
Title: env_get
Description: Read a value from a task environment while evaluating Starlark.

URL: https://withxx.dev/packages/os/env_prepend.md
Title: env_prepend
Description: Prepend an item to a list-like environment variable.

URL: https://withxx.dev/packages/os/env_set.md
Title: env_set
Description: Set an environment variable for dependent tasks.

URL: https://withxx.dev/packages/os/env_unset.md
Title: env_unset
Description: Remove an environment variable from dependent tasks.

URL: https://withxx.dev/packages/os/run.md
Title: run
Description: Run a command from the project root.

URL: https://withxx.dev/packages/protobuf/protobuf_generate.md
Title: protobuf_generate
Description: Generate source code with a managed Protobuf compiler.

URL: https://withxx.dev/packages/protobuf/protobuf_generator.md
Title: protobuf_generator
Description: Adapt an installed protoc plugin dependency for code generation.

URL: https://withxx.dev/packages/protobuf/protoc.md
Title: protoc
Description: Activate a managed Protobuf compiler for dependent tasks.

URL: https://withxx.dev/packages/zig/zig.md
Title: zig
Description: Activate managed Zig for dependent tasks.

URL: https://withxx.dev/packages/zig/zig_cc.md
Title: zig_cc
Description: Configure managed Zig as a C and C++ compiler.

URL: https://withxx.dev/packages.md
Title: Built-in Packages
Description: Versioned toolchains, commands, and task environment helpers provided by xx.
-->
