# Remote config

`client.RemoteConfig` (`RemoteConfigService`, namespace `RudderSdk.Core`).
Verified against the bundled `Rudder.Core.dll` and
`Samples~/RemoteConfig/RemoteConfigSample.cs`.

```csharp
await client.RemoteConfig.LoadAsync();
var speed = client.RemoteConfig.Get("player_speed", 5f);
```

API:

- `Task<IReadOnlyDictionary<string, RemoteConfig>> LoadAsync(CancellationToken = default)` — fetches all configs into the cache.
- `T Get<T>(string key, T defaultValue = default)` — reads the cache synchronously. Call `LoadAsync` first (or use `GetAsync`).
- `Task<T> GetAsync<T>(string key, T defaultValue = default, CancellationToken = default)` — loads on first use, then reads.
- `Task<RemoteConfig> GetConfigAsync(string key, CancellationToken = default)` — full config entry.
- `bool IsLoaded { get; }`, `IReadOnlyDictionary<string, RemoteConfig> Configs { get; }` — cache state.

`RemoteConfig` model: `Id`, `Key`, `Value` (string), `ValueType`,
`Description`, `Environment`, `ProjectId`, `Active` (`bool?`), `CreatedAt`,
`UpdatedAt`.

A missing key returns the fallback; the key must exist in the dashboard to
have a server value.
