Skip to content

Core Concepts

RevTurbine has a small vocabulary. Learn three primitives and you can read the rest of the docs.

  • Entitlements — who can do what. An entitlement answers “is this user allowed to do X, and how much is left?” Feature access, usage limits, credits, and seats are all entitlements. You check them with can() / checkEntitlement.

  • Gates — where your app asks. A gate is the checkpoint in your code or UI where you consult an entitlement before letting something happen — a <Gate> around a subtree, a gate('export', …) around an action, or a bare can() check. Same question, different shapes.

  • Placements — what to show when it matters. A placement is authored presentation that the SDK selects locally: an upgrade prompt when a gate denies, a “running low” banner near a limit, a trial-ending toast. You render one with a <Slot>.

That’s the whole loop: an entitlement defines the policy, a gate asks the question in your app, and a placement is what RevTurbine shows when the answer should change behavior.

All three primitives are driven by your Playbook — the portable config RevTurbine evaluates. It holds the plans, entitlement rules (feature / usage-limit / credits / seats), trials, segments (targeting), and placements. A PM edits the Playbook in the RevTurbine dashboard and republishes; your app code doesn’t change.

RevTurbine decides for a specific user, so you tell it who’s asking: an id, the user’s current plan handle, reported usage, and any custom traits. You set this with rt.identify(userId, { plan_handle, usage, …}) or the <RevTurbineProvider> options.user. Entitlement checks and segment targeting both read from it. The dedicated RevTurbineUserContext guide covers every field, update semantics, and server-derived context.

The same primitives work whether the SDK reads a Playbook bundled with your app (local mode, local_only), syncs it from RevTurbine (hosted mode, revturbine_server), or syncs it through your own endpoints (custom_endpoints). See Runtime Modes.

TermMeaning
EntitlementWhat a user is allowed to do / how much is left (feature, usage limit, credits, seats)
GateA checkpoint where your app consults an entitlement (<Gate>, gate(), can())
PlacementThe UI the decision engine shows at the right moment (rendered by <Slot>)
PlaybookThe portable config RevTurbine evaluates (plans, entitlements, segments, placements)
SegmentA named rule over user traits used for targeting and experiments
SlotThe component that renders a placement (<Slot>)
UserAn application-identified person; user.id is distinct from their account
AccountAn organization or billing scope identified by account_id; membership is enforced by your app
TriggerA supported event or condition that makes a placement eligible for consideration

“Moment” can describe when your app asks for a decision, but SDK 0.12.4 has no public moment() function. Use the documented trigger, Gate, Slot, and headless APIs. Likewise, proposed InlineSlot/OverlaySlot names are not current exports. A slot is a place to render; an overlay is a presentation choice of the selected component/template, not a separate SDK decision service.

For the component/config name aliases (SurfaceSlotComponent, Playbook, …), see the Recommended API Path.