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

Dimensiongovanity (self-hosted)gvu (hosted)
SetupBuild binary + write YAML + deploy + reverse proxy`curl …
HTTPSManual (reverse proxy + cert management)Automatic
Route managementEdit YAML + restart processCLI (gvu add / gvu remove)
Wildcard routingNot supported* pattern, one rule
go-source tagsNot generatedAuto-generated for GitHub/GitLab/Bitbucket
Major version supportManual per-routeAutomatic (/v2, /v3…)
Operational overheadServer + process + proxy + certsZero
Multi-device syncShared config file (Git?)Account-based, automatic
Custom domainsManual DNS + proxy configCNAME + automatic TLS
Monitoring / alertingBuild your ownIncluded
CostServer hosting + your timeFree 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-import protocol

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.

See all comparisons · Read the docs