Auth and tenant isolation
auth · tenant · auth/authbind
Every request carries a verified API key or JWT and a resolved tenant, or it is refused. Conflicting tenant sources fail closed; Static, Casbin, Cerbos and OpenFGA authorizers deny by default.
Auth, tenant isolation, quotas, audit, webhooks and an admin console in one commercial Go module from LabStack. Mount it in your own Echo app and install it with the standard Go toolchain.
quota/redisstoreauthCfg := auth.Config{ Schemes: map[string]auth.Scheme{"key": apiKey}, Fallback: auth.Require(map[string][]string{ "key": {"invoice:read"}, }),}guard, err := authbind.Middleware(authCfg, tenant.Config{ Selectors: []tenant.Selector{tenant.FromCredential()}, Required: true,})e.Group("/v1", guard).GET("/invoices", listInvoices)lim, err := quota.New(quota.Config{ Store: quota.NewMemoryStore(quota.MemoryConfig{}), Plans: []quota.Plan{{ID: "free", Limits: []quota.Limit{ quota.PerSecond("burst", 5).Burst(10), quota.PerMonth("requests", 10_000), }}},})identity, err := authbind.Quota()mw, err := quota.MiddlewareConfig{ Limiter: lim, Identity: identity,}.ToMiddleware() // explained 429se.Group("/v1", guard, mw).GET("/hello", hello)p, err := webhook.PrepareOutgoing(webhook.Outgoing{ Tenant: "t1", Destination: "credits", Version: "v1", Key: "invoice_42/grant", Type: "credit.add", Format: "json", Payload: []byte(`{"amount":100}`),})receipt, err := store.Enqueue(ctx, p)worker, err := webhookmem.NewWorker(store, webhookmem.WorkerConfig{})go func() { done <- worker.Run(ctx) }() // signs and deliversgo get A private Go module proxy and your go.sum.Middleware you mount in order on your own routes. Your handler stays yours; the stores are your PostgreSQL and Redis.
One module, echo.labstack.com/pro. Runnable examples, tests and package READMEs ship with it.
auth · tenant · auth/authbind
Every request carries a verified API key or JWT and a resolved tenant, or it is refused. Conflicting tenant sources fail closed; Static, Casbin, Cerbos and OpenFGA authorizers deny by default.
quota · quota/quotamcp · quota/quotastripe
Enforce per-tenant plans with an explained 429, reserve and settle AI usage, meter MCP tools, and export final consumption to Stripe meters with receipts and reconciliation.
admin
Plans, usage, credits, denials, audit, webhooks and execution records in one console mounted behind your own sign-in. Changes are previewed, confirmed and audited.


| Package | What it does |
|---|---|
auth | API keys and asymmetric JWT access tokens, one credential per request. |
tenant | Tenant resolution with membership checks and deny-by-default authorizers. |
auth/authbind | Maps verified identity into quota, audit, execution, admin and MCP. |
quota | Per-tenant plans, weighted costs, credits, concurrency limits and Echo middleware. |
quota/redisstore | Atomic Redis and Valkey store: standalone, Sentinel and Cluster. |
quota/quotamcp | Plan quotas and metering for MCP tools on the official MCP Go SDK. |
quota/quotastripe | Stripe meter export of final usage, with receipts and reconciliation. |
quota/quotaclient | Client-side RateLimit parsing, problems and polite retries. |
quota/quotaprom, quota/quotaotel | Opt-in Prometheus and OpenTelemetry hooks into your own systems. |
audit, audit/auditpg | Durable business audit events with redaction, recorded in PostgreSQL 16–18. |
execution, execution/pgstore | Records of declared external effects, with operator recovery. |
webhook, webhook/webhookpg | Signed inbox and outbox, retry workers and replay, durable on PostgreSQL. |
openapi | Operation-policy coverage reports and an ordered auth, quota and validation chain. |
problem | RFC 9457 problem catalog and Echo error rendering. |
redact | Input classification and bounded projection of stored evidence. |
admin | The embedded console, with panels for every package above. |
cmd/quota | Command line for plan checks, usage, resets, credits, keys and the outbox. |
Billed annually per organisation. Echo stays open source under the MIT license; Echo Pro subscriptions fund its maintenance.
Free MIT license
For every Go team
Was $1,500, now $990 / year
Founding price with code FOUNDING for the first 25 organisations, on the first three annual invoices, until 31 Mar 2027.
Up to 20 developers
Was $4,500, now $2,970 / year
Founding price with code FOUNDING for the first 25 organisations, on the first three annual invoices, until 31 Mar 2027.
Up to 100 developers
Secure checkout by Stripe; enter code FOUNDING for the founding price. Invoices, payment method and cancellation: billing portal.
| Feature | Echo | Team | Business |
|---|---|---|---|
| Packages | |||
| Echo framework and built-in middleware | Included | Included | Included |
| Official packages (echo-jwt, echo-otel, echo-prometheus, echo-contrib) | Included | Included | Included |
| Echo Pro packages | Not included | Included | Included |
| Developers | |||
| Developers per organisation | Any | Up to 20 | Up to 100 |
| Updates | |||
| New releases | Included | While subscribed | While subscribed |
| Keep received versions after the subscription ends | Included | Included | Included |
| Security fixes on owned release lines after it ends | Not included | Included | Included |
| Support | |||
| Community support on GitHub | Included | Included | Included |
| Support contract ($4,900 / year) | Not included | Separate | Separate |
| Billing | |||
| Price | Free | $1,500 / year | $4,500 / year |
| Founding price with FOUNDING | Not included | $990 / year | $2,970 / year |
| Billing | Not included | Annual | Annual |
After purchase you create your organisation's access token once. Then, on each machine:
GOPRIVATE, append ,echo.labstack.com to your existing value instead.go env -w GOPRIVATE=echo.labstack.com~/.netrc (Windows: %USERPROFILE%\_netrc), mode 600.machine go.labstack.io login <org> password <token>go get echo.labstack.com/pro@latestGitHub Actions: store the token as a repository secret and append the same line before go runs.
- name: Configure Echo Pro run: | go env -w GOPRIVATE=echo.labstack.com umask 077 grep -qs '^machine go.labstack.io ' ~/.netrc || echo "machine go.labstack.io login <org> password ${{ secrets.ECHO_PRO_TOKEN }}" >> ~/.netrcCorporate mirrors and GOPROXY chains with GONOSUMDB=echo.labstack.com are documented in the module README.
Documentation ships inside the module: start with README.md, then auth/README.md, quota/README.md and webhook/README.md. Open the module's source directory with:
cd "$(go list -m -f '{{.Dir}}' echo.labstack.com/pro)"Echo, its built-in middleware and the official packages (echo-jwt, echo-otel, echo-prometheus and echo-contrib) are open source under the MIT license. Echo Pro is a separate module that builds on them.
No. Echo stays open source under the MIT license. Echo Pro is a separate module that builds on Echo and does not change its license.
Echo Pro is a large body of maintained code: auth, tenant isolation, quotas and durable stores tested against PostgreSQL 16–18, Redis and Valkey. Subscriptions pay for that work and fund Echo's maintenance.
The Echo Pro commercial license. While subscribed, your organisation may use, copy and modify it and include it in its own applications and services, including programs it distributes and services it operates. It may not pass the source code to third parties or offer it as a standalone library or competing product.
No. The library sends nothing anywhere by itself and never checks a key. Metrics and tracing are opt-in hooks into your own systems.
You keep the versions you already have, plus security fixes on the release lines you owned. New versions need an active subscription.
There is no free trial. This page, the package list and the code samples show what you get. If Echo Pro is not right for you, you get a full refund within 30 days of purchase.
Team and Business are billed annually per organisation. Support and Enterprise are invoiced annually. Email [email protected] for billing details your company needs.
Anything else? Email [email protected].