Skip to main content

React Router SDK

Requirements

Use React Router framework mode 7 or 8 with React 18+ (React Router 8 requires React ≥19.2.7, Node 22.22+, and Vite 7+). Library/data-mode RouterProvider apps should use the React SDK instead.

The Toggly React Router SDK integrates feature flags with React Router framework-mode apps: route loaders and actions, SSR hydration, and React hooks.

Grab the printable React Router cheat sheet (download PDF) — loaders, actions, SSR hydration, React hooks.

Overview

One package with two entry points:

EntryPurpose
@ops-ai/react-router-toggly/serverLoaders, actions, and server evaluation
@ops-ai/react-router-toggly/clientProvider, hooks, and components

Installation

npm install @ops-ai/react-router-toggly

Requirements

HostReactNodeVite
React Router 7 framework mode18 or 1918+ (host-dependent)5+
React Router 8 framework mode≥19.2.7≥22.22≥7

Quick Start

1. Create a Toggly utility file

app/utils/toggly.server.ts
import { createTogglyLoader } from '@ops-ai/react-router-toggly/server';
import { getSession } from '~/utils/session.server';

export const togglyLoader = createTogglyLoader({
appKey: process.env.TOGGLY_APP_KEY,
environment: process.env.TOGGLY_ENVIRONMENT,
getIdentity: async (request) => {
const session = await getSession(request.headers.get('Cookie'));
return session.get('userId');
},
});

2. Set up the root loader and provider

app/root.tsx
import type { Route } from './+types/root';
import { Outlet } from 'react-router';
import { RouterTogglyProvider } from '@ops-ai/react-router-toggly/client';
import { togglyLoader } from '~/utils/toggly.server';

export async function loader({ request }: Route.LoaderArgs) {
return togglyLoader.getLoaderData({ request });
}

export default function App() {
return (
<RouterTogglyProvider>
<Outlet />
</RouterTogglyProvider>
);
}

3. Use feature flags in components

app/routes/dashboard.tsx
import { useFeature, Feature } from '@ops-ai/react-router-toggly/client';

export default function Dashboard() {
const showBeta = useFeature('beta-features');

return (
<div>
<h1>Dashboard</h1>
<Feature featureKey="new-analytics">
<AdvancedAnalytics />
</Feature>
<Feature featureKey="new-analytics" negate>
<BasicAnalytics />
</Feature>
{showBeta && <BetaFeatures />}
</div>
);
}

Migrating from Remix

Remix v2 is end-of-life. @ops-ai/remix-toggly-* is deprecated. Replace:

RemixReact Router
@ops-ai/remix-toggly-server@ops-ai/react-router-toggly/server
@ops-ai/remix-toggly-client@ops-ai/react-router-toggly/client
RemixTogglyProviderRouterTogglyProvider
@remix-run/* importsreact-router

Last published Remix packages remain on npm but are not a living support line.

Next Steps