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

# Install Mixpanel

> Install Mixpanel SDK for your platform

## Overview

Installing Mixpanel is easy. This guide will show you how to do it with our SDKs.

Already collect product data? Connect your **[Data Warehouse](/docs/tracking-methods/warehouse-connectors)** or via **[3rd Party Integrations](/docs/tracking-methods/integrations/)**.

## Choose Your Platform

Not sure how to choose? [Read our guide](/docs/tracking-methods/choosing-the-right-method).

<Tabs>
  <Tab title="JavaScript">
    ### Install the SDK

    <Tabs>
      <Tab title="Snippet">
        ```html theme={null}
        <!-- Paste this right before your closing </head> tag -->
        <script type="text/javascript">
          (function (f, b) { if (!b.__SV) { var e, g, i, h; window.mixpanel = b; b._i = []; b.init = function (e, f, c) { function g(a, d) { var b = d.split("."); 2 == b.length && ((a = a[b[0]]), (d = b[1])); a[d] = function () { a.push([d].concat(Array.prototype.slice.call(arguments, 0))); }; } var a = b; "undefined" !== typeof c ? (a = b[c] = []) : (c = "mixpanel"); a.people = a.people || []; a.toString = function (a) { var d = "mixpanel"; "mixpanel" !== c && (d += "." + c); a || (d += " (stub)"); return d; }; a.people.toString = function () { return a.toString(1) + ".people (stub)"; }; i = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" "); for (h = 0; h < i.length; h++) g(a, i[h]); var j = "set set_once union unset remove delete".split(" "); a.get_group = function () { function b(c) { d[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); a.push([e, call2]); }; } for ( var d = {}, e = ["get_group"].concat( Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++) b(j[c]); return d; }; b._i.push([e, f, c]); }; b.__SV = 1.2; e = f.createElement("script"); e.type = "text/javascript"; e.async = !0; e.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : "file:" === f.location.protocol && "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js"; g = f.getElementsByTagName("script")[0]; g.parentNode.insertBefore(e, g); } })(document, window.mixpanel || []);
          mixpanel.init("YOUR_TOKEN");
        </script>
        ```
      </Tab>

      <Tab title="npm">
        ```bash theme={null}
        npm install --save mixpanel-browser
        ```
      </Tab>

      <Tab title="yarn">
        ```bash theme={null}
        yarn add mixpanel-browser
        ```
      </Tab>
    </Tabs>

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    You can learn more about configuring Session Replay and Heatmaps [here](/docs/tracking-methods/sdks/javascript/javascript-replay).

    ```javascript theme={null}
    //Import Mixpanel SDK
    import mixpanel from "mixpanel-browser";

    // Near entry of your product, init Mixpanel
    mixpanel.init("YOUR_TOKEN", {
      debug: true,
      track_pageview: true,
      persistence: "localStorage",
      record_sessions_percent: 100, //records 100% of all sessions
      record_heatmap_data: true,
    });
    ```
  </Tab>

  <Tab title="Python">
    ### Install the SDK

    ```bash theme={null}
    pip install mixpanel
    ```

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```python theme={null}
    from mixpanel import Mixpanel

    mp = Mixpanel("YOUR_TOKEN")
    ```
  </Tab>

  <Tab title="Node.js">
    ### Install the SDK

    ```bash theme={null}
    npm install mixpanel
    ```

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```javascript theme={null}
    // Grab the Mixpanel factory
    var Mixpanel = require("mixpanel");

    // Create an instance of the mixpanel client
    var mixpanel = Mixpanel.init("YOUR_TOKEN");
    ```
  </Tab>

  <Tab title="iOS Swift">
    ### Install the SDK

    <Tabs>
      <Tab title="Swift Package Manager">
        Note: Swift Package Manager requires Xcode 12+

        1. In Xcode, select File > Swift Packages > Add Package Dependency.
        2. Paste the URL `https://github.com/mixpanel/mixpanel-swift` and a minimum semantic version of v2.8.0.
      </Tab>

      <Tab title="CocoaPods">
        1. Create a Podfile in your Xcode project directory by running `pod init` in your terminal, edit the Podfile generated, and add the following line: `pod 'Mixpanel-swift'`.
        2. Run `pod install` in your Xcode project directory. CocoaPods should download and install the Mixpanel library, and create a new Xcode workspace. Open up this workspace in Xcode or typing `open *.xcworkspace` in your terminal.
      </Tab>

      <Tab title="Carthage">
        Add `github "mixpanel/mixpanel-swift"` to your Cartfile.
      </Tab>
    </Tabs>

    ### Configure the SDK

    1. Import Mixpanel into `AppDelegate.swift`
    2. Initialize Mixpanel within `application:didFinishLaunchingWithOptions` as seen below

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```swift theme={null}
    import Mixpanel

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        ...
        // Replace with your Project Token
        Mixpanel.initialize(token: "YOUR_TOKEN", trackAutomaticEvents: false)
        ...
    }
    ```
  </Tab>

  <Tab title="Android">
    ### Install the SDK

    Add `implementation 'com.mixpanel.android:mixpanel-android:7.+'` as a dependency to your `build.gradle` file.

    Once you've updated `build.gradle`, you can force Android Studio to sync with your new configuration by clicking the Sync Project with Gradle Files icon at the top of the window.

    If it cannot find the dependency, you should make sure you've specified `mavenCentral()` as a repository in `build.gradle`.

    Next, add the following permissions in your AndroidManifest.xml:

    ```xml theme={null}
    <!--Required to allow the application to send events to Mixpanel.-->
    <uses-permission android:name="android.permission.INTERNET" />

    <!--Optional, but recommended so we can send data intelligently based on network conditions -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- Optional, but recommended so events will contain information about bluetooth state-->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    ```

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```java theme={null}
    import com.mixpanel.android.mpmetrics.MixpanelAPI;

    public class MainActivity extends ActionBarActivity {
      private MixpanelAPI mp;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        trackAutomaticEvents = false;
        // Replace with your Project Token
        mp = MixpanelAPI.getInstance(this, "YOUR_TOKEN", trackAutomaticEvents);
      }
    }
    ```
  </Tab>

  <Tab title="React Native">
    ### Install the SDK

    Under your app's root directory, run:

    ```bash theme={null}
    npm install mixpanel-react-native
    ```

    Under your application's iOS folder, run:

    ```bash theme={null}
    pod install
    ```

    <Note>
      For XCode 12.5+, there is a known compile issue, please refer to this [workaround](https://github.com/mixpanel/mixpanel-react-native/issues/43#issuecomment-829599732).
    </Note>

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```javascript theme={null}
    //Import Mixpanel API
    import { Mixpanel } from "mixpanel-react-native";

    // Set up an instance of Mixpanel
    const trackAutomaticEvents = false;
    const mixpanel = new Mixpanel("YOUR_TOKEN", trackAutomaticEvents);
    mixpanel.init();
    ```
  </Tab>

  <Tab title="Flutter">
    ### Install the SDK

    Add `mixpanel_flutter: ^2.0.0` to your package's pubspec.yaml file and run:

    ```bash theme={null}
    flutter pub get
    ```

    ### Configure the SDK

    Replace `YOUR_TOKEN` with your project token. You can find your token [here](https://mixpanel.com/settings/project).

    ```dart theme={null}
    import 'package:mixpanel_flutter/mixpanel_flutter.dart';

    class _YourClassState extends State<YourClass> {
      Mixpanel mixpanel;

      @override
      void initState() {
        super.initState();
        initMixpanel();
      }

      Future<void> initMixpanel() async {
        // Once you've called this method once, you can access `mixpanel` throughout the rest of your application.
        mixpanel = await Mixpanel.init("YOUR_TOKEN", trackAutomaticEvents: false);
      }
    }
    ```
  </Tab>
</Tabs>

## Next Steps

With Mixpanel installed, you're now ready to identify the users who use your product.

<Card title="Identify Your Users" icon="user" href="/quickstart/identify-users">
  Learn how to identify users and set user properties
</Card>

## FAQ

<AccordionGroup>
  <Accordion title="Does Mixpanel automatically track page views?">
    Yes, if you pass `track_pageview: true` in the `mixpanel.init()` call, Mixpanel will automatically track a "Page View" event every time a new page is loaded. Learn more [here](/docs/tracking-methods/sdks/javascript#tracking-page-views).
  </Accordion>

  <Accordion title="What are the recommended web configuration options?">
    When tracking on web, we recommend using localStorage, as this is more reliable:

    ```javascript theme={null}
    mixpanel.set_config({ persistence: "localStorage" });
    ```

    Please note that cross-subdomain tracking is not possible when using local storage. If your implementation requires cross-subdomain tracking, remove the persistence flag and use the default "cookie" persistence option.
  </Accordion>

  <Accordion title="Does Mixpanel use third-party cookies?">
    No, our Mixpanel JavaScript SDK does not set or use any third-party cookies. If you wish to disable cookies entirely, you can set the disable\_persistence option to true when initializing your Mixpanel JS instance. Note that disabling persistence will disable the use of super properties and anonymous -> identified user tracking.
  </Accordion>

  <Accordion title="How can I track in a privacy compliant way?">
    If a user opts out of tracking, you can call the `.optOutTracking()` method on any of our client-side SDKs; this prevents any subsequent data being tracked from that user's device. Learn more [here](/docs/privacy/protecting-user-data).

    For iOS specifically: Mixpanel does not use IDFA, so it does not require user permission through the AppTrackingTransparency(ATT) framework. For more details, refer to our [Apple App Developer Privacy Guidance](https://mixpanel.com/legal/app-store-privacy-details).
  </Accordion>
</AccordionGroup>
