mrkeyoor.com_
Sat 17 Oct 13:34 UTC
Self-Hostedevaluationupdated 26 Aug 2026

flexprice review

Flexprice is a metering and billing system for products that charge by usage, seats, credits, subscriptions, or a mixture of those models. Applications send usage events to it, and Flexprice applies pricing, balances, entitlements, and invoice rules before passing results toward payment and accounting systems.

-6stars / 7d
Verdict

Our Flexprice run built in 233 seconds, but 2 of 48 Go test packages failed after a 266-second suite. Trial it when usage pricing and credits have outgrown payment-provider primitives, and only if the team can operate its PostgreSQL, Kafka, ClickHouse, Redis, and Temporal stack. Do not put invoice amounts or entitlement checks into production until the two failures are identified and a shadow reconciliation matches your existing billing records.

We ran it

Lab card: what happened when we ran flexpriceScreenshot of flexprice (flexprice.io)
Install✓ · 79s443 packages
Build✓ · 233s
Tests✗ · 266s46 passed · 2 failed of 48 (go test)
Repo2258 files~675,282 lines of source · 45.3 MB · 10 CI workflows · Dockerfile

Answers from our run

Does flexprice build from source?

Dependencies installed in 79 seconds (443 packages), and the build succeeded in 233 seconds. We cloned commit e4b5303 into a clean Debian container with 3 CPUs and no project-specific setup.

Do flexprice's tests pass?

No. The project's own test command finished in 266 seconds and reported 46 passed, 2 failed (go test).

Who should not use flexprice?

Small SaaS products with flat subscriptions that already fit their payment provider: Flexprice adds several data and workflow services.

What are the alternatives to flexprice?

Lago, OpenMeter, Kill Bill. Our Flexprice run built in 233 seconds, but 2 of 48 Go test packages failed after a 266-second suite.

Setup2/5Build passed, but the stack has five infrastructure services
Docs4/5Setup, OpenAPI, services, and optional S3 are documented
Community4/54,448 stars with same-day pushes and issue activity
Maturity3/5v2.1.26 is active; our suite still had two failures

Discussed on

  1. hnShow HN: Nomod payment integrated into usage-based billing stack9 points
  2. hnShow HN: Flexprice: Open-Source Usage-Based Billing Toolkit7 points
  3. hnShow HN: Credit-to-currency conversion controls for wallet-based billing7 points
  4. hnShow HN: A customer billing portal built to reduce "can you resend the invoice?6 points
  5. hnShow HN: Custom Pricing Units in Flexprice (price in credits, bill in USD)5 points

Who it’s for

SaaS and AI-product teams whose pricing depends on measured usage or prepaid credits.
Engineering groups that need metering, entitlements, invoices, and payment integrations under one API.
Organizations prepared to reconcile every billing output against source usage and finance records.
Self-hosters able to operate PostgreSQL, Kafka, ClickHouse, Redis, Temporal, workers, migrations, and backups.

Who it’s NOT for

Small SaaS products with flat subscriptions that already fit their payment provider: Flexprice adds several data and workflow services.
Teams that require a clean test suite before billing evaluation: our run ended with 46 passing and 2 failing packages.
Organizations that cannot accept AGPL for the core or commercial terms for ee and internal/ee: the README describes an open-core split.
Deployments standardizing on Kafka 4.x without compatibility work: issue 2400 reports rejected offset-commit requests from the current client path.

Setup reality

Our Go sandbox installed 443 packages in 79 seconds. The build succeeded in 233 seconds. Tests failed with exit code 1 after 266 seconds: go test reported 46 passed and 2 failed out of 48. The supplied log tail ends at FAIL and does not identify the two failing packages.

The default development stack starts PostgreSQL, Kafka, ClickHouse, Redis, Temporal, the API, a consumer, and a worker through Docker Compose. Migrations and Kafka initialization are part of setup. Optional invoice storage needs an S3 bucket and AWS credentials.

The checkout occupied 45.3 MB with 2,258 files and about 675,282 source lines. It has a Dockerfile, Compose configuration, 10 CI workflow files, and no top-level tests directory. Production requires durable queues and databases, secrets, monitoring, backups, and reconciliation against payment and accounting systems.

Flexprice sits between product usage and the money systems

Flexprice accepts usage events from an application or data pipeline, associates them with customers and features, then applies plans, meters, credits, and entitlements. It can produce invoices and send billing information toward payment, CRM, CPQ, and accounting tools. This is more than a counter in front of Stripe: it becomes the place where product activity turns into an amount owed and where paid access can be allowed or denied.

That position makes flexibility useful and mistakes expensive. The data model covers usage-based, seat-based, prepaid, promotional, tiered, and hybrid prices. Customers can have plan overrides and credit wallets. Our checkout contained 2,258 files and about 675,282 source lines in 45.3 MB. A codebase of that size can encode many pricing cases, while adopters still need to prove their own rounding, time-zone, retry, and adjustment rules.

The development stack includes five infrastructure services

The documented quick setup runs make dev-setup, which starts PostgreSQL, Kafka, ClickHouse, Redis, and Temporal before starting the API, consumer, and worker. It also runs database migrations and initializes Kafka. PostgreSQL holds transactional application data, Kafka carries events, ClickHouse supports usage storage and aggregation, Redis supports runtime coordination, and Temporal runs workflows. Docker Compose makes these pieces start together without making them one failure domain.

Running the Go server outside containers still requires those services. Optional invoice storage adds an S3 bucket, access credentials, region settings, and presigned-download behavior. Our dependency installation added 443 Go packages in 79 seconds, a reasonable download for a large service, but the local source build does not represent the storage, queue, and workflow capacity needed for real customer events.

What happened when we ran it

Our fresh Debian sandbox cloned commit e4b5303 with 3 CPUs and 8 GB of RAM. Go installed 443 packages in 79 seconds. The build completed successfully in 233 seconds. The repository included 10 CI workflow files, a Dockerfile, and Compose configuration. It had no top-level tests directory, though the Go packages contained tests discoverable by the command.

The test step ran for 266 seconds and exited with code 1. The harness counted 46 passing and 2 failing packages out of 48. The supplied tail listed successful validator and webhook packages, several packages with no test files, and a final FAIL; it did not include the names or messages for the two failures. We cannot judge their billing impact from that tail, so the next evaluation step is to reproduce the complete output.

Billing needs replay and reconciliation before cutover

A passing build shows that the code compiles. It does not prove that an event retry cannot be billed twice, a late event lands in the correct period, a plan change uses the intended boundary, or credits expire in the right order. Create a corpus of invoices from the system you already trust, replay the exact source events through Flexprice, and compare line items, totals, balances, and entitlements.

Our 46-of-48 package result is close enough to justify investigation and too weak for blind adoption. Keep the trial in shadow mode, where Flexprice calculates without charging customers or enforcing access. Include duplicate identifiers, out-of-order events, cancellations, backdated changes, rounding at currency precision, and month boundaries. A billing discrepancy needs the original event, pricing version, calculation trace, and correction path, not only a dashboard total.

Kafka and Temporal add known operational edges

Open issue 2400 reports Kafka 4.x rejecting the offset-commit version used by the current Sarama client path. Issue 2399 reports a Temporal client exiting during transient frontend unhealthiness at startup. Issue 2398 describes ClickHouse producing excessive one-row parts for singleton event deliveries. These reports concern different parts of the stack, but each can affect ingestion availability or storage behavior.

Pin compatible service versions rather than following floating tags. Issue 2530 specifically asks the migration hook to stop using soldevelo/kafka:latest, which is a concrete warning against an unbounded infrastructure dependency. Release v2.1.26 added configurable Kafka topics and per-topic settings to the Helm chart, plus migration verification changes. Treat the chart as code, review every image tag, and test restart ordering with queues already containing events.

Security work reaches invoices, tenants, and webhooks

Usage events and invoices carry customer identifiers, product behavior, and financial data. Tenant boundaries must hold across ingestion, aggregation, queries, exports, and retries. Open issue 2489 asks for tenant and environment values in a unique-count hash as defense in depth. Issue 2490 asks for rate limiting on a webhook retry endpoint after a security assessment. Neither report alone establishes a working exploit, but both name boundaries worth testing.

The repository uses an open-core license: the README says the core is AGPLv3, while ee and internal/ee use a commercial license. Review both code paths and deployment terms before adopting features. The 675,282-line checkout is large enough that license inventory and security review should follow directories and build artifacts, rather than relying on a percentage claim in marketing copy.

Active releases make defects easier to discuss, not harmless

GitHub reported 4,448 stars, 212 combined issues and pull requests, and a push on August 26, 2026. Release v2.1.26 landed August 24 with usage-record search, Kafka chart settings, plan-change behavior, observability, migration checks, and integration work. The short gap between release and last push shows active development; the combined open count includes pull requests and should not be read as a bug total.

Flexprice is worth a controlled proof when usage billing has become its own engineering system. Our 233-second successful build shows the source is workable, while 2 failing packages and 5 infrastructure services make a direct cutover hard to defend. Reproduce the failures, pin every dependency, shadow existing invoices, and test recovery from queue and workflow interruptions before Flexprice can influence money or customer access.

Alternatives

ProjectWhat it isPick it when
Lago gh↗An open-source usage-billing platform with metering, subscriptions, payments, and revenue analytics.pick this instead when its billing workflow, integrations, and operating model match finance requirements better.
OpenMeterA metering and billing system focused on usage events for AI, API, and infrastructure products.pick this instead when usage metering is the primary problem and you want a narrower architecture to compare.
Kill BillA mature subscription billing and payment platform with a plugin architecture.pick this instead when established subscription and payment workflows matter more than an AI-focused Go stack.

What people are saying

  1. [github-trending] flexprice/flexprice

Sources

  1. Flexprice repository and README
  2. Flexprice setup guide
  3. Flexprice v2.1.26 release
  4. Kafka 4.x compatibility report
  5. Temporal startup report
  6. ClickHouse one-row parts report
  7. Webhook retry rate-limit issue
  8. Unique-count tenant isolation issue

More self-hosted reviews

playport · edge-smart-doh · Comma · ProsperoEden · zulu · node_exporter · the whole board →