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

# Quickstart

> Compare Kameleoon's web, server-side, and mobile SDKs at a glance, then jump straight to the one you need to install and initialize.

Kameleoon provides a dedicated SDK for each major web, server-side, and mobile platform. Find the SDK for your stack below and follow its link for the exact setup steps on that SDK's own reference page.

## Before you start

* **A Kameleoon project.** Every SDK needs a site code to connect to your Kameleoon account. If you don't have one yet, [add a new project](../../user-manual/project-management/manage-your-projects#add-a-new-project) and choose the SDK option when prompted.
* **API credentials for server-side SDKs.** Server-side SDKs authenticate with a client ID and client secret. Find or generate these in [API credentials](../../user-manual/account-and-team-management/users-and-teams/api-credentials). Client-side and mobile SDKs authenticate with just your project's site code.
* **A feature flag to test against.** [Create a feature flag](../../user-manual/experimentation/feature-experimentation/create-and-manage-flags/create-a-feature-flag) in your account so you have something to check once the client initializes.

## Choose your SDK

Select your platform, then your language. Each card links directly to that SDK's install and initialization steps.

### Web

<CardGroup cols={2}>
  <Card title="JavaScript/TypeScript" icon="js" href="web-sdks/js-sdk#getting-started">
    Framework-agnostic client-side SDK for any web app. Install using the SDK Installer, or a single `<script>` tag with no build step.
  </Card>

  <Card title="React" icon="react" href="web-sdks/react-js-sdk#getting-started">
    React bindings with hooks and a provider component. Install using the SDK Installer.
  </Card>
</CardGroup>

### Server-side

<CardGroup cols={3}>
  <Card title="Node.js" icon="node-js" href="web-sdks/nodejs-sdk#get-started">
    Server-side SDK for Node.js, with manual configuration for Deno. Install using the SDK Installer.
  </Card>

  <Card title="Java" icon="java" href="web-sdks/java-sdk#getting-started">
    Runs on Java EE or Jakarta EE app servers. Install from Maven Central.
  </Card>

  <Card title="C#" icon="https://mintcdn.com/kameleoon/p9T1ivU-Y7xsfvqu/images/csharp-icon.svg?fit=max&auto=format&n=p9T1ivU-Y7xsfvqu&q=85&s=74b9bd4d241b0946a3021fffb00b77c3" href="web-sdks/csharp-sdk#getting-started" width="128" height="128" data-path="images/csharp-icon.svg">
    Runs on .NET app servers. Install using NuGet, the .NET CLI, or Paket.
  </Card>

  <Card title="PHP" icon="php" href="web-sdks/php-sdk#getting-started">
    Runs on PHP backend servers, with optional cron job tracking. Install using Composer.
  </Card>

  <Card title="Python" icon="python" href="web-sdks/python-sdk#getting-started">
    Runs on Python backend servers, including Django. Install using pip.
  </Card>

  <Card title="Ruby" icon="https://mintcdn.com/kameleoon/p9T1ivU-Y7xsfvqu/images/ruby-icon.svg?fit=max&auto=format&n=p9T1ivU-Y7xsfvqu&q=85&s=e741131bb9f0d64e256376a603e598be" href="web-sdks/ruby-sdk#getting-started" width="24" height="24" data-path="images/ruby-icon.svg">
    Runs on Ruby backend servers and Rails apps. Install using RubyGems.
  </Card>

  <Card title="Go" icon="golang" href="web-sdks/go-sdk#getting-started">
    Runs in Go web apps and services. Install directly from the Kameleoon GitHub repository with `go get`.
  </Card>

  <Card title="Rust" icon="rust" href="web-sdks/rust-sdk#getting-started">
    Runs in Rust services and web backends. Requires an async runtime such as `tokio`. Install using Cargo.
  </Card>

  <Card title="Elixir" icon="https://mintcdn.com/kameleoon/MNIWYtyXD0AitEFA/images/elixir-icon.svg?fit=max&auto=format&n=MNIWYtyXD0AitEFA&q=85&s=2238b2e7ff8124e338385674da760443" href="web-sdks/elixir-sdk#getting-started" width="24" height="24" data-path="images/elixir-icon.svg">
    Runs in Elixir services and web backends. Includes native code built from the Rust core, so Rust and Cargo must be on your `PATH`. Install using Mix.
  </Card>
</CardGroup>

### Mobile

<CardGroup cols={2}>
  <Card title="Android" icon="android" href="mobile-sdks/android-sdk#getting-started">
    For native Android apps. Install using Gradle.
  </Card>

  <Card title="iOS" icon="swift" href="mobile-sdks/ios-sdk#getting-started">
    For native iOS apps built with Swift 5.0 or higher. Install using CocoaPods or Swift Package Manager.
  </Card>

  <Card title="Flutter" icon="flutter" href="mobile-sdks/flutter-sdk#getting-started">
    For every platform the Flutter framework targets. Install by declaring a dependency in `pubspec.yaml`.
  </Card>

  <Card title="React Native" icon="react" href="mobile-sdks/react-native-sdk#getting-started">
    Uses the same `@kameleoon/react-sdk` package as the React SDK, with React Native-specific dependencies wired in. Install using the SDK Installer.
  </Card>
</CardGroup>

## Verify the SDK is initialized

Every Kameleoon SDK initializes asynchronously: the client starts fetching your flag configuration in the background as soon as you create it, and becomes ready shortly afterward. Evaluating a flag before the client is ready can return a default or reference variation instead of the one you expect, so confirm readiness before you rely on flag results.

Web and server-side SDKs each expose a blocking call that waits for that first fetch to complete:

| Language                                       | Blocking call         |
| ---------------------------------------------- | --------------------- |
| JavaScript, React, React Native, Node.js, Rust | `initialize()`        |
| Elixir                                         | `Client.initialize/1` |
| Java, C#, PHP                                  | `waitInit()`          |
| Python, Ruby                                   | `wait_init()`         |
| Go                                             | `WaitInit()`          |

Android, iOS, and Flutter don't block client creation on the first fetch. Use the readiness check documented for that SDK instead, such as `isReady()` (Android), `.ready` (iOS), or `isReadyAsync()` (Flutter), or wrap flag evaluation in the SDK's `runWhenReady()` callback.

Once the client is ready, evaluate the feature flag you created earlier to confirm the integration end to end. For the full lifecycle from initialization through flag evaluation and tracking, see [SDK execution flow](../feature-experimentation/get-started/sdk-execution-flow).

## Next steps

* [SDK setup and feature flag tutorial](../feature-experimentation/get-started/sdk-setup-and-feature-flag-tutorial): a deeper walkthrough of activating a feature flag, using the Node.js SDK as a reference implementation.
* [Supported platforms](../feature-experimentation/get-started/overview#supported-platforms): the full compatibility matrix of SDK versions and features by language.
* [Cross-platform SDKs](../feature-experimentation/get-started/cross-platform-sdks): pass the same visitor code between web, mobile, and server-side SDKs so a visitor gets a consistent experience everywhere.
