Boolean and numeric features
A feature is either on/off or carries a number.
A numeric feature is still enabled or not. The limit is the amount the plan sets on top of that. Check both: an enabled feature with no limit configured returns
undefined from getLimit, not 0.
Keys are the contract
The string you pass is the feature’s key: the app-local stable identifier from the plan builder. A key survives a rename in the dashboard.Gating on the server
The same gates exist without React, for resource routes, Shopify extensions and background jobs:gatesForShop resolves the shop’s entitlements in one call and never throws. An unconfigured, unreachable or unsubscribed shop comes back ungated. If you already hold a shop token, createMeridianServerClient(...).getGates() does the same, and checkFeature(key) reads a single feature. See Server client.
Entitlements resolve through one path everywhere, so a gate behaves identically in your React code, on your server, and in Meridian MCP’s entitlements_explain.
Fail open or fail closed
The SDK fails open: a null snapshot, a failed load, or an unreachable Meridian all read as ungated, so a billing outage cannot lock a paying merchant out. That suits a paid capability and does not suit anything that costs you money per call. Where a wrongfalse is expensive, check loading and error from useMeridian and hold the action.
Gating on usage
A limit a shop consumes over time is an event rather than a feature.getUsage(eventKey) returns what the plan includes and what has been used this period.