> ## Documentation Index
> Fetch the complete documentation index at: https://companyname-a7d5b98e-v2-pagination.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# TON Connect integration QA guide

export const Aside = ({type = "note", title = "", icon = "", iconType = "regular", children}) => {
  const asideVariants = ["note", "tip", "caution", "danger"];
  const asideComponents = {
    note: {
      outerStyle: "border-sky-500/20 bg-sky-50/50 dark:border-sky-500/30 dark:bg-sky-500/10",
      innerStyle: "text-sky-900 dark:text-sky-200",
      calloutType: "note",
      icon: <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="w-4 h-4 text-sky-500" aria-label="Note">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 10.14 10.14 12.7 7 12.7C5.48908 12.6974 4.0408 12.096 2.97241 11.0276C1.90403 9.9592 1.30264 8.51092 1.3 7C1.3 3.86 3.86 1.3 7 1.3ZM7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7C14 3.14 10.86 0 7 0ZM8 3H6V8H8V3ZM8 9H6V11H8V9Z"></path>
        </svg>
    },
    tip: {
      outerStyle: "border-emerald-500/20 bg-emerald-50/50 dark:border-emerald-500/30 dark:bg-emerald-500/10",
      innerStyle: "text-emerald-900 dark:text-emerald-200",
      calloutType: "tip",
      icon: <svg width="11" height="14" viewBox="0 0 11 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="text-emerald-600 dark:text-emerald-400/80 w-3.5 h-auto" aria-label="Tip">
          <path d="M3.12794 12.4232C3.12794 12.5954 3.1776 12.7634 3.27244 12.907L3.74114 13.6095C3.88471 13.8248 4.21067 14 4.46964 14H6.15606C6.41415 14 6.74017 13.825 6.88373 13.6095L7.3508 12.9073C7.43114 12.7859 7.49705 12.569 7.49705 12.4232L7.50055 11.3513H3.12521L3.12794 12.4232ZM5.31288 0C2.52414 0.00875889 0.5 2.26889 0.5 4.78826C0.5 6.00188 0.949566 7.10829 1.69119 7.95492C2.14321 8.47011 2.84901 9.54727 3.11919 10.4557C3.12005 10.4625 3.12175 10.4698 3.12261 10.4771H7.50342C7.50427 10.4698 7.50598 10.463 7.50684 10.4557C7.77688 9.54727 8.48281 8.47011 8.93484 7.95492C9.67728 7.13181 10.1258 6.02703 10.1258 4.78826C10.1258 2.15486 7.9709 0.000106649 5.31288 0ZM7.94902 7.11267C7.52078 7.60079 6.99082 8.37878 6.6077 9.18794H4.02051C3.63739 8.37878 3.10743 7.60079 2.67947 7.11294C2.11997 6.47551 1.8126 5.63599 1.8126 4.78826C1.8126 3.09829 3.12794 1.31944 5.28827 1.3126C7.2435 1.3126 8.81315 2.88226 8.81315 4.78826C8.81315 5.63599 8.50688 6.47551 7.94902 7.11267ZM4.87534 2.18767C3.66939 2.18767 2.68767 3.16939 2.68767 4.37534C2.68767 4.61719 2.88336 4.81288 3.12521 4.81288C3.36705 4.81288 3.56274 4.61599 3.56274 4.37534C3.56274 3.6515 4.1515 3.06274 4.87534 3.06274C5.11719 3.06274 5.31288 2.86727 5.31288 2.62548C5.31288 2.38369 5.11599 2.18767 4.87534 2.18767Z"></path>
        </svg>
    },
    caution: {
      outerStyle: "border-amber-500/20 bg-amber-50/50 dark:border-amber-500/30 dark:bg-amber-500/10",
      innerStyle: "text-amber-900 dark:text-amber-200",
      calloutType: "warning",
      icon: <svg className="flex-none w-5 h-5 text-amber-400 dark:text-amber-300/80" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-label="Warning">
          <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
        </svg>
    },
    danger: {
      outerStyle: "border-red-500/20 bg-red-50/50 dark:border-red-500/30 dark:bg-red-500/10",
      innerStyle: "text-red-900 dark:text-red-200",
      calloutType: "danger",
      icon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor" className="text-red-600 dark:text-red-400/80 w-4 h-4" aria-label="Danger">
          <path d="M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zm41.6-48c-4.3 7.4-4.3 16.6 0 24l88.3 152.9c4.3 7.4 12.2 12 20.8 12l176.6 0c8.6 0 16.5-4.6 20.8-12L453.4 268c4.3-7.4 4.3-16.6 0-24L365.1 91.1c-4.3-7.4-12.2-12-20.8-12l-176.6 0c-8.6 0-16.5 4.6-20.8 12L58.6 244zM256 128c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path>
        </svg>
    }
  };
  let variant = type;
  let gotInvalidVariant = false;
  if (!asideVariants.includes(type)) {
    gotInvalidVariant = true;
    variant = "danger";
  }
  const iconVariants = ["regular", "solid", "light", "thin", "sharp-solid", "duotone", "brands"];
  if (!iconVariants.includes(iconType)) {
    iconType = "regular";
  }
  return <>
      <div className={`callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border ${asideComponents[variant].outerStyle}`} data-callout-type={asideComponents[variant].calloutType}>
        <div className="mt-0.5 w-4" data-component-part="callout-icon">
          {}
          {icon === "" ? asideComponents[variant].icon : <Icon icon={icon} iconType={iconType} size={14} />}
        </div>
        <div className={`text-sm prose min-w-0 w-full ${asideComponents[variant].innerStyle}`} data-component-part="callout-content">
          {gotInvalidVariant ? <p>
              <span className="font-bold">
                Invalid <code>type</code> passed!
              </span>
              <br />
              <span className="font-bold">Received: </span>
              {type}
              <br />
              <span className="font-bold">Expected one of: </span>
              {asideVariants.join(", ")}
            </p> : <>
              {title && <p className="font-bold">{title}</p>}
              {children}
            </>}
        </div>
      </div>
    </>;
};

This document provides a complete **manual** guide for custodians integrating TON Connect: from understanding what to build to verifying your implementation works correctly.

<Aside type="note">
  Prefer to use the [WalletKit](/ecosystem/walletkit/overview) instead, unless the case requires custom integration and implementation.
</Aside>

<Columns cols={2}>
  <Card title="Understanding user experience standards" href="#understanding-user-experience-standards">
    Learn what good integration looks like
  </Card>

  <Card title="Demo environment and testing platform" href="#demo-environment-and-testing-platform">
    using TON Foundation's testing infrastructure
  </Card>

  <Card title="Testing your implementation" href="#testing-your-implementation">
    verify your basic integration works
  </Card>

  <Card title="Go-live procedure" href="#go-live-procedure">
    what's needed for production integrations
  </Card>

  <Card title="Support" href="#support">
    get help
  </Card>

  <Card title="FAQ" href="#faq">
    frequently asked questions
  </Card>
</Columns>

## Understanding user experience standards

Before building your integration, experience TON Connect as a user to understand what good integration looks like and what your users will expect.

### Try these wallets first

Use [Tonkeeper](https://tonkeeper.com/) or [MyTonWallet](https://mytonwallet.io/) to experience TON Connect. Both support mobile, desktop, and browser extensions.

[Wallet in Telegram](https://t.me/wallet) demonstrates the UX for wallets implemented as Telegram Mini Apps.

### Basic flow experience

Open the [React Demo dApp](https://tonconnect-sdk-demo-dapp.vercel.app/) and connect one of these wallets. Notice how the connection works — desktop to mobile uses QR codes, mobile browser to wallet clicks directly, browser extensions connect instantly, and in-wallet browsers connect with one click.

After connecting, try sending a basic transaction and test signing features like "Sign Text".

Pay attention to how transaction details are displayed, how approval works, and how errors are handled. This is the standard your users will expect from your wallet.

## Demo environment and testing platform

TON Foundation provides demo dApps and a comprehensive testing platform with all necessary test scenarios. You don't need to create your own test cases — everything is already prepared.

### Demo dApps

We have a [dApp for TON Connect testing](https://tonconnect-sdk-demo-dapp.vercel.app/), which is used in most test cases. In our testing platform, it is called **GENERAL**.

Additionally, there are several demo dApps used for testing specific scenarios. In our testing platform, it is called **CUSTOM**. Keep in mind that each test case has a Description field indicating which dApp to use: **GENERAL** or **CUSTOM**.

### Testing platform

Our testing platform, Allure TestOps, contains manual test scenarios you execute yourself. Navigate to test suites matching your wallet's platforms and run each test case manually.

Observe all test scenarios [via this link](https://tontech.testops.cloud/project/1/test-cases?treeId=2) with these credentials:

* Login: `guest`
* Password: `Test123!`

| #  | Test suite                         | Coverage                                                  |
| :- | :--------------------------------- | :-------------------------------------------------------- |
| 1  | Common Checks                      | PR formatting, manifest validation, platform installation |
| 2  | Connection and Transaction Sending | Core functionality across platforms and dApps             |
| 3  | Disconnection Testing              | Session termination scenarios                             |
| 4  | Transaction Data Validation        | Wallet-side security checks                               |
| 5  | Max Messages                       | Batch transaction handling                                |
| 6  | App Domain Validation              | Security testing for TON Proof wallets                    |
| 7  | Extra Currency Support             | Advanced currency features                                |
| 8  | Merkle Proof/Update                | Advanced cryptographic operations                         |
| 9  | Sign data                          | Custom payload signing                                    |

Each test case shows:

* **Description:** Which dApp to use **GENERAL** or **CUSTOM** along with its URL.
* **Preconditions:** What setup is needed before starting.
* **Scenario:** Manual actions to perform.
* **Expected results:** What should happen if your integration works correctly.

For transaction tests, use the provided JSON configurations in the demo dApp's editable transaction interface. Execute all test cases in sequence and fix any issues found in your integration.

## Testing your implementation

After building your integration, verify that it works with a basic connection test.

### Basic connection test

1. Open the [React Demo dApp](https://tonconnect-sdk-demo-dapp.vercel.app/)
2. Click "Connect Wallet" to see the connection modal
3. Choose connection method:
   * Scan universal QR code: Use your mobile wallet to scan the QR code (works with any TON Connect wallet)
   * Find your wallet in the testing wallets list and click it for direct connection
4. Complete the connection based on your wallet type (extension, mobile app, or web wallet)
5. Try sending a simple transaction to confirm full functionality

If this works, your basic integration is successful, and you can start using our testing platform suites. If your wallet doesn't appear in the list or the connection fails, revisit the technical implementation guides.

## Go-live procedure

### Wallet submission

Submit a pull request to the [wallet-list repository](https://github.com/ton-connect/wallets-list) with your wallet manifest, which was tested with the testing platform.

### Audit process

Once your team has opened a pull request to add the wallet to the official [wallets-list repository on GitHub](https://github.com/ton-connect/wallets-list), please advise your BizDev liaison so an audit slot can be scheduled. A typical review cycle lasts **three to five business days**. During this period, TON Foundation engineers verify the TON Connect integration, assessing connection flows, transaction signing, security controls, error handling, and overall user experience across every supported platform.

At the end of each iteration, you will receive a written report that summarizes the test results. After you supply an updated build and a brief changelog, the engineering team performs a re-test under the same three-to-five-day service level.

### Release

When the audit is approved, the pull request moves to the maintainers’ queue for a final repository review. This check — focused on completeness of metadata and technical compliance — normally takes **one business day**. Once the pull request is merged, your wallet becomes discoverable to TON ecosystem dApps. Please keep the manifest endpoint continuously available and update the repository entry whenever you release significant changes to the wallet.

## Support

TON Foundation’s engineering team is available throughout the entire integration lifecycle – from design review to pre-production validation – to surface issues early and help you reach production smoothly.

When you request support, please include the following information so we can diagnose and resolve issues quickly:

* **Wallet platform and version:** e.g., macOS 15.3.2, Chrome 137.0.7151.69, wallet version 1.2.3
* **Issue summary:** Brief description of the problem or the attached URL to the corresponding Allure scenario, if available, along with any questions related to it.
* **Reproduction steps:** Clear, step-by-step instructions (or sample requests/transactions) that consistently trigger the issue.

Providing this information up front enables faster triage, targeted guidance, and efficient re-testing once fixes are applied.

## FAQ

### How long does the process take?

With collaborative development and continuous testing support, we expect 1-2 weeks for wallet listing. (General self-submitted wallets typically take 4-8 weeks.)

### What platforms should we support?

Any platforms that fit your business needs — mobile, desktop, browser extensions, or web.

### Is TON Proof required?

Yes — TON Proof is a required feature for wallet integration.

### What if we fail test scenarios?

Work with TON Foundation during the audit to determine if issues are critical or acceptable.

### Can we update during the audit?

Yes, notify the audit team of significant changes.
