SignaKitdocs

Quickstart

Get your first SignaKit feature flag evaluating in 5 minutes.

Quickstart

In 5 minutes, you'll install the SignaKit SDK, create your first feature flag evaluation, and see it working in your chosen language or framework. SignaKit evaluates flags locally after a single config fetch — there's no network call on the hot decide() path. Pick your platform below and follow the three steps to get your first flag decision logged.

Create a project and copy your SDK key

In the SignaKit dashboard, create a project and navigate to Settings → API Keys. Copy a sk_dev_ key for local development.

Use sk_dev_ keys in development and sk_prod_ keys in production. Never expose a production key in client-side code — use @signakit/flags-browser or @signakit/flags-react for browser environments, which use the same key format.

Install the SDK

npm install @signakit/flags-node
npm install @signakit/flags-react @signakit/flags-browser
pip install signakit-flags
go get github.com/signakit/flags-golang@latest
composer require signakit/flags-php
# or for Laravel
composer require signakit/flags-laravel
<!-- Maven -->
<dependency>
  <groupId>com.signakit</groupId>
  <artifactId>flags-java</artifactId>
  <version>0.1.0</version>
</dependency>
# pubspec.yaml
dependencies:
  signakit_flags: ^0.1.0
npx expo install @signakit/flags-react-native

Initialize and evaluate

import { createInstance } from '@signakit/flags-node'

// Initialize once at module level — not per request
const client = createInstance({ sdkKey: process.env.SIGNAKIT_SDK_KEY! })
await client.onReady()

const userCtx = client.createUserContext('user-123', { plan: 'pro' })
const decision = userCtx.decide('my-first-flag')

if (decision?.enabled) {
  // show the new experience
}
import { SignaKitProvider, useFlag } from '@signakit/flags-react'

function App() {
  return (
    <SignaKitProvider sdkKey="sk_dev_xxxx" userId="user-123">
      <MyComponent />
    </SignaKitProvider>
  )
}

function MyComponent() {
  const { enabled } = useFlag('my-first-flag')
  return enabled ? <NewExperience /> : <CurrentExperience />
}
from signakit_flags import SignaKitClient

client = SignaKitClient(sdk_key="sk_dev_xxxx")
ready = await client.on_ready()

user = client.create_user_context("user-123", {"plan": "pro"})
decision = user.decide("my-first-flag")

if decision and decision.enabled:
    # show the new experience
import (
    "context"
    "fmt"
    "os"

    sk "github.com/signakit/flags-golang/signakit"
)

// Initialize once at startup
client, err := sk.NewClient(context.Background(), os.Getenv("SIGNAKIT_SDK_KEY"))
if err != nil {
    log.Fatalf("signakit: %v", err)
}

userCtx := client.CreateUserContext("user-123", sk.UserAttributes{"plan": "pro"})
decision := userCtx.Decide("my-first-flag")

if decision != nil && decision.Enabled {
    fmt.Println("flag on, variation:", decision.VariationKey)
}
use SignaKit\FlagsPhp\SignaKitClient;

// Initialize once (register as a singleton in your DI container)
$client = new SignaKitClient(sdkKey: $_ENV['SIGNAKIT_SDK_KEY']);
$client->initialize();

$userCtx = $client->createUserContext(
    userId: 'user-123',
    attributes: ['plan' => 'pro'],
);

$decision = $userCtx->decide('my-first-flag');

if ($decision?->enabled) {
    echo $decision->variationKey; // e.g. "treatment"
}
import 'package:flutter/material.dart';
import 'package:signakit_flags/signakit_flags.dart';

void main() {
  runApp(
    SignaKitProvider(
      sdkKey: 'sk_dev_xxxx',
      userId: 'user-123',
      attributes: const {'plan': 'pro'},
      child: const MyApp(),
    ),
  );
}

// Anywhere in the widget tree:
FlagBuilder(
  flagKey: 'my-first-flag',
  builder: (context, flag) {
    return flag.enabled ? const NewExperience() : const CurrentExperience();
  },
)
import { SignaKitProvider, useFlag } from '@signakit/flags-react-native'

export default function App() {
  return (
    <SignaKitProvider sdkKey="sk_dev_xxxx" userId="user-123">
      <MyScreen />
    </SignaKitProvider>
  )
}

function MyScreen() {
  const { enabled, loading } = useFlag('my-first-flag')
  if (loading) return <ActivityIndicator />
  return enabled ? <NewExperience /> : <CurrentExperience />
}

View the result in the dashboard

Head to your project's Flags list. SignaKit shows live exposure counts as your SDK fires $exposure events. If you don't see data yet, check that:

  1. Your SDK key matches the project you're viewing
  2. onReady() returned success: true before calling decide()
  3. You're looking at the correct environment (dev vs. prod)

Next steps

Last updated on

On this page