npm.io
1.0.1 • Published 21h ago

@flagswift/nextjs

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

Keywords