External dependencies
Following the "centralize, don't abstract" principle, neither the framework nor any of its 14 standalone modules hide the libraries underneath them: their types flow freely through the public API. This page is the full inventory: what each module uses, at what version, and where its official documentation lives, in the same order as the module map. For a pattern-level breakdown, see Design patterns.
go.mod at the time of writing. A generated project's go.mod follows go mod tidy; go get -u github.com/gp-system/<module> bumps one module's version independently of the others. The framework pins a public gp-system module to a specific commit on its main branch (a v0.0.0-<date>-<hash> pseudo-version), until that module cuts a tagged release.The point of the grouping below: adopting one module never drags in another module's dependencies. go get github.com/gp-system/errs links nothing but the standard library; go get github.com/gp-system/dbx/pg links pgx and its own OTel tracer, nothing from auth, mail or the other ten modules. Only where one module's own go.mod requires another (auth→httperr, events→queue+dbx, notify→mail+dbx) does adopting it transitively pull in that dependency's footprint too, and that is always a gp-system/* module, documented on its own overview page, never a surprise 3rd-party library.
errs
github.com/gp-system/errs. Zero third-party dependencies: only the standard library (errors, fmt, runtime, log/slog). See errs: Overview.
envconf
github.com/gp-system/envconf. See envconf: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| caarlos0/env/v11 | v11.4.1 | env var → struct parsing | github.com/caarlos0/env |
| joho/godotenv | v1.5.1 | .env file loading | github.com/joho/godotenv |
httperr (+httperr/validate)
github.com/gp-system/httperr. See httperr: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| go-playground/validator/v10 | v10.30.3 | struct-tag-based validation | github.com/go-playground/validator |
github.com/gp-system/errs | v0.1.0 | the error type httperr renders | errs: Overview |
dbx (+dbx/pg, dbx/bunx, dbx/seed)
github.com/gp-system/dbx. See dbx: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| jackc/pgx/v5 | v5.10.0 | PostgreSQL driver + connection pool | github.com/jackc/pgx |
| exaring/otelpgx | v0.11.1 | OTel tracer over the pgx pool | github.com/exaring/otelpgx |
uptrace/bun (+dialect/pgdialect, extra/bunotel) | v1.2.18 | SQL-first query builder, PostgreSQL dialect, OTel query hook | bun.uptrace.dev |
| pressly/goose | in the generated project | SQL migrations, driven by cmd/migrate | github.com/pressly/goose |
| sqlc | optional, project-side | SQL → typed Go code generator; dbx/pg.DBTX is compatible with it | sqlc.dev |
logx (+logx/monolog)
github.com/gp-system/logx. logx itself imports nothing beyond the standard library; only its logx/monolog subpackage requires github.com/gp-system/errs, so adopting logx alone (without the monolog formatter) pulls in nothing at all. See logx: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
github.com/gp-system/errs | v0.1.0 | logx/monolog's stack-trace rendering (errs.CodeOf, errs.FullFrames) | errs: Overview |
paginate
github.com/gp-system/paginate. No dependency beyond github.com/gp-system/errs (ErrInvalidCursor and friends). See paginate: Overview.
queue
github.com/gp-system/queue. See Queue.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| hibiken/asynq | v0.26.0 | Valkey-backed distributed task queue | github.com/hibiken/asynq |
| redis/go-redis/v9 | v9.21.0 | Redis-protocol client (connects to Valkey) | redis.uptrace.dev |
events (+events/outbox, events/scheduler)
github.com/gp-system/events. Its own go.mod requires github.com/gp-system/queue and github.com/gp-system/dbx (an already-extracted module depending on two others), so adopting events pulls in both of their footprints; see events: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| hibiken/asynq | v0.26.0 | the outbox relay's and scheduler's task dispatch | github.com/hibiken/asynq |
| redis/go-redis/v9 | v9.21.0 | the scheduler's leader-election lease | redis.uptrace.dev |
| jackc/pgx/v5 | v5.10.0 | events/outbox's pgx-backed store | github.com/jackc/pgx |
| uptrace/bun | v1.2.18 | events/outbox's bun-backed store | bun.uptrace.dev |
| google/uuid | v1.6.0 | outbox row / task IDs | github.com/google/uuid |
auth (+auth/rbac, auth/policy)
github.com/gp-system/auth. A leaf module: its own go.mod requires nothing beyond golang-jwt/jwt/v5, not even github.com/gp-system/errs. It returns plain sentinel errors and never writes a response; the framework's server package (which does depend on httperr) provides the RFC 9457 Problem rendering on top. See Authentication and Using auth standalone.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| golang-jwt/jwt/v5 | v5.3.1 | JWT signing and verification | github.com/golang-jwt/jwt |
mail (+mail/smtp, mail/mjml)
github.com/gp-system/mail. See Mail: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| wneessen/go-mail | v0.8.1 | SMTP client, mail/smtp | github.com/wneessen/go-mail |
| Boostport/mjml-go | v0.16.0 | MJML → HTML compilation (WASM, mjml.io language), mail/mjml | github.com/Boostport/mjml-go |
go.opentelemetry.io/otel (+/trace) | v1.44.0 | spans around outgoing sends | opentelemetry.io/docs/languages/go |
notify (+notify/broadcast, notify/database)
github.com/gp-system/notify. Its own go.mod requires github.com/gp-system/mail and github.com/gp-system/dbx, so adopting notify pulls in both of their footprints; see Notifications: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| centrifugal/centrifuge | v0.38.0 | notify/broadcast's live-push node/publisher | github.com/centrifugal/centrifuge |
| uptrace/bun | v1.2.18 | notify/database's store | bun.uptrace.dev |
| google/uuid | v1.6.0 | notification row IDs | github.com/google/uuid |
| go.opentelemetry.io/otel | v1.44.0 | spans around dispatch | opentelemetry.io/docs/languages/go |
storage (+storage/memory, storage/local, storage/storagetest)
github.com/gp-system/storage. The Driver/Disk/Manager core and its in-memory/local-disk drivers add nothing beyond OTel: no object-storage SDK is linked unless you also import the S3 driver below. See Storage: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
go.opentelemetry.io/otel (+/metric, /trace) | v1.44.0 | spans and metrics around storage operations | opentelemetry.io/docs/languages/go |
minio-storage-driver
github.com/gp-system/minio-storage-driver, storage's S3-compatible driver as a standalone module (the declared package name is s3): its own repo and its own go.mod, so only projects that actually need S3 pay for this dependency. See S3.
| Dependency | Version | Role | Docs |
|---|---|---|---|
| minio/minio-go/v7 | v7.2.1 | S3-compatible object storage client | github.com/minio/minio-go |
telemetry (+telemetry/otelx, telemetry/sentryx)
github.com/gp-system/telemetry. Its own go.mod requires github.com/gp-system/errs (used by telemetry/sentryx to read a captured error's stack trace, code and public message), nothing else: the console slog.Handler is supplied by the caller through WithLogHandler, so logx is one option among many, not a dependency, see logx: Overview and Telemetry: Overview.
| Dependency | Version | Role | Docs |
|---|---|---|---|
github.com/gp-system/errs | v0.1.0 | the error type telemetry/sentryx reads a stack trace, code and public message from | errs: Overview |
getsentry/sentry-go (+/otel, /otel/otlp) | v0.48.0 | error reporting, breadcrumbs, and the Sentry span exporter wired into the OTel tracer provider | docs.sentry.io/platforms/go |
| go.opentelemetry.io/otel | v1.44.0 | OTel API (trace, metrics) | opentelemetry.io/docs/languages/go |
| go.opentelemetry.io/otel/sdk | v1.44.0 | OTel SDK implementation | opentelemetry.io/docs/languages/go |
go.opentelemetry.io/otel/sdk/log, /log | v0.20.0 | OTel logs SDK/API (pre-1.0, which is why telemetry isolates it behind telemetry/otelx) | opentelemetry.io/docs/languages/go |
| go.opentelemetry.io/contrib/bridges/otelslog | v0.19.0 | slog → OTel log bridge | opentelemetry-go-contrib |
| go.opentelemetry.io/contrib/exporters/autoexport | v0.69.0 | env-driven exporter selection (OTEL_TRACES_EXPORTER etc.) | opentelemetry-go-contrib |
The framework itself
github.com/gp-system/framework: the CLI plus the four chassis packages (app, server, worker, realtime). These are on top of, not instead of, the module dependencies above: worker requires queue+events, realtime requires notify+auth+queue, and so on, per the module map.
| Dependency | Version | Role | Framework package | Docs |
|---|---|---|---|---|
| go-chi/chi/v5 | v5.3.1 | net/http-based router | server | github.com/go-chi/chi |
| go-chi/cors | v1.2.2 | CORS middleware for chi | server | github.com/go-chi/cors |
| go.opentelemetry.io/contrib/.../otelhttp | v0.69.0 | net/http OTel instrumentation | server | opentelemetry-go-contrib |
| hibiken/asynq | v0.26.0 | the worker chassis's task server | worker | github.com/hibiken/asynq |
| centrifugal/centrifuge | v0.38.0 | the realtime gateway's node | realtime | github.com/centrifugal/centrifuge |
| oapi-codegen/oapi-codegen/v2 | v2.8.0 | OpenAPI → Go server code generator, codegen-time only: not linked into the running binary | the generated project's go tool | github.com/oapi-codegen/oapi-codegen |
| spf13/cobra | v1.10.2 | CLI command tree | cmd/gpsystem, internal/cli | cobra.dev |
| golang.org/x/tools | (goimports) | formats generated files | internal/generator | pkg.go.dev/golang.org/x/tools |
| gopkg.in/yaml.v3 | v3.0.1 | gpsystem.yaml manifest serialization | internal/generator | pkg.go.dev/gopkg.in/yaml.v3 |
| @typespec/compiler, http, openapi, openapi3 | 1.10.0 (npm, in the generated project) | API contract spec language → OpenAPI 3.0 compilation | spec/typespec/** | typespec.io/docs |
Dev tooling
| Tool | Role | Docs |
|---|---|---|
| mise | toolchain pinning (Go, Node) + task runner (build, test, lint, e2e, ...) | mise.jdx.dev |
| golangci-lint (v2 schema) | static analysis, mise run lint | golangci-lint.run |
commitlint (@commitlint/config-conventional) | Conventional Commits enforcement in the gpsystem repo | commitlint.js.org |
| RustFS | S3-compatible object store for dev/compose (instead of MinIO) | rustfs.com |
| mailpit | SMTP trap for dev/compose | github.com/axllent/mailpit |
| PostgreSQL 17 (alpine image) | dev database in compose.yml | hub.docker.com/_/postgres |
| Valkey (alpine image) | queue/scheduler backend in compose.yml | hub.docker.com/_/valkey |
Where to next
- The design patterns behind these dependencies (why
storage'sDrivermodel ortelemetry/sentryxis a wrapper and the rest aren't) are covered in Design patterns. - Every module's environment variables are listed on Configuration.