⛳️ Feature Flags for Next.js
e473304: add Next.js App Router support
HappyKit has a feature called visitorKey
, you can learn more about it here. If you want to use this feature with App Router you need to set the cookie from middleware using the ensureVisitorKeyCookie
from @happykit/flags/edge
. See the example/middleware.ts
file in this repository for an example of how to do this. This is necessary as App Router pages can not set any cookies when they render, so we have to fall back to setting the cookie from middleware instead. If you do not need the visitorKey
for your custom evaluation rules or rollouts then you do not need to set the cookie from middleware.
1822587: BREAKING CHANGE: Configuration overhaul
This release changes HappyKit's configuration approach.
Previously you had to create a flags.config.js
file and import it into your pages/_app.js
and into every middleware that wanted to use feature flags. If you were using your own AppFlags
type, you also had to pass this type every time you invoked getFlags()
, useFlags()
or getEdgeFlags()
. And the configuration options for client-, server- and edge were mixed together into a single flags.config.js
file.
This release replaces the existing configuration approach with a new one. This new approach configuration prepares happykit for upcoming features.
flags
folderFollow the updated Setup instructions to create the flags
folder in your own application, and fill it with.
After this step, you should have
./flags/config.ts
which exports a configuration./flags/client.ts
which exports a useFlags
function./flags/server.ts
which exports a getFlags
function./flags/edge.ts
which exports a getEdgeFlags
functionEnable Absolute Imports as described here.
Then change the application code in your pages/
folder to use these functions from your flags/
folder instead of from @happykit/flags
:
- import { useFlags } from "@happykit/flags/client"
+ import { useFlags } from "flags/client"
- import { getFlags } from "@happykit/flags/server"
+ import { getFlags } from "flags/server"
- import { getEdgeFlags } from "@happykit/flags/edge"
+ import { getEdgeFlags } from "flags/edge"
_Note that because of the absolute imports we configured in step 2, all imports from "flags/"
will use the local flags folder you created in step 1.*
We can now delete the old setup since we no longer need it
flags.config.js
flags.config
import from your pages/_app
file
pages/_app
file if it's not doing anything else anymoreflags.config
from your middlewareAdds support for node v18
AbortController
polyfill. The AbortController
is now only used if it exists as a global in the surrounding environmentgetConfig()
to fix it #24Breaking change
If you were doing import { config } from "@happykit/flags/config"
, you now need to import { getConfig } from "@happykit/flags/config"
. I believe most people are not importing config
into their app.
This was a breaking I only realized after publishing as v2.0.6, so the sem ver does not reflect the breaking change. I apologize if this broke your build.
This is a special once-off release which is equal to v2.0.5
, except for additional latency metrics reporting.