🏴 FeatBit

Open Source Feature Flags Management Service, Friendly for Self Hosted, Azure, AWS, GCP
Open Source Feature Flags Management Service, Friendly for Self Hosted, Azure, AWS, GCP

FeatBit (Code) is a feature flag management service that you can self host or deploy to various clouds, or deploy to Kubernetes written in C#.

Not sure what a feature flag is or why you'd want a service for managing them? LaunchDarkly has a great post on this:

Feature Flags (Toggles) in DevOps: How These Concepts Relate - LaunchDarky | LaunchDarkly
Feature flags (toggles) are critical to DevOps in how they enable speed, stability, and cross-team collaboration. Learn how to leverage feature flags for DevOps transformation.

LaunchDarkly also has a great video guide to Feature Flags that you can check out:

It's not the only one, but FeatBit is like a F/OSS Launch Darkly, which also offers support and a cloud version for a fee.

We'll sum it up for the impatient: feature flags let you separate deploying features and enabling features, by standardizing on a means of turning feature integration on and off without redeploying your code.

🌠 Features

FeatBit has the features you'd expect, and a few more that make it stand out:

  • Focus on developer-first interaction (modification via SDKs in C#, Javascript, Python, Java, and Go)
  • Support for OpenFeature
  • Triggering via APIs, Triggers or Webhooks
  • Export to various services and clouds (Azure Event Hub, DataDog, Grafana, Amplitude, Clickhouse and more)
  • High efficiency – does 1.1k websocket connections even with only 1vCPU and 1G of memory
  • High integration with C# ecosystem
  • Support for SSO built in
  • Specific support for experimentation via A/B testing
  • OpenTelemetry integration

🤖 As described by AI

FeatBit is an open-source feature flag management service designed for scalability and speed. It supports self-hosting and cloud platforms like Azure, AWS, and GCP, making it versatile for various deployment environments.

Built with .NET, it aims to reduce risks through safe code deployment, allowing features to be tested and rolled out incrementally. Furthermore, FeatBit facilitates faster innovation by decoupling feature deployment from release, enabling targeted user experiences without extensive developer involvement. For more details, you can visit their website at FeatBit.

📺 Watch this

Even though FeatBit is really new they've got a YouTube Channel that already has some guides and content on it.

An interactive guide to their product which is a bit old (1 year at this point) is also on there which is a nice watch:

👟 Getting started

The easiest way to get started with FeatBit is probably the cloud offering or deploying to a pre-existing cloud setup, but here we'll focus on how to self-host it.

🐳 Running with docker-compose

The README on GitHub is really easy to follow, and since docker is supported (w/ docker-compose) you can get started quite quickly (which we love):

git clone https://github.com/featbit/featbit
cd featbit
docker compose up -d

So what's in that docker-compose.yml?

name: featbit
version: "3"
services:
  ui:
    image: featbit/featbit-ui:latest
    environment:
      - API_URL=http://localhost:5000
      - DEMO_URL=https://featbit-samples.vercel.app
      - EVALUATION_URL=http://localhost:5100
    depends_on:
      - api-server
    ports:
      - "8081:80"
    networks:
      - featbit-network

  api-server:
    image: featbit/featbit-api-server:latest
    environment:
      - MongoDb__ConnectionString=mongodb://admin:password@mongodb:27017
      - MongoDb__Database=featbit
      - Redis__ConnectionString=redis:6379
      - OLAP__ServiceHost=http://da-server
    depends_on:
      - mongodb
      - redis
      - da-server
    ports:
      - "5000:5000"
    networks:
      - featbit-network

  evaluation-server:
    image: featbit/featbit-evaluation-server:latest
    environment:
      - MongoDb__ConnectionString=mongodb://admin:password@mongodb:27017
      - MongoDb__Database=featbit
      - Redis__ConnectionString=redis:6379
    depends_on:
      - mongodb
      - redis
    ports:
      - "5100:5100"
    networks:
      - featbit-network

  da-server:
    image: featbit/featbit-data-analytics-server:latest
    depends_on:
      - mongodb
      - redis
    ports:
      - "8200:80"
    networks:
      - featbit-network
    environment:
      REDIS_HOST: redis
      REDIS_PORT: 6379
      MONGO_URI: mongodb://admin:password@mongodb:27017
      MONGO_INITDB_DATABASE: featbit
      MONGO_HOST: mongodb
      CHECK_DB_LIVNESS: true

  mongodb:
    image: mongo:5.0.14
    restart: on-failure
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=password
      - MONGO_INITDB_DATABASE=featbit
    volumes:
      - mongodb:/data/db
      - ./infra/mongodb/docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/
    networks:
      - featbit-network

  redis:
    image: bitnami/redis:6.2.10
    restart: on-failure
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    networks:
      - featbit-network
    ports:
      - "6379:6379"
    volumes:
      - redis:/data

networks:
  featbit-network:
    name: featbit-network
    driver: bridge
    ipam:
      config:
        - subnet: 172.10.0.0/16

volumes:
  mongodb:
  redis:

This is frankly more dependencies than we would have expected, but they aren't completely unknown.

Using Redis and MongoDB (even though we're fans of Postgres 🐘 here at AWSMFOSS) isn't too much to ask for an application that scales horizontally and isn't necessarily hyper focused on relational data.

🧑‍💻 Want to contribute?

FeatBit is an open source project (over 1.5k ⭐️) and their issues are open:

Issues · featbit/featbit
A feature flags service written in .NET. Contribute to featbit/featbit development by creating an account on GitHub.

Another cool thing is that you can check their Roadmap via GitHub Projects as it's out in the open (and looks to be frequently updated/active):

FeatBit • featbit
FeatBit

📬 Want Awesome F/OSS in your inbox?

We'll send you new articles as soon as they go live.