| HTTP server | github.com/labstack/echo/v4 | Use net/http alone for a tiny service, specialized proxy, or generated handler that needs no framework. |
| HTTP client | net/http | Add a provider SDK when it owns substantial protocol behavior, pagination, signing, or typed errors. |
| ORM | gorm.io/gorm | Use pgx, database/sql, or github.com/jmoiron/sqlx directly for SQL-first, query-heavy, or infrastructure state code. |
| PostgreSQL | github.com/jackc/pgx/v5; use gorm.io/driver/postgres with GORM | Use another driver only for an existing supported database contract. |
| Embedded relational state | database/sql with modernc.org/sqlite | Use bbolt only for genuinely key/value state with no relational querying or cross-record transaction needs. |
| Migrations | github.com/pressly/goose/v3 | Preserve an existing authoritative migration system such as Alembic or Atlas. Never run GORM AutoMigrate in production. |
| Configuration | standard flags plus a strict typed environment decoder; use github.com/joho/godotenv only for local files | Preserve an established decoder such as envconfig; reject present-but-invalid values. |
| Request validation | github.com/go-playground/validator/v10 plus explicit domain validation | Use generated protocol validation where the schema is canonical. |
| OpenAPI | github.com/oapi-codegen/oapi-codegen/v2 and github.com/getkin/kin-openapi | Keep handwritten transport code for streaming or proxy routes that generated handlers cannot preserve. |
| CLI | github.com/spf13/cobra | Use flag for a small command with no subcommands. |
| Terminal UI | github.com/charmbracelet/bubbletea with github.com/charmbracelet/lipgloss | Do not add a TUI framework to a non-interactive service or simple CLI. |
| Logging | go.uber.org/zap | Use log/slog for a small dependency-light service; do not run multiple logging stacks. |
| UUIDs | github.com/google/uuid | Use opaque secure random IDs when identifiers are authorization material. |
| JWT | github.com/golang-jwt/jwt/v5 | Prefer a provider SDK for provider-specific token verification and key rotation. |
| JWK/JWS/JWE | github.com/lestrrat-go/jwx/v2 | Do not add it when JWT parsing alone satisfies the protocol. |
| WebSockets | github.com/gorilla/websocket | Use another implementation only after protocol, cancellation, backpressure, and close-handshake conformance tests. |
| Redis | github.com/redis/go-redis/v9 | Do not add Redis when local memory or the primary database satisfies the contract. |
| Scheduling | github.com/robfig/cron/v3 | Use platform scheduling for durable jobs that must survive process downtime. |
| Metrics | github.com/prometheus/client_golang | Use the deployment platform's established metrics SDK. |
| Tracing | go.opentelemetry.io/otel | Omit tracing for small local tools with no distributed request path. |
| Tests | testing, httptest, github.com/stretchr/testify, and github.com/testcontainers/testcontainers-go | Prefer small hand-written fakes over a mocking framework. |
| Concurrency | golang.org/x/sync and golang.org/x/time/rate | Use standard channels, mutexes, and contexts when sufficient. |
| JSON Patch | github.com/evanphx/json-patch/v5 | Keep merge-patch and RFC 6902 semantics explicit; do not manipulate patches as maps. |
| Compression | github.com/klauspost/compress | Use the standard library when its formats and performance are sufficient. |