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

# Create Application

> Create your first OPENFORMAT App to starting rewarding your users with XP, Tokens and Badges.

<Steps>
  <Step title="Installation">
    <CodeGroup>
      ```bash npm theme={null}
      npm install @openformat/sdk ethers@^5
      ```

      ```bash yarn theme={null}
      yarn add @openformat/sdk ethers@^5
      ```

      ```bash pnpm theme={null}
      pnpm add @openformat/sdk ethers@^5
      ```

      ```bash bun theme={null}
      bun add @openformat/sdk ethers@^5
      ```
    </CodeGroup>
  </Step>

  <Step title="Create a web3 account (Optional)">
    If you're new to web3, you'll need an [account](https://ethereum.org/en/developers/docs/accounts/) to use our SDK. You can easily create one with this simple script:

    <CodeGroup>
      ```tsx Typescript theme={null}
      import { ethers } from "ethers";

      function createWallet() {
        const wallet = ethers.Wallet.createRandom();
        console.log(`Wallet Address: ${wallet.address}`);
        console.log(`Private Key: ${wallet.privateKey}`);
      }

      createWallet();
      ```
    </CodeGroup>
  </Step>

  <Step title="Create an App">
    <Accordion title="Requires gas" icon="gas-pump">
      The functions in this code snippet require [gas](https://ethereum.org/en/developers/docs/gas/).

      If you need support relating to gas, reach out to us on [Discord](https://discord.gg/Aays8HBkZ2).
    </Accordion>

    <CodeGroup>
      ```tsx Typescript theme={null}
      import { Chains, OpenFormatSDK } from "@openformat/sdk";

      const sdk = new OpenFormatSDK({
        network: Chains.arbitrumSepolia,
        signer: process.env.PRIVATE_KEY, // Your wallet's private key
      });

      // Create App
      const app = await sdk.factory.createApp({
        name: "APP_NAME",
      });

      // Create XP Token
      const xp = await sdk.App.createToken({
        name: "XP",
        symbol: "XP",
        supply: 0,
      });

      console.log("APP_ID", app.id);
      console.log("XP_ADDRESS", xp.address());
      ```
    </CodeGroup>
  </Step>

  <Step title="Instantiate SDK with your App">
    <CodeGroup>
      ```tsx Typescript theme={null}
      import { OpenFormatSDK, Chains } from "@openformat/sdk";

      const sdk = new OpenFormatSDK({
        network: Chains.arbitrumSepolia,
        signer: process.env.PRIVATE_KEY, // Your wallet's private key
        appId: "INSERT_APP_ID",
      });
      ```
    </CodeGroup>
  </Step>
</Steps>

Now that you have generated an `APP_ID` and an `XP_ADDRESS`, you can either continue with our [SDK](/sdks/) or use our [API](/api-reference/) to start rewarding your users.
