> For the complete documentation index, see [llms.txt](/llms.txt).

# Advanced configuration

The Embedded Wallets SDK provides extensive configuration options that allow you to customize authentication flows, UI appearance, blockchain integrations, and security features to meet your application's specific requirements.

## Configuration structure[​](#configuration-structure "Direct link to Configuration structure")

When setting up Embedded Wallets, you'll pass in the options to the constructor. This consists of:

```
import 'package:web3auth_flutter/web3auth_flutter.dart';
import 'package:web3auth_flutter/enums.dart';
import 'package:web3auth_flutter/input.dart';
import 'package:web3auth_flutter/output.dart';
import 'dart:io';

Future<void> initWeb3Auth() async {

  late final String redirectUrl;

  if (Platform.isAndroid) {
    redirectUrl = 'w3a://com.example.w3aflutter';
  } else {
    redirectUrl = 'com.example.w3aflutter://auth';
  }


  await Web3AuthFlutter.init(Web3AuthOptions(
    clientId: "YOUR_WEB3AUTH_CLIENT_ID", // Pass your Web3Auth Client ID, ideally using an environment variable // Get your Client ID from MetaMask Developer Dashboard dashboard
    web3AuthNetwork: Web3AuthNetwork.sapphire_mainnet, // or Web3AuthNetwork.sapphire_devnet
    redirectUrl: redirectUrl,
  ));

}

```

### `Web3AuthOptions`[​](#web3authoptions "Direct link to web3authoptions")

The Web3Auth Constructor takes an object with `Web3AuthOptions` as input.

- Table
- Class

| Parameter             | Description                                                                                                      |
| --------------------- | ---------------------------------------------------------------------------------------------------------------- |
| clientId              | Your Web3Auth Client ID from the [Dashboard](https://developer.metamask.io/). Mandatory String.                  |
| web3AuthNetwork       | Web3Auth Network: sapphire_mainnet, sapphire_devnet, mainnet, cyan, aqua, or testnet. Mandatory Web3AuthNetwork. |
| redirectUrl           | URL that Web3Auth redirects to after successful authentication. Mandatory String.                                |
| whiteLabel?           | Whitelabel options for custom UI, branding, and translations. Takes WhiteLabelData as a value.                   |
| authConnectionConfig? | Auth connection config for custom connections. Takes List<AuthConnectionConfig> as a value.                      |
| chains?               | Chain configuration for Wallet Services and signing. Takes List<Chains> as a value.                              |
| defaultChainId?       | Default chain ID from the chains list.                                                                           |
| mfaSettings?          | Configure MFA settings for authentication. Takes MfaSettings as a value.                                         |
| sessionTime?          | Configure session management time in seconds. Default is 30 days. Max 30 days.                                   |

```
class Web3AuthOptions {
  final String clientId;
  final Web3AuthNetwork web3AuthNetwork;
  final BuildEnv? authBuildEnv;
  final String redirectUrl;
  final WhiteLabelData? whiteLabel;
  final List<AuthConnectionConfig>? authConnectionConfig;
  final List<Chains>? chains;
  final String? defaultChainId;
  final bool? useSFAKey;
  final MfaSettings? mfaSettings;
  final int sessionTime;

  Web3AuthOptions({
    required this.clientId,
    required this.web3AuthNetwork,
    this.authBuildEnv = BuildEnv.production,
    required this.redirectUrl,
    this.whiteLabel,
    this.authConnectionConfig = const [],
    this.chains,
    this.defaultChainId,
    this.useSFAKey = false,
    this.sessionTime = 30 * 86400,
    this.mfaSettings,
  });
}

```

## Session management[​](#session-management "Direct link to Session management")

Control how long users stay authenticated and how sessions persist. The session key is stored in the device's encrypted Keystore.

**Key Configuration Options:**

- `sessionTime` - Session duration in seconds. Controls how long users remain authenticated before needing to log in again.  
  - Minimum: 1 second (`1`).
  - Maximum: 30 days (`86400 * 30`).
  - Default: 30 days (`30 * 86400`).

```
await Web3AuthFlutter.init(Web3AuthOptions(
    clientId: "YOUR_WEB3AUTH_CLIENT_ID", // Pass your Web3Auth Client ID, ideally using an environment variable // Get your Client ID from MetaMask Developer Dashboard dashboard
    web3AuthNetwork: Web3AuthNetwork.sapphire_mainnet, // or Web3AuthNetwork.sapphire_devnet
    sessionTime: 30 * 86400, // 30 days (in seconds)
    redirectUrl: redirectUrl,
));

```

## Custom authentication methods[​](#custom-authentication-methods "Direct link to Custom authentication methods")

Control the login options presented to your users. For detailed configuration options and implementation examples, see the [custom authentication](/embedded-wallets/sdk/flutter/advanced/custom-authentication/) section.

## UI customization[​](#ui-customization "Direct link to UI customization")

Customize the brand experience by customizing the Web3Auth Login Screens to match your application's design. For complete customization options, refer to the [whitelabeling and UI customization](/embedded-wallets/sdk/flutter/advanced/whitelabel/) section.

## Multi-Factor Authentication (MFA)[​](#multi-factor-authentication-mfa "Direct link to Multi-Factor Authentication (MFA)")

Add additional security layers to protect user accounts with two-factor authentication. See the [detailed configuration options and implementation examples](/embedded-wallets/sdk/flutter/advanced/mfa/).

**Key Configuration Options:**

- `mfaSettings` - Configure MFA settings for different authentication flows
- `mfaLevel` - Control when users are prompted to set up MFA
