# FrakConfig

class FrakConfig

Everything the SDK needs to start, supplied once at [id.frak.sdk.Frak.initialize](/developers/references/android/id-frak-sdk/frak/initialize/). Never validated at construction; an unusable config surfaces later as [FrakError.MerchantResolutionFailed](/developers/references/android/id-frak-sdk-core/frakerror/merchantresolutionfailed/).

## Types

| Name | Summary |
|---|---|
| [Builder](/developers/references/android/id-frak-sdk-core/frakconfig/builder/) | class [Builder](/developers/references/android/id-frak-sdk-core/frakconfig/builder/)<br>`Builder()` exists alongside `Builder(merchantId)` because [merchantId](/developers/references/android/id-frak-sdk-core/frakconfig/builder/merchantid/) is optional. The empty one is primary: a shared `constructor(String?)` would erase to the same JVM descriptor as `constructor(String)`. |

## Properties

| Name | Summary |
|---|---|
| [deepLink](/developers/references/android/id-frak-sdk-core/frakconfig/deeplink/) | val [deepLink](/developers/references/android/id-frak-sdk-core/frakconfig/deeplink/): [DeepLinkHandling](/developers/references/android/id-frak-sdk-core/deeplinkhandling/) |
| [env](/developers/references/android/id-frak-sdk-core/frakconfig/env/) | val [env](/developers/references/android/id-frak-sdk-core/frakconfig/env/): [FrakEnvironment](/developers/references/android/id-frak-sdk-core/frakenvironment/)<br>Merchants never set this; exists for Frak's own dev/local builds. |
| [logLevel](/developers/references/android/id-frak-sdk-core/frakconfig/loglevel/) | val [logLevel](/developers/references/android/id-frak-sdk-core/frakconfig/loglevel/): [FrakLogLevel](/developers/references/android/id-frak-sdk-core/frakloglevel/) |
| [logSink](/developers/references/android/id-frak-sdk-core/frakconfig/logsink/) | val [logSink](/developers/references/android/id-frak-sdk-core/frakconfig/logsink/): [FrakLogSink](/developers/references/android/id-frak-sdk-core/fraklogsink/)? |
| [merchantId](/developers/references/android/id-frak-sdk-core/frakconfig/merchantid/) | val [merchantId](/developers/references/android/id-frak-sdk-core/frakconfig/merchantid/): [String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)?<br>Optional; when null, merchant is resolved from packageId instead. `merchantId` wins if both set. |
| [metadata](/developers/references/android/id-frak-sdk-core/frakconfig/metadata/) | val [metadata](/developers/references/android/id-frak-sdk-core/frakconfig/metadata/): [FrakMetadata](/developers/references/android/id-frak-sdk-core/frakmetadata/) |
| [packageId](/developers/references/android/id-frak-sdk-core/frakconfig/packageid/) | val [packageId](/developers/references/android/id-frak-sdk-core/frakconfig/packageid/): [String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)?<br>Null reads `context.packageName` at [id.frak.sdk.Frak.initialize](/developers/references/android/id-frak-sdk/frak/initialize/). `bundleId` on iOS. |
| [trackingEnabled](/developers/references/android/id-frak-sdk-core/frakconfig/trackingenabled/) | val [trackingEnabled](/developers/references/android/id-frak-sdk-core/frakconfig/trackingenabled/): [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)<br>Hard floor for tracking that [id.frak.sdk.FrakClient.setTrackingEnabled](/developers/references/android/id-frak-sdk/frakclient/settrackingenabled/) cannot lift at runtime. `false` also stops sharing, but config and reward resolution still run. |