๐ด FeatBit
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:
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:
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):
๐ฌ Want Awesome F/OSS in your inbox?
We'll send you new articles as soon as they go live.