What Is govanity?
govanity is Google’s reference implementation for serving go-import meta tags. It’s a single Go binary that reads a YAML config file and responds to ?go-get=1 requests with the correct meta tags.
# govanity.yaml
paths:
/auth:
repo: https://github.com/org/auth-service
vcs: git
/logger:
repo: https://github.com/org/logger
vcs: git
You deploy it, point your domain at it, and it works. It’s a solid tool — for the right use case.
Where It Falls Short
Pain 1: You own the infrastructure
govanity is a binary you run yourself. That means: a server (or container), a process manager, health checks, log aggregation, and someone on-call when it crashes at 3 AM. “It’s just a tiny Go binary” — until it isn’t.
Pain 2: No HTTPS out of the box
govanity serves plain HTTP. You need to put a reverse proxy (Nginx, Caddy, Cloudflare) in front of it to get HTTPS. That’s another component to configure, monitor, and maintain.
Pain 3: Config file, no CLI
Adding a route means editing the YAML file and restarting the process. There’s no govanity add command, no API, no programmatic management. At 5 routes it’s fine; at 50 it becomes a deployment event.
Pain 4: No wildcard or pattern matching
Every route must be listed individually in the config. If your org has 100 repos under github.com/org/, you write 100 YAML entries. No glob, no template, no wildcard.
Side-by-Side Comparison
| Dimension | govanity (self-hosted) | gvu (hosted) |
|---|---|---|
| Setup | Build binary + write YAML + deploy + reverse proxy | `curl … |
| HTTPS | Manual (reverse proxy + cert management) | Automatic |
| Route management | Edit YAML + restart process | CLI (gvu add / gvu remove) |
| Wildcard routing | Not supported | * pattern, one rule |
| go-source tags | Not generated | Auto-generated for GitHub/GitLab/Bitbucket |
| Major version support | Manual per-route | Automatic (/v2, /v3…) |
| Operational overhead | Server + process + proxy + certs | Zero |
| Multi-device sync | Shared config file (Git?) | Account-based, automatic |
| Custom domains | Manual DNS + proxy config | CNAME + automatic TLS |
| Monitoring / alerting | Build your own | Included |
| Cost | Server hosting + your time | Free tier available |
When govanity Makes Sense
govanity is a good fit if:
- You run everything in-house and cannot use external services (compliance, air-gapped)
- You already have Kubernetes with TLS termination and don’t mind one more deployment
- Your route list is small and changes rarely
- You want to study the reference implementation to understand the
go-importprotocol
For most teams, the self-hosting tax isn’t worth it.
What gvu Adds
Zero infrastructure, zero ops
No server, no binary, no YAML, no reverse proxy. Install the CLI, add routes, done. Your team focuses on Go code, not on maintaining a vanity URL web server.
Wildcard: one rule covers everything
gvu add 'go.yourcompany.com/dept/*' 'https://github.com/org/*.git'
100 repos? One rule. govanity needs 100 YAML entries.
Automatic go-source + major version support
govanity only serves go-import meta tags. gvu also generates go-source tags (for source browsing on pkg.go.dev) and handles /v2, /v3 import paths automatically.
Get Started
curl -fsSL gomodvanityurls.com/install.sh | bash
gvu add gomod.io/yourname/your-module https://github.com/your-org/your-module.git
Free forever for up to 5 routes. No signup required.