Skip to content

Server-Side Integration

The SDK supports server-side entitlement checks and placement decisions using the local runtime mode — all logic runs against an ExportedConfig snapshot with no network calls required.

Use caseClient SDKServer SDK
Render placements in React
Gate API endpoints
Enforce usage limits before processing
SSR placement decisions✅ (local mode)
Track server-side events🔜 Coming soon

The local runtime evaluates entitlements and placements entirely from an ExportedConfig JSON snapshot. No API server connection required.

Terminal window
pnpm add @revturbine/sdk
import { initRevTurbine } from '@revturbine/sdk';
import exportedConfig from './exported_config.json';
const sdk = initRevTurbine({
localRuntime: { exportedConfig },
user: {
id: 'user_123',
plan: { id: 'starter', name: 'Starter' },
entitlements: { data_export: false },
},
});
// Check an entitlement
const result = await sdk.can('data_export');
if (!result.allowed) {
// deny access — user needs to upgrade
console.log('Upgrade required:', result.status);
}

Resolve placements server-side for SSR or email templates:

import { initRevTurbine } from '@revturbine/sdk';
import exportedConfig from './exported_config.json';
const sdk = initRevTurbine({
localRuntime: { exportedConfig },
user: {
id: req.user.id,
plan: { id: req.user.planId },
},
});
// Report current usage
sdk.update({ api_calls: req.user.apiCallCount });
// Resolve a specific slot's placement
const banner = await sdk.getPlacement({
slotId: 'dashboard_banner',
surfaceTemplateIds: ['banner_placement'],
});
if (banner) {
// Render banner.content into your template
}

For frameworks like Next.js, resolve placements with the local runtime and hydrate client-side:

components/Dashboard.tsx
'use client';
import { RevTurbineProvider, Slot } from '@revturbine/sdk';
import exportedConfig from './exported_config.json';
import { useMemo } from 'react';
export default function Dashboard({ user }) {
const options = useMemo(() => ({
localRuntime: { exportedConfig },
user: {
id: user.id,
plan: { id: user.planId, name: user.planName },
entitlements: user.entitlements,
},
}), [user]);
return (
<RevTurbineProvider options={options}>
<Slot
id="dashboard_banner"
surfaceTemplateIds={["banner_placement"]}
/>
{/* rest of your dashboard */}
</RevTurbineProvider>
);
}

A Python server SDK is also available, with byte-identical decisioning parity to the Node SDK:

LanguagePackageStatus
Node.js@revturbine/sdk (local runtime)✅ Available
Pythonrevturbine (PyPI)✅ Available

See the Python SDK guide for setup and usage.