ShadowConfigDocs

Cloud Config

Define game variables, choose data types, and push live updates without republishing.

Variables

Config variables are key/value pairs your game reads at runtime. Each variable is scoped to a single game, so you can have different configs for each experience without collision. The dashboard is the source of truth, and your in-game script fetches values from it.

  • Key — alphanumeric and underscores only. Keep it short and descriptive, like eventName or doubleXpEnabled.
  • Type — string, number, boolean, or json. Choose the type that matches how you will consume the value in Studio.
  • Value — validated per type on save. Invalid values are rejected before they touch the database.
  • Description — optional note shown in the dashboard for other team members. Use it to explain intent.

Types

Choose the right type for the job. The type you select affects validation in the dashboard and parsing in your Lua script.

  • string — plain text values. Good for names, messages, and identifiers.
  • number — validated numeric values. Good for multipliers, timers, and thresholds.
  • boolean — mapped to true/false in Studio. Good for feature flags and toggles.
  • json — structured objects, arrays, or nested data. Great for complex configs like loot tables or NPC behavior. Invalid JSON is rejected inline with an error message.

Reading Configs In-Game

The setup script exposes a GetAsync helper that fetches the latest value from the dashboard. The return is a JSON object, so you can destructure it directly in Lua.

Use it in server scripts for authoritative checks, like validating a kill threshold or event state. Use it in client scripts for UI-only toggles, like menu options or cosmetic settings.

Live Updates

With an Open Cloud API key configured, the game can be notified when configs change. The dashboard Auto Refresh button also forces a manual sync. Plan limits may restrict which types are allowed on lower tiers.

If you are not seeing live updates, check the Output window in Studio for errors from the config module, and make sure your API key has DataStore permissions enabled in Roblox. If seems to mess with other scripts, you may need to add a task.wait(5) at very beginning of script or add a for loop to fetch current players in game.