Leave Localhost logoLeave LocalhostDocs
Billing

Free, Pro, and Lifetime Plans

Leave Localhost ships with a three-tier plan structure that covers the most common SaaS billing models.

Leave Localhost ships with a three-tier plan structure that covers the most common SaaS billing models.

Plan Structure

PlanKeyIntervalCheckoutCapabilities
FreefreeNoNone
Pro Monthlypro_monthlyMonthYesFull Pro
Pro Yearlypro_yearlyYearYesFull Pro
Pro Lifetimepro_lifetimeOne-timeYesFull Pro (never expires)

Free Plan

The Free plan is the default for every new workspace. It has no capabilities, which means:

  • No access to feature.pro gated features
  • Cannot invite members (workspace.members.invite missing)
  • No billing portal access

No checkout is needed — Free is the absence of a paid subscription.

Pro Plans (Monthly / Yearly)

Pro plans are recurring subscriptions. They grant:

  • feature.pro — unlock Pro features
  • workspace.members.invite — invite team members
  • workspace.members.limit.10 — up to 10 members per workspace
  • billing.portal — access the provider's customer portal

Grants from subscriptions have an expiresAt set to the current billing period end. When the subscription renews, a new webhook event refreshes the grants with the new period end.

If a subscription is canceled:

  • cancelAtPeriodEnd is set to true
  • Grants remain active until the period ends
  • At period end, the subscription webhook revokes the grants

Pro Lifetime

The lifetime plan is a one-time purchase. It creates grants with expiresAt: null, meaning they never expire.

For Stripe, lifetime purchases are handled via payment_intent.succeeded events (not subscription events). Polar and Lemon Squeezy handle lifetime through their subscription mechanisms with appropriate status mapping.

Lifetime Refunds

If a lifetime purchase is fully refunded (Stripe charge.refunded event), the grants are revoked via the syncBillingGrants revoke action.

Billing State

The app computes a BillingState for each organization:

StatusMeaning
freeNo subscription, no grants, provider configured
activeActive subscription or active grants
trialingSubscription in trial period
past_duePayment failed, grace period
canceledSubscription canceled
incompleteCheckout started but not completed
unconfiguredNo billing provider configured

Plan Display in the UI

The sidebar footer shows a badge with the current plan name (e.g. "Pro" or "Free"). Users with billing.read permission see this badge. Users with billing.manage permission can access checkout and the customer portal.

Next Reads

On this page