# FeatBit

Feature flag service with a web portal and SDKs for releasing features step by step.

- Replaces: [LaunchDarkly](https://openlogs.fyi/alternatives/launchdarkly)
- Summary: Paid feature flag services, such as LaunchDarkly.
- Stack: C# (language), PostgreSQL (database)
- Deployment: docker_compose
- License: MIT (osi) [source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md), read 2026-10-22)
- Difficulty: medium. 4 services (1 database or broker: postgres), 2 volume mounts, 1 env value to set, no elevated host access. Heuristic score 5 of 11: medium. A source checkout is needed, so the rating is at least medium.
- Requirements: not stated
- Repository: [featbit/featbit](https://github.com/featbit/featbit)

## Install

1. Docker with the Compose plugin and git ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md))

   ```text
   A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
   ```

2. Get the source at commit 1483cb9 ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md))

   ```bash
   git init featbit
   cd featbit
   git remote add origin https://github.com/featbit/featbit.git
   git fetch --depth 1 origin 1483cb94c60af605a89a2d6cfeeaeee25f9a1241
   git checkout FETCH_HEAD
   ```

3. The compose file in the checkout: docker-compose.yml (shown here for reading) ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml))

   ```yaml
   name: featbit
   services:
     ui:
       image: featbit/featbit-ui:${FEATBIT_VERSION:?FEATBIT_VERSION is required}
       environment:
         - API_URL=http://localhost:5000
         - DEMO_URL=https://featbit-samples.vercel.app
         - EVALUATION_URL=http://localhost:5100
         - BASE_HREF=/
       depends_on:
         - api-server
       ports:
         - "8081:80"
       networks:
         - featbit-network
   
     api-server:
       image: featbit/featbit-api-server:${FEATBIT_VERSION:?FEATBIT_VERSION is required}
       environment:
         - DbProvider=Postgres
         - MqProvider=Postgres
         - CacheProvider=None
         - Postgres__ConnectionString=Host=postgresql;Port=5432;Username=postgres;Password=please_change_me;Database=featbit
         - Jwt__Algorithm=HS256
         - Jwt__Key=please_change_me_to_a_secure_secret_key
       depends_on:
         - postgresql
       ports:
         - "5000:5000"
       networks:
         - featbit-network
   
     evaluation-server:
       image: featbit/featbit-evaluation-server:${FEATBIT_VERSION:?FEATBIT_VERSION is required}
       environment:
         - DbProvider=Postgres
         - MqProvider=Postgres
         - CacheProvider=None
         - Postgres__ConnectionString=Host=postgresql;Port=5432;Username=postgres;Password=please_change_me;Database=featbit
       depends_on:
         - postgresql
       ports:
         - "5100:5100"
       networks:
         - featbit-network
   
     postgresql:
       image: postgres:15.10
       container_name: postgresql
       restart: on-failure
       ports:
         - "5432:5432"
       environment:
         POSTGRES_USER: postgres
         POSTGRES_PASSWORD: please_change_me
       volumes:
         - ./infra/postgresql/docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/
         - postgres:/var/lib/postgresql/data
       networks:
         - featbit-network
   
   networks:
     featbit-network:
       name: featbit-network
       driver: bridge
       ipam:
         config:
           - subnet: 172.10.0.0/16
   
   volumes:
     postgres:
   ```

4. What the compose file check ran with ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md))

   ```text
   The compose file check ran in a checkout of featbit/featbit at 1483cb94c60af605a89a2d6cfeeaeee25f9a1241 (a sparse checkout: only the top-level files). The README tells the reader to clone the repository, go into the featbit folder and run docker compose up -d.
   ```

5. Start it ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md))

   ```bash
   docker compose up -d
   ```

6. Open the app ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml))

   ```text
   Open http://localhost:8081. The compose file publishes host port 8081 for the ui service. The README names this address for the portal.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- The compose file has placeholder values: Placeholder values: Postgres\_\_ConnectionString is "Host=postgresql;Port=5432;Username=postgres;Password=please_change_me;Database=featbit" (api-server), Jwt\_\_Key is "please_change_me_to_a_secure_secret_key" (api-server), Postgres\_\_ConnectionString is "Host=postgresql;Port=5432;Username=postgres;Password=please_change_me;Database=featbit" (evaluation-server), POSTGRES_PASSWORD is "please_change_me" (postgresql). ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 8081 (ui), 5000 (api-server), 5100 (evaluation-server), 5432 (postgresql). A port without a host address listens on all host network interfaces. ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./infra/postgresql/docker-entrypoint-initdb.d/ at /docker-entrypoint-initdb.d/ (postgresql). ([source](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 46
- Stars: 1946, forks: 151
- Last push: 2026-10-22 (0 days ago)
- Latest release: 6.0.1 on 2026-10-14 (8 days ago)

## Sources

- [Repository: https://github.com/featbit/featbit](https://github.com/featbit/featbit)
- [License: https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/LICENSE](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/LICENSE)
- [Business model: https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/README.md)
- [Compose file: https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml](https://github.com/featbit/featbit/blob/1483cb94c60af605a89a2d6cfeeaeee25f9a1241/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/featbit  
Last updated: 2026-10-22
