Quickstart
Get FeatureSignals running locally in under 5 minutes using Docker Compose.
Try without installing
Want to explore FeatureSignals without any setup? Start a free trial — sign up with your email to get full Pro access for 14 days, no credit card required.
Prerequisites
- Docker and Docker Compose v2+
- Node.js 18+ (for SDK integration)
1. Clone and Start
bash
git clone https://github.com/dinesh-g1/featuresignals.git
cd featuresignals
docker compose up -dThis starts PostgreSQL on port 5432, the API Server on port 8080, and the Flag Engine on port 3000. Database migrations run automatically on startup.
2. Create Your Account
Open https://app.featuresignals.com 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
Install
bash
npm install @featuresignals/nodeUsage
typescript
import { FeatureSignalsClient } from '@featuresignals/node';
const client = new FeatureSignalsClient('YOUR_API_KEY', {
envKey: 'dev',
baseURL: 'https://api.featuresignals.com',
});
await client.waitForReady();
const enabled = client.boolVariation('new-checkout', { key: 'user-123' }, false);
console.log('New checkout enabled:', enabled);Go
Install
bash
go get github.com/featuresignals/sdk-goUsage
go
package main
import (
"fmt"
fs "github.com/featuresignals/sdk-go"
)
func main() {
client := fs.NewClient("YOUR_API_KEY", "dev",
fs.WithBaseURL("https://api.featuresignals.com"),
)
defer client.Close()
<-client.Ready()
enabled := client.BoolVariation("new-checkout", fs.NewContext("user-123"), false)
fmt.Println("New checkout enabled:", enabled)
}Python
Install
bash
pip install featuresignalsUsage
python
from featuresignals import FeatureSignalsClient, ClientOptions, EvalContext
client = FeatureSignalsClient(
"YOUR_API_KEY",
ClientOptions(env_key="dev", base_url="https://api.featuresignals.com"),
)
client.wait_for_ready()
enabled = client.bool_variation("new-checkout", EvalContext(key="user-123"), False)
print("New checkout enabled:", enabled)Java
Install
bash
# Add to pom.xml:
# <dependency>
# <groupId>com.featuresignals</groupId>
# <artifactId>sdk-java</artifactId>
# <version>0.1.0</version>
# </dependency>Usage
java
import com.featuresignals.sdk.*;
var options = new ClientOptions("dev").baseURL("https://api.featuresignals.com");
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);.NET
Install
bash
dotnet add package FeatureSignalsUsage
csharp
using FeatureSignals;
var options = new ClientOptions { EnvKey = "dev" };
using var client = new FeatureSignalsClient("YOUR_API_KEY", options);
await client.WaitForReadyAsync();
bool enabled = client.BoolVariation("new-checkout", new EvalContext("user-123"), false);
Console.WriteLine($"New checkout enabled: {enabled}");Ruby
Install
bash
gem install featuresignalsUsage
ruby
require "featuresignals"
options = FeatureSignals::ClientOptions.new(env_key: "dev", base_url: "https://api.featuresignals.com")
client = FeatureSignals::Client.new("YOUR_API_KEY", options)
client.wait_for_ready
enabled = client.bool_variation("new-checkout", FeatureSignals::EvalContext.new(key: "user-123"), false)
puts "New checkout enabled: #{enabled}"React
Install
bash
npm install @featuresignals/reactUsage
tsx
import { FeatureSignalsProvider, useFlag } from '@featuresignals/react';
function App() {
return (
<FeatureSignalsProvider sdkKey="YOUR_API_KEY" envKey="dev">
<Checkout />
</FeatureSignalsProvider>
);
}
function Checkout() {
const enabled = useFlag('new-checkout', false);
return <div>New checkout: {enabled ? 'v2' : 'v1'}</div>;
}Vue
Install
bash
npm install @featuresignals/vueUsage
typescript
// main.ts
import { createApp } from "vue";
import { FeatureSignalsPlugin } from "@featuresignals/vue";
createApp(App)
.use(FeatureSignalsPlugin, { sdkKey: "YOUR_API_KEY", envKey: "dev" })
.mount("#app");html
<!-- In your component -->
<script setup>
import { useFlag } from "@featuresignals/vue";
const enabled = useFlag("new-checkout", false);
</script>6. Toggle and Observe
Go back to the Flag Engine, 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