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

# Quickstart

> Link the Arcane SDK and call arcane_init at launch.

Link the SDK, pass your portal public key, call `arcane_init` at launch. That is the full default integration for ownership.

## Prerequisites

* [Rust](https://rustup.rs/) (edition 2021), or a native engine that can load the C ABI
* A **public key** for your title from the Arcane portal
* The Arcane desktop app has run online at least once for that title (so local ticket / JWKS cache exists when DRM is on)

## Get started

<Steps>
  <Step title="Link the SDK">
    Rust:

    ```toml Cargo.toml theme={null}
    [dependencies]
    arcane-sdk = { path = "../arcane-sdk" }
    ```

    Engines (Unity / Unreal / C++): build the shared library and load the [C ABI](/sdk/sdk/reference/c-abi).

    ```bash theme={null}
    cargo build --release
    ```
  </Step>

  <Step title="Call init at launch">
    Pass the public key from the portal. Init checks ownership by default. If `drm_enabled` is `false` in the local cache, init returns success and skips the ticket check — nothing else to configure in your game.

    ```rust theme={null}
    use arcane_sdk::{arcane_init, OwnershipStatus, SdkError};

    // Public key generated in the Arcane portal for this title
    const PUBLIC_KEY: &str = "pk_...";

    fn boot() -> Result<(), SdkError> {
        match arcane_init(PUBLIC_KEY)? {
            OwnershipStatus::Owned | OwnershipStatus::DrmDisabled => Ok(()),
        }
    }
    ```

    ```c theme={null}
    char err[256];
    int rc = arcane_sdk_init("pk_...", err, sizeof(err));
    if (rc != 0) {
      // err contains "code: message"
    }
    ```
  </Step>
</Steps>

<Check>
  You are done for the default launch path. No extra ownership API call is required.
</Check>

<Note>
  Need to force a ticket check yourself (bypass init’s DRM short-circuit)? Use `check_ownership_offline` — see [Ownership model](/sdk/sdk/concepts/ownership). Most games never need this.
</Note>

<Tip>
  If init fails with `ticket_missing`, launch the Arcane desktop app online once for this title so the platform can cache a ticket.
</Tip>

## Next steps

* [Ownership model](/sdk/sdk/concepts/ownership) — what init does under the hood
* [Errors](/sdk/sdk/concepts/errors) — codes from Rust and the C ABI
* [Rust API](/sdk/sdk/reference/rust-api) — full surface
