# Customize the SDK

This guide explains the two ways the SDK Demo App customizes the SDK from the integrating app, and when each change takes effect.

## How it works

The demo app's **Customization** menu demonstrates both models. The difference that matters is the moment each change is read.

| Type | Applied at | Takes effect | Requires reinitialization? |
| :--- | :--- | :--- | :--- |
| Colors | SDK build time, inside `BrSetupClient` | After the next `reinitialize(…)` | Yes |
| Receipts | SDK build time, inside `BrSetupClient` | After the next `reinitialize(…)` | Yes |
| Navigation — extra or replaced screens | On the already-initialized client | Immediately | No |

## Build-time customization

Colors and receipts are read while the SDK is built, so changing them requires a full `shutdown()` and `setup(…)` cycle. That is what `reinitialize` does.

Plan for this in your own app: a user-facing theme switch cannot take effect until you reinitialize the SDK.

## Runtime customization

Navigation customization is applied to the running client through `customizeNavigation`, so it takes effect immediately.

Use it to insert a cashback or tip step, or to replace a native SDK screen with your own Composable.

## Next steps

* [Customize the Theme](/en/getnet-toolbox/sdk-white-label/how-to-guides-sdk/customize-the-theme) — the SDK's own reference for theming.
* [Customize Receipts](/en/getnet-toolbox/sdk-white-label/how-to-guides-sdk/customize-receipts) — the receipt fields you can change.
* [Override SDK Screens](/en/getnet-toolbox/sdk-white-label/how-to-guides-sdk/override-sdk-screens) — how screen replacement works in the SDK.