Using Edge Config with DevCycle
This guide will help you get started with using Vercel's DevCycle integration with Edge Config. This integration allows you to use Edge Config as a configuration source for your DevCycle feature flags.
DevCycle is a feature management platform designed for developers. DevCycle allows you to work with feature flags more naturally, where you write code, so you can deliver better features, faster.
With DevCycle and Vercel Edge Config the decision logic for your features lives with your hosted site, so you can run your feature rollouts or experiments with ultra-low latency.
Before using this integration, you should have:
- The latest version of Vercel CLI. To check your version, use
vercel --version. To install or update Vercel CLI, use:Terminalpnpm i -g vercel@latest - A project. If you don't have one, you can run the following terminal commands to create a Next.js project:
pnpm create next-app@latest - A Vercel project. If you don't have one, see Creating a Project
- An Edge Config. If you don't have one, follow the Edge Config quickstart
- The Edge Config SDK:
Terminal
pnpm i @vercel/edge-config
Visit the DevCycle page in the Integration Marketplace and select the Add Integration button. From the modal that opens:
- Select your Vercel team and project.
- Continue and log into DevCycle.
- Select the DevCycle Organization and Project you want to use with Vercel Edge Config.
- Connect your DevCycle project to an existing or new Edge Config store.
- Click Finish Setup.
- Terminal
pnpm i @devcycle/vercel-edge-config @vercel/edge-config - app/index.tsx
import { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { setupDevCycle } from '@devcycle/nextjs-sdk/server'; const edgeClient = createClient(process.env.EDGE_CONFIG ?? ''); const edgeConfigSource = new EdgeConfigSource(edgeClient); export const { getVariableValue, getClientContext } = setupDevCycle({ serverSDKKey: process.env.DEVCYCLE_SERVER_SDK_KEY ?? '', clientSDKKey: process.env.NEXT_PUBLIC_DEVCYCLE_CLIENT_SDK_KEY ?? '', userGetter: () => ({ user_id: 'test_user' }), options: { // pass the configSource option with the instance of EdgeConfigSource configSource: edgeConfigSource, }, });app/index.jsximport { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { setupDevCycle } from '@devcycle/nextjs-sdk/server'; const edgeClient = createClient(process.env.EDGE_CONFIG ?? ''); const edgeConfigSource = new EdgeConfigSource(edgeClient); export const { getVariableValue, getClientContext } = setupDevCycle({ serverSDKKey: process.env.DEVCYCLE_SERVER_SDK_KEY ?? '', clientSDKKey: process.env.NEXT_PUBLIC_DEVCYCLE_CLIENT_SDK_KEY ?? '', userGetter: () => ({ user_id: 'test_user' }), options: { // pass the configSource option with the instance of EdgeConfigSource configSource: edgeConfigSource, }, });pages/index.tsximport type { GetServerSideProps } from 'next'; import { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { getServerSideDevCycle } from '@devcycle/nextjs-sdk/pages'; const edgeClient = createClient(process.env.EDGE_CONFIG ?? ''); const edgeConfigSource = new EdgeConfigSource(edgeClient); export const getServerSideProps: GetServerSideProps = async (context) => { const user = { user_id: 'server-user', }; return { props: { ...(await getServerSideDevCycle({ serverSDKKey: process.env.DEVCYCLE_SERVER_SDK_KEY ?? '', clientSDKKey: process.env.NEXT_PUBLIC_DEVCYCLE_CLIENT_SDK_KEY ?? '', user, context, options: { // pass the configSource option with the instance of EdgeConfigSource configSource: edgeConfigSource, }, })), }, }; };pages/index.jsximport { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { getServerSideDevCycle } from '@devcycle/nextjs-sdk/pages'; const edgeClient = createClient(process.env.EDGE_CONFIG ?? ''); const edgeConfigSource = new EdgeConfigSource(edgeClient); export const getServerSideProps = async (context) => { const user = { user_id: 'server-user', }; return { props: { ...(await getServerSideDevCycle({ serverSDKKey: process.env.DEVCYCLE_SERVER_SDK_KEY ?? '', clientSDKKey: process.env.NEXT_PUBLIC_DEVCYCLE_CLIENT_SDK_KEY ?? '', user, context, options: { // pass the configSource option with the instance of EdgeConfigSource configSource: edgeConfigSource, }, })), }, }; };index.tsximport { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { initializeDevCycle } from '@devcycle/nodejs-server-sdk'; // the EDGE_CONFIG environment variable contains a connection string for a particular edge config. It is set automatically // when you connect an edge config to a project in Vercel. const edgeClient = createClient(process.env.EDGE_CONFIG); const edgeConfigSource = new EdgeConfigSource(edgeClient); const devcycleClient = initializeDevCycle( process.env.DEVCYCLE_SERVER_SDK_KEY, // pass the edgeConfigSource as the "configSource" option during SDK intialization to tell the SDK to use Edge Config // for retrieving its configuration { configSource: edgeConfigSource }, );index.jsximport { createClient } from '@vercel/edge-config'; import { EdgeConfigSource } from '@devcycle/vercel-edge-config'; import { initializeDevCycle } from '@devcycle/nodejs-server-sdk'; // the EDGE_CONFIG environment variable contains a connection string for a particular edge config. It is set automatically // when you connect an edge config to a project in Vercel. const edgeClient = createClient(process.env.EDGE_CONFIG); const edgeConfigSource = new EdgeConfigSource(edgeClient); const devcycleClient = initializeDevCycle( process.env.DEVCYCLE_SERVER_SDK_KEY, // pass the edgeConfigSource as the "configSource" option during SDK intialization to tell the SDK to use Edge Config // for retrieving its configuration { configSource: edgeConfigSource }, );
Now that you have the DevCycle Edge Config integration set up, you can explore the following topics to learn more:
Was this helpful?