---
title: Manual SDK Start - Flutter (classic)
description: Implement the manual start of the Contentsquare Flutter SDK
lastUpdated: 07 April 2026
source_url:
  html: https://docs.contentsquare.com/en/flutter/manual-sdk-start/
  md: https://docs.contentsquare.com/en/flutter/manual-sdk-start/index.md
---

> Documentation index: https://docs.contentsquare.com/llms.txt
> Use this file to discover all available pages before exploring further.

The latest CSQ SDK is here! Learn how to [upgrade your app](https://docs.contentsquare.com/en/csq-sdk-flutter/experience-analytics/upgrade-from-cs-sdk/).

In certain situations, you may want to have full control over when the SDK is initialized. The `manual SDK start` feature allows you to initiate the SDK at any point in your application's lifecycle.

On this page you will find the steps to control manual start of the Contentsquare Flutter SDK.

## Disabling Automatic SDK Initialization

To manage SDK start manually, you need to disable automatic initialization on the platform's native side. For this you need to modify the `AndroidManifest.xml` file of your Android project and the `Info.plist` file of your iOS project.

* Android

  Add the `com.contentsquare.android.autostart` flag to `false` in your `AndroidManifest.xml` file.

  **AndroidManifest.xml**

  ```xml
  <application>
    ...
      <meta-data
        android:name="com.contentsquare.android.autostart"
        android:value="false"
      />
    ...
  </application>
  ```

* iOS

  Add the `CSDisableAutostart` key to your `Info.plist`. Set it to `true` to disable the autostart.

  **Info.plist**

  ```xml
  <key>CSDisableAutostart</key>
  <true/>
  ```

## Manual SDK start

You can control the SDK initialization from your Flutter app code by calling the `start` method of the `Contentsquare` class.

```dart
class UserConsentScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Consent'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            await Contentsquare().start();


            // Depending on the project configuration in `Experience Analytics`
            // you might need to call `optIn`
            // await Contentsquare().optIn();
          },
          child: Text('Agree with Terms and Conditions'),
        ),
      ),
    );
  }
}
```

After the `start` is called the SDK will be initialized and [the config will be fetched](https://docs.contentsquare.com/en/flutter/how-the-sdk-works/#configuration). Validate the SDK integration by following the [validation steps](https://docs.contentsquare.com/en/flutter/#validate-sdk-integration).

Note

Only the first call to `start` will initialize the SDK. Subsequent calls will be ignored.

### Start method arguments

#### MaskingConfig

`MaskingConfig` allows you to set the default `MaskingConfig` for your entire application. For more dynamic and localized masking, refer to the `Session Replay` [masking documentation](https://docs.contentsquare.com/en/flutter/session-replay/#personal-data-masking).

```dart
void _startContentsquare() async {
  final maskingConfig = MaskingConfig(
    maskTexts: true,
    maskImages: false,
  );


  await Contentsquare().start(maskingConfig: maskingConfig);
}
```
