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

# Setting Up Your Development Environment

This guide walks you through setting up your development environment for working
with Move modules on Initia. You'll learn how to install the necessary tools,
create accounts, and prepare for Move development on either Initia L1 or Move
rollups.

## Prerequisites

Before getting started, ensure you have:

* A terminal or command prompt
* Internet connection for downloading tools and accessing faucets
* Basic familiarity with command-line interfaces

<Info>
  This tutorial supports both Initia L1 and Move rollups development. The steps
  are similar, but we'll highlight the differences where they occur.
</Info>

## Development Tools Overview

You have two main options for interacting with Initia networks:

<AccordionGroup>
  <Accordion title="Command Line Interfaces (CLIs)" icon="terminal">
    CLIs provide direct access to network functionality through terminal commands. Select based on your target network:

    * **initiad**: For Initia L1 development
    * **minitiad**: For Move rollup development
  </Accordion>

  <Accordion title="InitiaJS SDK" icon="code">
    A TypeScript/JavaScript SDK that provides programmatic access to Initia networks. Ideal for:

    * Web application integration
    * Automated workflows
    * TypeScript/JavaScript developers
  </Accordion>
</AccordionGroup>

<Steps>
  <Step title="Install Your Development Tools">
    Select and install the tools that match your development approach and target network.

    ### CLI Tools

    <CardGroup cols={2}>
      <Card title="initiad CLI" icon="gear" href="/developers/developer-guides/tools/clis/initiad-cli/introduction">
        Command-line interface for Initia L1 development and interaction.
      </Card>

      <Card title="minitiad CLI" icon="cube" href="/developers/developer-guides/tools/clis/minitiad-cli/introduction">
        Command-line interface for Move rollup development and interaction.
      </Card>
    </CardGroup>

    ### SDK Option

    <Card title="InitiaJS SDK" icon="js" href="/developers/developer-guides/tools/sdks/initia-js/introduction">
      TypeScript/JavaScript SDK for programmatic blockchain interaction.
    </Card>

    <Tip>
      You can install multiple tools if you plan to work across different networks or prefer having both CLI and SDK options available.
    </Tip>
  </Step>

  <Step title="Create a Development Account">
    After installing your chosen tools, create an account that you'll use for deploying and testing your Move modules.

    <Tabs>
      <Tab title="Initia L1">
        ```bash theme={null}
        initiad keys add example
        ```
      </Tab>

      <Tab title="Move Rollups">
        ```bash theme={null}
        minitiad keys add example
        ```
      </Tab>

      <Tab title="InitiaJS SDK">
        Generate a new account with a fresh mnemonic:

        ```ts theme={null}
        import { MnemonicKey } from '@initia/initia.js'

        // Generate a new account with a random mnemonic
        const key = new MnemonicKey()

        console.log('mnemonic:', key.mnemonic)
        console.log('private key:', key.privateKey)
        console.log('public key:', key.publicKey)
        console.log('account address:', key.accAddress)
        ```

        Or import an existing account from a mnemonic:

        ```ts theme={null}
        import { MnemonicKey } from '@initia/initia.js'

        // Import existing account from environment variable
        const key = new MnemonicKey({
          mnemonic: process.env.MNEMONIC,
        })

        console.log('account address:', key.accAddress)
        ```
      </Tab>
    </Tabs>

    ### Expected Output

    Your account creation will generate output similar to this:

    <Tabs>
      <Tab title="CLI Output">
        ```bash theme={null}
        - address: init1ejr270mhdw260hk4ggp4kwmxd20authfag282m
          name: example
          pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AzBfkuS1ojSqNfqztk34Pn86n7D5MbhKobmsUIN372QG"}'
          type: local

        **Important** write this mnemonic phrase in a safe place. It is the only way to
        recover your account if you ever forget your password.

        [mnemonic from environment variable]

        ```
      </Tab>

      <Tab title="InitiaJS Output">
        **For new account generation:**

        ```bash theme={null}
        mnemonic: sunset major dog cat window spider victory ocean crystal repair guard volcano front husband duck prepare pioneer today shift patrol desert friend power master
        private key: <Buffer a3 f4 c2 9e 7b 5f d8 91 3c 2a 8b 47 9e c1 d5 6b 8f 92 3a 7c 4e 1b 9f 8c 73 2d 9a b5 6e 1f 4c>
        public key: Z { key: 'A2Bf8uK9RMehfDmBM3AwqZ4Y21r2H+hUMjS6++CSP' }
        account address: init1d7s3q7nmlzqz9v4tk6ntrvfmavu2vk656gr29j
        ```

        **For importing existing account:**

        ```bash theme={null}
        account address: init17mq4sqemx2djc59tda76y20nwp4pfn4943x9ze
        ```
      </Tab>
    </Tabs>

    <Warning>
      **Secure Your Mnemonic Phrase**

      Your mnemonic phrase is the only way to recover your account. Store it securely
      and never share it publicly. Consider using a password manager or writing it
      down and storing it in a safe place.
    </Warning>
  </Step>

  <Step title="Fund Your Development Account">
    To deploy and test Move modules, your account needs tokens to pay for transaction fees.

    ### Testnet Funding

    For testnet development, use the official Initia faucet to get free tokens:

    <Card title="Initia Testnet Faucet" icon="droplet" href="https://v1.app.testnet.initia.xyz/faucet">
      Get free testnet tokens for development and testing purposes.
    </Card>

    ### Funding Process

    1. Visit the [Initia faucet](https://v1.app.testnet.initia.xyz/faucet)
    2. Enter your account address (from the previous step)
    3. Request tokens for your target network
    4. Wait for the transaction to be processed

    <Info>
      Faucet tokens are only for testnet use and have no monetary value. They're
      designed specifically for development and testing purposes.
    </Info>

    ### Verify Your Balance

    After funding, verify your account has received tokens:

    <CodeGroup>
      <CodeBlock filename="Initia L1" language="bash">
        initiad query bank balances \[your-address]
      </CodeBlock>

      <CodeBlock filename="Move Rollups" language="bash">
        minitiad query bank balances \[your-address]
      </CodeBlock>
    </CodeGroup>
  </Step>
</Steps>

## Next Steps

With your development environment set up, you're ready to start building with
Move! The next section will guide you through creating, compiling, deploying,
and interacting with your first Move module.

<CardGroup cols={2}>
  <Card title="Network Configuration" icon="network-wired">
    Learn how to configure your CLI for different networks and environments.
  </Card>

  <Card title="Move Module Basics" icon="cubes">
    Understand the fundamentals of Move module structure and development.
  </Card>
</CardGroup>
