Skip to content

SwitchFeat is an open source and self-hosted feature flags and A/B testing framework written in Nodejs, Typescript and React.


Notifications You must be signed in to change notification settings


Repository files navigation


Open source feature flags and A/B testing service

Minimize deployment risks and speed-up your features development.

PR welcome on @apitrakr/cli

What is SwitchFeat

SwitchFeat is an open-source, self-hosted platform that makes it very easy to manage your feature flags and run A/B tests straight from your infrastructure. No external servers involved, no latency in sending flags data over the internet. Your data stays within your network.

Just wrap your logic around a feature flag and use SwitchFeat API to toggle that code on or off, based on multiple conditions and user segments.

Getting started

The easiest way to start using SwitchFeat is using the Docker image.

You can either clone the repo and generate the image yourself using our docker-compose.yml file, like this:

git clone
cd switchfeat
docker-compose up -d

Or you can just download the premade image from the official Github Registry like this:

docker run --name switchfeat-com -d -p 4000:4000

Once the download is complete, an additional step is needed to set the environment variables within the Docker image itself. The image already contains a .env.example file which contains all env variables names. Please fill the values for the variables in the required section, rename the file to .env and restart the container.

Once done, SwitchFeat will be available at http://localhost:4000

Building the project

The SwitchFeat project has been configured using Lerna framework which allows to manage multiple projects in the same repo (monorepo).

To build the project use the following command in the root folder of the project:

npm run build

To start both the server and the ui, simply run:

npm run start

SwitchFeat will be available at http://localhost:4000

Running frontend and backend separately

For convenience during the development phase, the package.json file esposes two additional scripts which allow to run the server and the UI on separate ports. This simplifies working on the frontend, where the UI can be updated without running a full build on both projects on every change.

The following command will run the UI process on http://localhost:3000

npm run dev:start-ui

The following command will run the Server process on http://localhost:4000

npm run dev:start-api


Either it be a bug fix, an update to our documentation, a feature request, contributions are extremely welcome!

Look at the public roadmap to see what's coming and where you can help.