Licence
MIT
Version
1.0.1
Deps
0
Size
19 kB
Vulns
0
Weekly
0
@flagswift/nextjs
Official Next.js SDK for FlagSwift — client-side hooks for Client Components, plus native support for Server Components, Route Handlers, and Middleware.
Installation
npm install @flagswift/nextjs
Client Components
'use client'
import { FlagProvider, FlagClient, useFlag } from '@flagswift/nextjs'
const client = new FlagClient({
apiKey: process.env.NEXT_PUBLIC_FLAGSWIFT_API_KEY!,
environment: 'production',
})
export function Providers({ children }: { children: React.ReactNode }) {
return <FlagProvider client={client}>{children}</FlagProvider>
}
'use client'
import { useFlag } from '@flagswift/nextjs'
export function Feature() {
const enabled = useFlag('new-dashboard')
return enabled ? <NewDashboard /> : <OldDashboard />
}
Server Components
import { isFlagEnabled } from '@flagswift/nextjs'
export default async function Page() {
const enabled = await isFlagEnabled('new-dashboard', {
apiKey: process.env.FLAGSWIFT_SERVER_KEY!,
environment: 'production',
})
return enabled ? <NewDashboard /> : <OldDashboard />
}
Route Handlers
import { isFlagEnabled } from '@flagswift/nextjs'
export async function GET(request: Request) {
const enabled = await isFlagEnabled('new-api', {
apiKey: process.env.FLAGSWIFT_SERVER_KEY!,
environment: 'production',
})
return Response.json({ version: enabled ? 'v2' : 'v1' })
}
Middleware
import { isFlagEnabled } from '@flagswift/nextjs'
import { NextResponse } from 'next/server'
export async function middleware(request: Request) {
const enabled = await isFlagEnabled('new-checkout', {
apiKey: process.env.FLAGSWIFT_SERVER_KEY!,
environment: 'production',
revalidate: 10,
})
if (enabled) {
return NextResponse.rewrite(new URL('/new-checkout', request.url))
}
}
Caching
Server-side calls use Next.js's built-in fetch caching via the revalidate option (seconds). Default is 30s. Pass revalidate: 0 for always-fresh, uncached checks.
License
MIT