mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Self-Hostedevaluationupdated 26 Aug 2026

lago review

Lago is an open-source system for recording product usage, applying pricing rules, managing credits and subscriptions, generating invoices, and coordinating payments. It solves the gap between raw events such as tokens or API calls and the financial records a customer and finance team need.

+60stars / 7d
Verdict

Our Lago events-processor build passed in 74 seconds, but 2 of 6 test packages failed because the linker could not find expression_go. Lago is a serious candidate for products whose pricing outgrew a payment provider, provided a platform team can own the service graph and validate every billing edge case. For a fixed monthly plan, use a managed billing product and avoid turning billing infrastructure into another internal platform.

We ran it

Lab card: what happened when we ran lagoScreenshot of lago (www.getlago.com)
Install✓ · 46s314 packages
Build✓ · 74s
Tests✗ · 29s4 passed · 2 failed of 6 (go test)
Repo170 files~12,045 lines of source · 19.9 MB · 9 CI workflows · Dockerfile · tests dir

Answers from our run

Does lago build from source?

Dependencies installed in 46 seconds (314 packages), and the build succeeded in 74 seconds. We cloned commit 0b56915 into a clean Debian container with 3 CPUs and no project-specific setup.

Do lago's tests pass?

Not all of them: 4 of 6 passed and 2 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use lago?

Small products that only need one fixed Stripe subscription: Lago adds a billing platform and several services to operate.

What are the alternatives to lago?

OpenMeter, Kill Bill, Stripe Billing. Our Lago events-processor build passed in 74 seconds, but 2 of 6 test packages failed because the linker could not find expression_go.

Setup2/5Compose helps, but production has many stateful services and secrets
Docs5/5Demo, architecture, deployment, APIs, and operating choices are detailed
Community5/510,410 stars with active releases and issue handling
Maturity4/5v1.52.0 is active; billing edge cases still need local proof

Discussed on

  1. hnIs ORM still an anti-pattern?451 points
  2. hnOpen Source does not win by being cheaper425 points
  3. hnStripe’s real pricing: a primer417 points
  4. hnUsing ClickHouse to scale an events engine237 points
  5. hnEngineers' billing nightmares204 points

Who it’s for

SaaS and AI product teams with usage-based or hybrid pricing.
Companies that want metering and billing logic separate from a payment processor's product catalog.
Platform teams prepared to operate databases, Redis, workers, event processing, and upgrades.
Developers who need billing through REST APIs, SDKs, webhooks, or an MCP-connected agent.

Who it’s NOT for

Small products that only need one fixed Stripe subscription: Lago adds a billing platform and several services to operate.
Teams unwilling to meet AGPLv3 obligations for modified network software or buy a commercial arrangement.
Organizations that cannot tolerate billing-date ambiguity: issue 771 reports wrong invoice periods after a trial extension crosses a month.
Operators expecting every self-hosted capability to be one process: the architecture separates API, UI, scheduler, Redis-backed workers, PDF generation, and optional event services.
Teams that want analytics disabled by default: the README says self-hosted instances collect basic product analytics unless you opt out.

Setup reality

Our sandbox entered ./events-processor/, installed 314 Go packages in 46 seconds, and built it in 74 seconds. Tests exited 1 after 29 seconds: 4 passed and 2 failed out of 6. The linker reported cannot find -lexpression_go, so the events-processor test binary could not be created.

The full Lago platform needs Docker for the quick path, an RSA private key, persistent storage, Redis, a database, and configuration for email, object storage, TLS, payments, and any integrations in use. The local demo includes disposable credentials only for its isolated Compose environment.

Our run covered the Go events processor, not the Rails API, frontend, Sidekiq workers, PDF service, or a billing transaction. The repository had 9 CI workflow files, a Dockerfile, and a tests directory. Production can also split event processing through Kafka or SQS.

Lago turns usage events into invoices and payments

Lago sits between a product and its revenue operations. Applications send usage events, which become billable metrics and pricing calculations. The same records feed credits, entitlements, subscription charges, invoices, and payment collection. This is broader than counting API requests. It gives finance and product teams a shared model for prepaid balances, minimum commitments, overages, customer overrides, and recurring fees.

The repository's maintained demo prices 3 sample AI requests by sending separate input-token and output-token events. It then retrieves current usage and retries one transaction to check idempotency. That is a good introduction because duplicate delivery is normal in event systems and disastrous in billing. The demo runs locally through Docker Compose with disposable credentials, then leaves the UI available for inspection until cleanup.

Payment providers stop being the product catalog

Lago keeps metering and pricing separate from Stripe, Adyen, GoCardless, or another payment provider. A team can change a usage formula or credit policy without recreating its business model inside a processor-specific catalog. The REST API, SDKs, webhooks, and UI all work with the same billing records. An MCP server is available from a separate MIT-licensed repository for agent access.

That agent route deserves the same control as a finance console. The README says MCP tools can read and write customers, invoices, usage, payments, credit notes, and coupons, using the permissions of the Lago API key. Limit that key, log tool calls, and keep human approval around sensitive changes. A chat interface does not make an invoice mutation less consequential.

What happened when we ran it

Our sandbox tested the Go project under ./events-processor/, not the whole Lago stack. Installing 314 packages took 46 seconds, and the build succeeded in 74 seconds. The test command ended after 29 seconds with exit code 1: 4 packages passed and 2 failed out of 6. The checkout was commit 0b56915 in a 3-CPU, 8 GB unprivileged Debian container with no secrets.

The failure was at link time. GCC called the system linker, which reported cannot find -lexpression_go; as a result, the processors/events_processor test binary could not be built. The supplied tail also showed the models and utils packages passing. It does not say why that library was absent, so the finding is simply that the documented Go test path did not complete in our fresh environment.

The repository contained 170 files, about 12,045 source lines, and occupied 19.9 MB before installed packages. It had 9 CI workflow files, a Dockerfile, and a tests directory. Those numbers describe the events-processor-focused checkout measured by the lab. We did not run the Rails API, browser application, Sidekiq jobs, Redis, PDF service, a payment provider, or a real invoice cycle.

Production means operating several queues and stores

The source deployment starts with Docker Compose and a generated RSA private key. Persistent use adds storage, SMTP, TLS, object storage, Redis, database settings, and upgrade work. Lago's architecture has a Rails API, scheduled jobs, Redis-backed Sidekiq queues, webhooks, invoices, payments, analytics, and optional dedicated workers. Event streaming can add an events consumer and the Go processor we built.

That separation lets operators scale a hot queue without resizing every service. It also creates more places for work to stall. Queue depth, dead jobs, event lag, webhook failures, invoice generation, and payment synchronization all need alerts. Release v1.52.0 moved the events-processor image toward a multi-architecture build workflow, while pull request 776 notes that CI did not yet use a warm layer cache for its Go module download.

Billing correctness needs scenario tests, not only health checks

Open issue 771 reports a self-hosted v1.45.2 case where extending a free trial from 30 to 41 days across a calendar month produced incorrect invoice periods and dates. The reporter also describes a skipped month and proration based on the old trial boundary. Issue 772 separately reports inconsistent subscription start dates between a grid and detail view for the same case.

Those reports do not prove every Lago version mishandles trials. They do show the kind of acceptance suite a buyer needs: month boundaries, leap days, time zones, trial changes, late events, credits, refunds, retries, and customer-specific prices. Reconcile Lago's output against an independent expected ledger before sending invoices. Billing software can be healthy at the HTTP layer while calculating the wrong period.

v1.52.0 shipped on the day of our research

GitHub showed 10,410 stars, 26 combined issues and pull requests, and a last push on August 26, 2026. Release v1.52.0 was published that day. It included an events-processor filter fix, connector image work, multi-architecture build changes, and a rewritten README. Current issue and release activity support the view that Lago is maintained; the open count is not a count of confirmed bugs.

The core repository uses AGPLv3. Lago's separate agent SDK and MCP projects use MIT, while managed and Premium options have their own commercial terms. Self-hosters should review the license and the default basic analytics collection before deployment. Lago earns a trial when pricing rules are a product capability. The failed 2-of-6 package result means source contributors should first reproduce the expression_go link setup on their own build image.

Alternatives

ProjectWhat it isPick it when
OpenMeterAn open-source metering and billing system focused on AI, API, and developer usage.pick this instead when real-time metering is the center of the project and you want to compare a narrower architecture.
Kill BillA long-running open-source subscription billing and payments platform.pick this instead when subscription lifecycle and payment plugins matter more than Lago's newer usage and agent interfaces.
Stripe BillingA managed subscription and usage-billing product tied closely to Stripe payments.pick this instead when operational simplicity matters more than self-hosting or payment-provider independence.

What people are saying

  1. [github-trending] getlago/lago

Sources

  1. Lago README
  2. Lago architecture guide
  3. Lago v1.52.0 release
  4. Trial extension invoice issue
  5. Subscription date mismatch issue

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →