What is Limiter?
Limiter is an open source, privacy-friendly Plan and Feature management solution for your SaaS products.
Why use Limiter?
Limiter helps you bridge the gap between formulating a pricing model and actually implementing it.
It provides an opinionated framework to handle the things that you would normally have to write (a lot more) code for:
- Keep track of the plans and the features that they contain.
- Keep track of which users belong to which plans, and by extension, whether they are entitled to a particular feature.
- Support multiple feature types, ranging from basic toggles, to limits and quotas.
- Track usage of a feature, determine whether a user has exceeded any limits set.
- Hook into your payment provider's subscription lifecycle and assign users to the correct plans.
- Provide a single pane of glass where you can view usage insights of all features, across plans.
These terms are used widely within the Limiter docs, and here's our interpretation of them.
Plan management is the ability to create plans and curate the features that go into these plans. Features can be reused across plans or be specific to a particular plan. This grants you the flexibility to implement various types of pricing models from tier-based plans to bespoke plans for enterprise use-cases.
An entitlement refers to the right to use a feature. In the context of a plan-based SaaS app, it is essentially whether Bob on Plan A can use Feature X.
In Limiter, users are bound to plans and plans contain features. By transitive property, it determines whether a user is entitled to a feature via said plan.
In some cases, a feature may be more than simply being enabled or disabled in a given plan. You may want to impose a limit on the number of times a user can use a particular feature. For example, capping the number of workspaces you can create in a project management tool.
A quota is a usage limit is periodically reset. A common use-case is to limit the daily usage of an expensive API call.
A feature flag in is simplest form, is an if-else statement, gating the execution of a freshly written block of code. Limiter builds on top of this foundation to allow a feature flag to be used for entitlements, usage limits and quotas.
A project is a logical grouping of plans. Typically, one SaaS is a project. Although you can also use multiple projects per SaaS to cater for different environments eg. development, staging, production.
A plan is a logical grouping of features. Each plan should map to a subscription plan that you have set up on your payments provider. Your users should be bound to plans once they have paid for a subscription (or bound to a 'Free' plan by default).
A feature is essentially a feature flag on steriods. It is stateful and can contain metadata as well as keep track of usage on a per user basis.
The feature matrix is a json document that contains a mapping of plans to features for a project.
The feature usage is a json document that contains a mapping of features to usage counts for a user.
Note that Limiter stores a flat map of features to usage counts. The exact same feature name could be used in multiple plans and we would still increment / decrement the same counter. This is because a user is expected to be in one and only one plan at any point in time.