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.
| Parameter | Type | Description |
|---|---|---|
apiKey | string | Your Baseplate API key. |
apiUrl | string | Baseplate API URL. |
environment | string? | "production" or "development". Default: "production". |
refreshInterval | number? | Seconds between config polls. Default: 60. |
defaults | table | Fallback 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.
- Add Key — Click "Add Key", enter a key name, choose a type (number, string, boolean, JSON), and set the value.
- Edit — Click the edit icon on any row to change its value. Changes take effect on the next game server refresh.
- Delete — Remove a key. Games will fall back to their default value for that key.
- History — Click the history icon to see every change made to a key, with timestamps and rollback buttons.
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:
- Open the history modal for the key you want to revert.
- Find the previous value you want to restore.
- 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
- Always set defaults — Your game should work perfectly with just the default values. Remote config is an enhancement, not a dependency.
- Use descriptive key names —
xpMultiplieris better thanxpm. You'll thank yourself when you have 30 keys. - Start with
development— Test changes in a development environment before applying to production. - Keep refreshInterval reasonable — 60 seconds is good for most games. Don't set it below 10 seconds unless you need near-real-time updates.
- Use OnChanged for live updates — Don't re-read config every frame. Register callbacks for keys that need immediate effect.