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

# Quickstart

> Install the dApp SDK and build a working wallet connection in a few minutes.

This is the shortest working integration: install the SDK, initialize it, let the user
connect a wallet, read their party, and submit a transaction. It uses only the high-level
SDK. You do not need the Provider API to build a dApp.

<Steps>
  <Step title="Install the SDK">
    <Tabs>
      <Tab title="npm">
        ```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
        npm install @canton-network/dapp-sdk
        ```
      </Tab>

      <Tab title="yarn">
        ```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
        yarn add @canton-network/dapp-sdk
        ```
      </Tab>

      <Tab title="pnpm">
        ```shell theme={"theme":{"light":"github-light","dark":"github-dark"}}
        pnpm add @canton-network/dapp-sdk
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="Initialize on app load">
    Call `init()` once, early in your app's lifecycle. This registers the default wallet
    adapters and silently restores a previous session **without** opening the wallet picker.

    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    import * as sdk from '@canton-network/dapp-sdk'

    await sdk.init()
    ```
  </Step>

  <Step title="Connect a wallet">
    Call `connect()` in response to a user action (for example, a "Connect wallet" button).
    This opens the wallet picker and runs the authentication flow.

    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    async function onConnectClick() {
        const result = await sdk.connect()
        console.log('Connected:', result.isConnected)
    }
    ```
  </Step>

  <Step title="Read the connected party">
    Once connected, read the account the user marked as primary.

    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    const account = await sdk.getPrimaryAccount()
    console.log('Primary party:', account.partyId)
    ```
  </Step>

  <Step title="Submit a transaction">
    Use `prepareExecute()` to submit Daml commands. The SDK prepares the transaction, asks
    the user to approve and sign it in their wallet, and submits it to the ledger.

    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    const account = await sdk.getPrimaryAccount()

    await sdk.prepareExecute({
        commands: [
            {
                CreateCommand: {
                    templateId: '#AdminWorkflows:Canton.Internal.Ping:Ping',
                    createArguments: {
                        id: `ping-${Date.now()}`,
                        initiator: account.partyId,
                        responder: account.partyId,
                    },
                },
            },
        ],
    })
    ```

    <Note>
      This example uses the built-in `Ping` template to prove the round-trip works. For a real
      dApp, submit commands from your own Daml package. See
      [Parties & transactions](/sdks-tools/sdks/dapp-sdk/guides/parties-and-transactions) for details.
    </Note>
  </Step>

  <Step title="Handle disconnect">
    Let the user end their session.

    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    async function onDisconnectClick() {
        await sdk.disconnect()
    }
    ```
  </Step>
</Steps>

## Next steps

* [Connect & Sessions](/sdks-tools/sdks/dapp-sdk/guides/connect-and-sessions) — Connect, restore sessions, check status, and disconnect.
* [Parties & Transactions](/sdks-tools/sdks/dapp-sdk/guides/parties-and-transactions) — Work with parties, sign messages, execute transactions, and query the ledger.
* [Wallet Discovery](/sdks-tools/sdks/dapp-sdk/guides/wallet-discovery) — Customize the wallet picker and add WalletConnect or custom remote wallets.
