Lightweight, environment-based feature flag system for Nuxt 3 β made for developers who need dynamic feature control in routes, components, and APIs.
- π« Hide incomplete features in production environments to prevent accidental exposure
- π§ͺ Enable alpha/beta features for staging, preview, or development environments
- π Limit access to specific APIs by feature flag in server handlers
- π― Roll out features to internal QA teams without branching or releases
- π Schedule feature launches for specific environments or timeframes
- π΅οΈββοΈ Detect undeclared feature flags at build time with configurable validation and precise file context
- π§© Nuxt DevTools integration with a Feature Flag Explorer and Environment Switcher
- π Dynamic feature flag updates without server restarts through a remote config service
- π A/B testing support for feature flags
- π Analytics for feature flag usage
- π§ββοΈ Show features only for specific users (e.g., staff-only UIs, admin panels etc.)
- 𧬠Environment inheritance which lets environments inherit feature flags from others
- π‘ Flag descriptions / metadata for better documentation, DevTools tooltips, or internal usage notes
- π Programmatic overrides to toggle or override feature flags dynamically at runtime (e.g., per user or session)
Install the module to your Nuxt application with one command:
npx nuxi module add nuxt-feature-flags-module
That's it! You can now use Nuxt Feature Flags in your Nuxt app β¨
Then define your feature flags in nuxt.config.ts
:
export default defineNuxtConfig({
modules: ['nuxt-feature-flags-module'],
featureFlags: {
environment: process.env.FEATURE_ENV || 'development',
flagSets: {
development: ['yourFeature1', 'yourFeature2'],
staging: ['yourFeature1'],
production: []
}
}
})
Use in your app:
<template>
<button v-feature="'yourFeature2'">Try Feature 2</button>
</template>
Or via composable:
const { isEnabled } = useFeatureFlag()
if (isEnabled('yourFeature1')) {
// do something
}
Or in your server API:
export default defineEventHandler((event) => {
if (!isFeatureEnabled('yourFeature2', event)) {
return sendError(event, createError({ statusCode: 403, message: 'Feature 2 is disabled' }))
}
return { message: 'Feature unlocked π' }
})
Local development
# Install dependencies
pnpm install
# Generate type stubs
pnpm run dev:prepare
# Develop with the playground
pnpm run dev
# Build the playground
pnpm run dev:build
# Run ESLint
pnpm run lint
# Run Vitest
pnpm run test
pnpm run test:watch
# Release new version
pnpm run release
This project is licensed under the MIT License.