> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pnlight.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Remote Config

> Create typed PNLight Remote Config keys, targeted overrides, publish revisions, and keep app behavior configurable without an app release.

Remote Config lets you manage typed app settings in PNLight and deliver them to the SDK for each app installation. Use it for non-sensitive product configuration such as feature flags, paywall copy, limits, variants, and rollout settings.

<Warning>
  Remote Config is not a secret store. Do not put API keys, credentials, shared secrets, or other sensitive values in Remote Config.
</Warning>

## How Remote Config works

Remote Config has two parts:

* **Base configuration**: the required catalog of keys and default values.
* **Overrides**: targeted value changes that apply when an installation matches their conditions.

The SDK fetches the published configuration for the current PNLight user. If a fetch fails, the app keeps using the previously active configuration or the local defaults provided during SDK initialization.

## Create the base configuration

Open **Remote Config** in the dashboard and add every key your app can read.

Supported value types:

| Type         | Use for                                           |
| ------------ | ------------------------------------------------- |
| Boolean      | Feature flags and on/off switches.                |
| String       | Copy variants, IDs, labels, and simple modes.     |
| Number       | Limits, prices, durations, and percentages.       |
| String array | Lists of enabled plans, countries, or variants.   |
| JSON         | Structured values that should be edited together. |

Keys must start with a letter. They can contain letters, numbers, and underscores.

<Note>
  Keep keys flat and stable. A JSON value is replaced as a whole by an override; PNLight does not deep-merge nested JSON fields.
</Note>

## Add overrides

Use overrides when a segment should receive a different value from the base configuration.

An override can target installation attributes such as:

* Attributed campaign, including organic users.
* Device family and model.
* OS version.
* SDK version.
* IP country or App Store country.

Each override can replace only keys declared in the base configuration. Matching overrides apply in the order shown in the dashboard. Drag overrides to change their order; when multiple matching overrides set the same key, the later matching value wins.

## Save and publish

Remote Config changes start as a draft.

<Steps>
  <Step title="Edit the draft">
    Add or update base keys and overrides.
  </Step>

  <Step title="Save changes">
    Save the draft when the fields validate.
  </Step>

  <Step title="Publish">
    Publish the draft when it is ready for SDKs.
  </Step>
</Steps>

SDK requests resolve only the latest published revision. Unpublished draft changes do not affect apps.

## Restore a revision

Use **Revision history** to review published versions. Restoring a revision replaces the current draft with that version. Publish the restored draft to make it live again.

## Coordinate with the app

Before you publish a new key, confirm that the app has a typed getter and a safe fallback for that key. See [Remote Config SDK integration](/sdk/remote-config) for Swift, React Native, and Flutter examples.
