Skip to content
Pro

Echo Pro

Multi-tenant APIs on Echo v5, without building the plumbing.

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.

  • Go 1.26 and 1.27
  • Echo v5.4.2 or later
  • PostgreSQL 16–18
  • Redis or Valkey (optional) for quota/redisstore
authCfg := 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 429s
e.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 delivers
  • No telemetry The library sends nothing anywhere by itself.
  • No license checks at run time Your token only downloads modules.
  • Keep what you bought Versions you received stay licensed after you stop paying.
  • Plain go get A private Go module proxy and your go.sum.

Where it sits in a request

Middleware you mount in order on your own routes. Your handler stays yours; the stores are your PostgreSQL and Redis.

Echo Pro request pathA request passes auth (auth/authbind), then tenant resolution, then quota, then reaches your handler. The handler writes audit events, execution records and webhook outbox messages to stores. The admin console reads from those stores.RequestHTTP or MCP tool callauthauth/authbindtenantresolve and authorizequotaplans, credits, 429Your handlerbusiness logicauditbusiness eventsexecutionexternal effectswebhook outboxsigned deliveryAdmin consolebehind your own sign-inreadsEcho Pro request pathA request passes auth (auth/authbind), then tenant resolution, then quota, then reaches your handler. The handler writes audit events, execution records and webhook outbox messages to stores. The admin console reads from those stores.RequestHTTP or MCP tool callauthauth/authbindtenantresolve and authorizequotaplans, credits, 429Your handlerbusiness logicauditbusiness eventsexecutionexternal effectswebhook outboxsigned deliveryreadsAdmin consolebehind your own sign-in

What's in the box

One module, echo.labstack.com/pro. Runnable examples, tests and package READMEs ship with it.

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.

Quotas, AI and MCP metering, Stripe

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.

Embedded admin console

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.

Echo Pro admin console overview: a pipeline from requests through executions, outbox and webhooks to receivers, with event counts for the selected window.Echo Pro admin console overview: a pipeline from requests through executions, outbox and webhooks to receivers, with event counts for the selected window.
The admin console overview, from the demo catalog.
Echo Pro packages
PackageWhat it does
authAPI keys and asymmetric JWT access tokens, one credential per request.
tenantTenant resolution with membership checks and deny-by-default authorizers.
auth/authbindMaps verified identity into quota, audit, execution, admin and MCP.
quotaPer-tenant plans, weighted costs, credits, concurrency limits and Echo middleware.
quota/redisstoreAtomic Redis and Valkey store: standalone, Sentinel and Cluster.
quota/quotamcpPlan quotas and metering for MCP tools on the official MCP Go SDK.
quota/quotastripeStripe meter export of final usage, with receipts and reconciliation.
quota/quotaclientClient-side RateLimit parsing, problems and polite retries.
quota/quotaprom, quota/quotaotelOpt-in Prometheus and OpenTelemetry hooks into your own systems.
audit, audit/auditpgDurable business audit events with redaction, recorded in PostgreSQL 16–18.
execution, execution/pgstoreRecords of declared external effects, with operator recovery.
webhook, webhook/webhookpgSigned inbox and outbox, retry workers and replay, durable on PostgreSQL.
openapiOperation-policy coverage reports and an ordered auth, quota and validation chain.
problemRFC 9457 problem catalog and Echo error rendering.
redactInput classification and bounded projection of stored evidence.
adminThe embedded console, with panels for every package above.
cmd/quotaCommand line for plan checks, usage, resets, credits, keys and the outbox.

Pricing

Billed annually per organisation. Echo stays open source under the MIT license; Echo Pro subscriptions fund its maintenance.

Echo

Free MIT license

For every Go team

  • The Echo framework and built-in middleware
  • echo-jwt, echo-otel, echo-prometheus, echo-contrib
  • Community support on GitHub
Get started

Secure checkout by Stripe; enter code FOUNDING for the founding price. Invoices, payment method and cancellation: billing portal.

Support

$4,900 / year · A support contract, invoiced annually.

Contact us

Enterprise

From $12,000 / year · More than 100 developers, or group companies.

Contact us
Compare plans
FeatureEchoTeamBusiness
Packages
Echo framework and built-in middlewareIncludedIncludedIncluded
Official packages (echo-jwt, echo-otel, echo-prometheus, echo-contrib)IncludedIncludedIncluded
Echo Pro packagesNot includedIncludedIncluded
Developers
Developers per organisationAnyUp to 20Up to 100
Updates
New releasesIncludedWhile subscribedWhile subscribed
Keep received versions after the subscription endsIncludedIncludedIncluded
Security fixes on owned release lines after it endsNot includedIncludedIncluded
Support
Community support on GitHubIncludedIncludedIncluded
Support contract ($4,900 / year)Not includedSeparateSeparate
Billing
PriceFree$1,500 / year$4,500 / year
Founding price with FOUNDINGNot included$990 / year$2,970 / year
BillingNot includedAnnualAnnual
  • Annual billing only; no monthly plan.
  • Full refund within 30 days of purchase.
  • Prices exclude tax. Sold to businesses: checkout asks for your company name, and a tax ID where supported.
  • After your subscription ends you keep the versions you have, plus security fixes on the release lines you owned.

Install

After purchase you create your organisation's access token once. Then, on each machine:

  1. Mark the module private. If you already set GOPRIVATE, append ,echo.labstack.com to your existing value instead.
    go env -w GOPRIVATE=echo.labstack.com
  2. Add this line to ~/.netrc (Windows: %USERPROFILE%\_netrc), mode 600.
    machine go.labstack.io login <org> password <token>
  3. Add Echo Pro to your module.
    go get echo.labstack.com/pro@latest

In CI

GitHub Actions: store the token as a repository secret and append the same line before go runs.

.github/workflows/ci.yml
- 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 }}" >> ~/.netrc

Corporate mirrors and GOPROXY chains with GONOSUMDB=echo.labstack.com are documented in the module README.

Read the docs

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)"

Questions

What stays free?

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.

Is Echo going closed source?

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.

Why paid?

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.

What license is Echo Pro under?

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.

Does Echo Pro send telemetry or check a license at run time?

No. The library sends nothing anywhere by itself and never checks a key. Metrics and tracing are opt-in hooks into your own systems.

What happens when the subscription ends?

You keep the versions you already have, plus security fixes on the release lines you owned. New versions need an active subscription.

Can we evaluate before buying, or get a refund?

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.

Invoices and purchase orders?

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].

Build the product, not the plumbing.