Runtime Config Control
At the Edge

Ship faster with instant feature rollouts and edge compute. Runcfg delivers flags, configurations, and runs your config workers from global edge servers.

No credit card required. Free tier available for everyone*

Building Free and Open Source software?

Contact us to get a free enterprise license. A billing account is required to reach support and request a FOSS enterprise upgrade.

Contact us
Global Infrastructure

Edge-Replicated

Your flags and configurations are replicated across edge locations globally. Your users get rapid responses, no matter where they are.

Low Latency

In optimal cases, flags and configurations are served from the edge node closest to your users.

Multiple Edge Locations

When enabled, your configuration and flags are automatically replicated across our global edge network on every change.

99.9% Uptime SLA

Built-in redundancy and automatic failover ensure your applications can evaluate flags & configuration at runtime.

How Runcfg Compares

Built for Services and Platforms

Most flag platforms start from the user-facing app: targeting users and running experiments. Runcfg starts from the services and platforms behind it, with flags, configuration, secrets and edge workers managed together in one project.

Feature Flagsmith Launch­Darkly
Feature Flags
Boolean, number and string flags
Kill switches, limits and tuning values for running services
Yes Yes Yes
Percentage A/B splits
Send a share of traffic down a new code path, sticky per session
Yes Yes Yes
Counter flags
Atomic counters shared by every instance of a service
Yes No No
Configuration
Change values without a redeploy
Tune running services from the dashboard
Yes Yes Yes
Configuration separate from flags
Flags are checked from memory on every request. Config is a named JSON or YAML document with full version history, loaded when a service starts or reloads, so it stays off the request path
Yes Partial:
Config stored as flag values
Partial:
Config stored as JSON flag variations
Secrets
Encrypted secrets storage
Database passwords and API keys, encrypted with per-project RSA-2048 keys and served by the same SDK as your config
Yes No No
Edge
Global edge delivery
Serve flags and config from locations close to your services
Yes Yes Yes
Run your own code at the edge
WebAssembly workers on our edge network, with your flags and config injected as environment variables
Yes No No:
SDKs for third-party edge platforms

Also built in for platform teams

Missing-key reports

See every flag and config name your services ask for that doesn't exist yet.

SDK IP allowlists

Only your own servers can read a project's flags, config and secrets.

SDK latency metrics

Response time and error rate for every project's SDK traffic, per hour.

Comparison based on each vendor's public documentation as of September 2026. Secrets, workers and IP allowlists require a Max or Enterprise plan. Flagsmith and LaunchDarkly are trademarks of their respective owners.

New

Config Workers

Deploy config workers to our global edge network. Run compute close to your users with automatic flag and config injection.

  • WASM Runtime — Write workers in Rust, Go, C++, or any language that compiles to WebAssembly
  • Auto-Injected Flags — Project flags and configs automatically available as environment variables
  • Secure Sandbox — Isolated execution with configurable memory limits and timeouts
  • No SDK Required — Workers access flags via standard environment variables
use std::env;

fn main() {
    // Flags are auto-injected as env vars
    let dark_mode = env::var("RUNCFG_FLAG_DARK_MODE")
        .unwrap_or("false".into());

    let max_items = env::var("RUNCFG_FLAG_MAX_ITEMS")
        .unwrap_or("10".into());

    // Access request info
    let method = env::var("REQUEST_METHOD").unwrap();
    let path = env::var("REQUEST_PATH").unwrap();

    // Write HTTP response
    println!("STATUS 200");
    println!("Content-Type: text/plain");
    println!();
    println!("Hello from the edge!");
}
package main

import (
    "fmt"
    "os"
)

func main() {
    // Flags are auto-injected as env vars
    darkMode := os.Getenv("RUNCFG_FLAG_DARK_MODE")
    if darkMode == "" {
        darkMode = "false"
    }

    maxItems := os.Getenv("RUNCFG_FLAG_MAX_ITEMS")
    if maxItems == "" {
        maxItems = "10"
    }

    // Access request info
    method := os.Getenv("REQUEST_METHOD")
    path := os.Getenv("REQUEST_PATH")

    // Write HTTP response
    fmt.Println("STATUS 200")
    fmt.Println("Content-Type: text/plain")
    fmt.Println()
    fmt.Println("Hello from the edge!")
}
#include <iostream>
#include <cstdlib>
#include <string>

int main() {
    // Flags are auto-injected as env vars
    const char* dark_mode_env = std::getenv("RUNCFG_FLAG_DARK_MODE");
    std::string dark_mode = dark_mode_env ? dark_mode_env : "false";

    const char* max_items_env = std::getenv("RUNCFG_FLAG_MAX_ITEMS");
    std::string max_items = max_items_env ? max_items_env : "10";

    // Access request info
    std::string method = std::getenv("REQUEST_METHOD");
    std::string path = std::getenv("REQUEST_PATH");

    // Write HTTP response
    std::cout << "STATUS 200" << std::endl;
    std::cout << "Content-Type: text/plain" << std::endl;
    std::cout << std::endl;
    std::cout << "Hello from the edge!" << std::endl;
    return 0;
}
10ms
Typical cold start
10MB
Max WASM binary
128MB
Default memory limit
10s
Max execution time

Integrate in Minutes

A few lines of code is all it takes.

import "github.com/runcfg/sdk-go"

client := runcfg.New("your-api-key")

// Get a feature flag
enabled := client.Bool("new-checkout", false)

// Get configuration
config := client.Config("app-settings")
use runcfg::Client;

let client = Client::new("your-api-key");

// Get a feature flag
let enabled = client.bool("new-checkout", false);

// Get configuration
let config = client.config("app-settings");
#include <runcfg/runcfg.hpp>

runcfg::Client client("your-api-key");

// Get a feature flag
bool enabled = client.get_bool_default("new-checkout", false);

// Get configuration
auto config = client.get_config("app-settings");
import { Runcfg } from '@runcfg/sdk';

const client = new Runcfg('your-api-key');

// Get a feature flag
const enabled = client.bool('new-checkout', false);

// Get configuration
const config = client.config('app-settings');

Ready to ship faster?

Join thousands of developers who use Runcfg to manage feature flags and configuration at the edge.

*All tiers include limited flag evaluations/month