Quickstart
Get FeatureSignals running locally in under 5 minutes using Docker Compose.
Prerequisites
- Docker and Docker Compose v2+
- Node.js 18+ (for SDK integration)
1. Clone and Start
git clone https://github.com/dinesh-g1/featuresignals.git
cd featuresignals
docker compose up -d
This starts:
- PostgreSQL on port
5432 - API Server on port
8080 - Dashboard on port
3000
Database migrations run automatically on startup.
2. Create Your Account
Open http://localhost:3000 and register a new account. This creates:
- Your user account
- A default organization
- A Default Project with three environments:
dev,staging,production
3. Create a Feature Flag
- Navigate to Flags in the sidebar
- Click Create Flag
- Enter:
- Key:
new-checkout - Name:
New Checkout Flow - Type:
boolean
- Key:
- Click Create
4. Enable the Flag
- Open the flag detail page
- Switch to the dev environment tab
- Toggle the flag ON
5. Evaluate in Your App
Create an API Key
- Go to Settings → API Keys
- Create a server API key for the
devenvironment - Copy the key (shown only once)
Install an SDK
- Node.js
- Go
- Python
- Java
npm install @featuresignals/node
import { FeatureSignalsClient } from '@featuresignals/node';
const client = new FeatureSignalsClient('YOUR_API_KEY', {
envKey: 'dev',
baseURL: 'http://localhost:8080',
});
await client.waitForReady();
const enabled = client.boolVariation('new-checkout', { key: 'user-123' }, false);
console.log('New checkout enabled:', enabled);
go get github.com/featuresignals/sdk-go
package main
import (
"fmt"
fs "github.com/featuresignals/sdk-go"
)
func main() {
client := fs.NewClient("YOUR_API_KEY", "dev",
fs.WithBaseURL("http://localhost:8080"),
)
defer client.Close()
<-client.Ready()
enabled := client.BoolVariation("new-checkout", fs.NewContext("user-123"), false)
fmt.Println("New checkout enabled:", enabled)
}
pip install featuresignals
from featuresignals import FeatureSignalsClient, ClientOptions, EvalContext
client = FeatureSignalsClient(
"YOUR_API_KEY",
ClientOptions(env_key="dev", base_url="http://localhost:8080"),
)
client.wait_for_ready()
enabled = client.bool_variation("new-checkout", EvalContext(key="user-123"), False)
print("New checkout enabled:", enabled)
<dependency>
<groupId>com.featuresignals</groupId>
<artifactId>sdk-java</artifactId>
<version>0.1.0</version>
</dependency>
import com.featuresignals.sdk.*;
var options = new ClientOptions("dev").baseURL("http://localhost:8080");
var client = new FeatureSignalsClient("YOUR_API_KEY", options);
client.waitForReady(5000);
boolean enabled = client.boolVariation("new-checkout", new EvalContext("user-123"), false);
System.out.println("New checkout enabled: " + enabled);
6. Toggle and Observe
Go back to the dashboard, toggle the flag OFF, and re-run your app. The value changes instantly (or within the polling interval).
Next Steps
- Create Your First Flag — deeper walkthrough
- Core Concepts — understand flag types, targeting, and rollouts
- SDK Documentation — full SDK reference for all languages