# Remote config — `client.remoteConfig` `ConfigDomain` (source: `src/domains/ConfigDomain.ts`, base class `src/state/RemoteConfigState.ts`) — typed remote configuration as an observable entity. Synced under revision key `config`. ## Typed access ```ts interface GameConfig extends Record { player_speed: number; feature_x: boolean; } const client = new RudderClient({ baseUrl, projectKey }); client.remoteConfig.get('player_speed', 200); // number client.remoteConfig.get('feature_x'); // boolean | undefined ``` `get()` overloads: ```ts get(key): TConfig[key] | undefined; get(key, defaultValue: TConfig[key]): TConfig[key]; ``` - Values are parsed synchronously from the loaded snapshot according to the config's server-declared `valueType`. - Returns the default value (or `undefined`) while not loaded, for unknown keys, and when parsing fails. - Parsing rules: `int`/`integer` → `parseInt`; `float`/`double`/`number` → `parseFloat`; `bool`/`boolean` → `value === 'true'`; `json`/`object` → `JSON.parse`; anything else → raw string. ## Observable ```ts client.remoteConfig.data // Map | undefined client.remoteConfig.onChange(cb); // fires immediately await client.remoteConfig.reload(); ``` ```ts interface RemoteConfig { active?: boolean; createdAt?: string; description?: string; environment?: string; id?: string; key?: string; projectId?: string; updatedAt?: string; value?: string; valueType?: 'bool' | 'float' | 'int' | 'json' | 'string'; } ``` Only configs that are not explicitly `active: false` enter the map (the server already filters inactive configs out and may omit the flag). ## Behavior notes - Warmed at login. - Scenario `remote_config_override` nodes patch the local snapshot and fire `client.effects.onConfigChanged({ key })` — the patched value is what `get()` returns afterwards. - Without a `TConfig` type argument, `RemoteConfigShape` defaults to `Record` and `get()` returns `unknown`.