Configuration
TogglyConfig
Shared options for server and client:
interface TogglyConfig {
appKey?: string;
environment?: string;
baseUrl?: string;
timeout?: number;
featureDefaults?: Record<string, boolean>;
debug?: boolean;
onError?: (message: string, error?: unknown) => void;
groups?: string[];
claims?: Record<string, string>;
verifySignatures?: boolean;
allowedKeyIds?: string[];
}
Loader / action providers
createTogglyLoader({
appKey: process.env.TOGGLY_APP_KEY,
environment: process.env.TOGGLY_ENVIRONMENT,
getIdentity: async (request) => { /* ... */ },
getGroups: async (request) => { /* ... */ },
getClaims: async (request) => { /* ... */ },
// Or getContext: (request) => ({ identity, groups, claims })
});
Identity, groups, and claims are read from request (cookies/headers). Do
not use React Router’s normalized URL for targeting.
Signature verification
When verifySignatures is true, the server verifies ES256 signed definition
envelopes via JWKS (@ops-ai/toggly-signed-defs). Keep signed/invalid/offline
failure behavior enabled in production hosts that require it.
Peer dependencies
{
"react-router": "^7.0.0 || ^8.0.0",
"react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0"
}
Optional: @react-router/node for Node adapters.