Protorip
---
site: protos.rip
page: docs/guides/create-and-publish-a-module
---

# Create and publish a module

```bash
buf registry login protos.rip
buf config init protos.rip/acme/shipments # scaffold buf.yaml
buf registry module create protos.rip/acme/shipments # create the module record
buf push # first commit, on label "main"
buf push --label v1.0.0
```

## Sign in

Run `buf registry login protos.rip` and approve the request in the browser tab that opens. If the browser doesn’t launch, open the verification URL the CLI prints.
For headless machines or other sign-in options, see [Sign in and API keys](/docs/guides/sign-in-and-api-keys).

## Configure buf.yaml

From the directory holding your `.proto` files, run `buf config init` to scaffold a `buf.yaml` with `name` and `path` pre-filled:
```bash
buf config init protos.rip/acme/shipments
```
If you already have a `buf.yaml`, add a `modules` entry instead — `path` is the directory holding your `.proto` files relative to `buf.yaml`, and `name` is the registry module ref:
```yaml
version: v2
modules:
- path: .
name: protos.rip/acme/shipments
```
`buf push` reads this to determine which module receives the commit.

## Create the module

```bash
buf registry module create protos.rip/acme/shipments
```
Replace `acme` with your username or org slug — visible in your dashboard URL — and `shipments` with your module name.
Module names start with a lowercase letter; the rest may be lowercase letters, digits, hyphens, or underscores, up to 64 characters total.
New modules default to private. Change visibility from the module page in the dashboard.

## Push

Run `buf push` from the directory containing `buf.yaml`:
```bash
buf push
```
The commit lands on the `main` label by default. Re-pushing identical content is a no-op.

## Tag a release

Pass `--label` to apply a named label to the commit:
```bash
buf push --label v1.0.0
```
Use labels to mark stable releases your consumers can pin to.

## See also