---
site: protos.rip
page: docs/guides/create-and-publish-a-module
---
navigation
# Create and publish a module
```bashbuf registry login protos.rip # sign inbuf registry module create protos.rip/acme/shipments # create the module record```
Add to
`buf.yaml`:```yamlname: protos.rip/acme/shipments```
```bashbuf push # first commit, on label "main"buf push --label v1.0.0 # tag a release```
## Sign in
```bashbuf registry login protos.rip```
Complete the sign-in in the browser tab that opens (the token is stored locally for protos.rip). To use an API key instead, create one in the [dashboard](/dashboard) and enter it when prompted.
## Create the module
```bashbuf 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 are 1–64 characters, lowercase, starting with a letter; digits, hyphens, and underscores allowed after.
New modules are private. Change visibility from the module page in the dashboard.
## Configure buf.yaml
Add a
`name` field pointing to the module:```yamlversion: v2name: protos.rip/acme/shipments```
`buf push` reads this to determine which module receives the commit.## Push
```bashbuf push```
First push lands a commit on the
`main` label. Re-pushing identical content is a no-op.## Tag a release
```bashbuf push --label v1.0.0```
`--label` applies a named label to the commit. Use it to mark stable releases your consumers can pin to.## See also