← All Docs Remote Config

Remote Config

Change game settings from the Baseplate dashboard without republishing your game.

Overview

Remote Config lets you modify game variables — XP multipliers, shop toggles, damage values, feature flags — in real time from the Baseplate dashboard. Your game polls for changes automatically and applies them without a republish.

When the API is unreachable, your game falls back to default values. Remote Config will never break your game.

Installation

1. Add BaseplateConfig.luau to ServerStorage.Baseplate in your game.

2. Enable HTTP Requests in Game Settings → Security.

3. Get your API key from the Baseplate Dashboard.

Quick Start

Add this to a Script in ServerScriptService:

local BaseplateConfig = require(game.ServerStorage.Baseplate.BaseplateConfig)

BaseplateConfig:Init({
    apiKey = "bp_live_your_key",
    apiUrl = "https://baseplate-ab.baseplate-rblx.workers.dev",
    environment = "production",
    refreshInterval = 60,
    defaults = {
        xpMultiplier = 1,
        shopEnabled = true,
        swordDamage = 25,
        welcomeMessage = "Welcome!",
    },
})

-- Use config values anywhere
local xp = BaseplateConfig:Get("xpMultiplier")
local enabled = BaseplateConfig:Get("shopEnabled")

Now go to the Dashboard → Remote Config tab → add or change a key. Your game picks up the change within 60 seconds (or whatever refreshInterval you set).

API Reference

BaseplateConfig:Init(config)

Initialize the config system. Call once on server start.

ParameterTypeDescription
apiKeystringYour Baseplate API key.
apiUrlstringBaseplate API URL.
environmentstring?"production" or "development". Default: "production".
refreshIntervalnumber?Seconds between config polls. Default: 60.
defaultstableFallback values used when API is unreachable or key is missing.

BaseplateConfig:Get(key) → value

Get a config value. Returns the remote value if loaded, otherwise the default. Always safe to call.

local damage = BaseplateConfig:Get("swordDamage") -- returns number
local msg = BaseplateConfig:Get("welcomeMessage") -- returns string

BaseplateConfig:GetAll() → table

Returns a deep copy of all current config values as a table.

BaseplateConfig:IsLoaded() → boolean

Returns true if remote config has been successfully loaded at least once.

BaseplateConfig:Refresh()

Force an immediate refresh from the API (async). Normally you don't need this — the background loop handles it.

BaseplateConfig:OnChanged(key, callback)

Register a callback that fires when a specific key's value changes. Useful for applying changes in real time.

BaseplateConfig:OnChanged("playerSpeed", function(newSpeed, oldSpeed)
    print("Speed changed:", oldSpeed, "->", newSpeed)
    for _, player in Players:GetPlayers() do
        local hum = player.Character and player.Character:FindFirstChild("Humanoid")
        if hum then hum.WalkSpeed = newSpeed end
    end
end)

BaseplateConfig:OnAnyChanged(callback)

Register a callback that fires when any config key changes.

BaseplateConfig:OnAnyChanged(function(key, newValue, oldValue)
    print(key, "changed:", oldValue, "->", newValue)
end)

Dashboard Guide

In the Baseplate Dashboard, click the Remote Config tab.

Environments

Remote Config supports two environments: production and development. Each has its own independent set of keys and values.

Use development while testing in Studio, then switch to production for your live game. The environment selector in the dashboard lets you manage both.

-- In your test place:
BaseplateConfig:Init({
    environment = "development",
    ...
})

-- In your live game:
BaseplateConfig:Init({
    environment = "production",
    ...
})

Rollback

Every config change is recorded in the audit history. To rollback:

  1. Open the history modal for the key you want to revert.
  2. Find the previous value you want to restore.
  3. Click the ↩ Rollback button. The key is instantly restored.

Rollback itself is recorded as a new history entry, so you always have a complete audit trail.

Best Practices