← Builder
Builder guide

TON Connect Wallet Onboarding Guide

TON Connect is the standard wallet connection protocol for apps built on The Open Network. If you are shipping a TON dapp or a Telegram Mini App, onboarding is not only about opening a wallet modal. You need a connection flow that identifies the app correctly, works across compatible TON wallets, handles signing in TON’s transaction format, and gives users clear feedback when the environment or payload is wrong.

This guide is for builders evaluating TON Connect as the wallet onboarding layer for production apps. It covers what needs to be in place before launch, how the connection flow works in practice, and which TON-specific edge cases usually create friction.

Section

Why TON wallet onboarding needs its own playbook

Wallet onboarding on TON looks familiar at a distance, but a few implementation details change how the first-run experience should be designed.

TON Connect sits between your app and wallets such as Tonkeeper, MyTonWallet, Telegram Wallet, and OpenMask. Your app does not hold user keys. Instead, it requests connection and signing through the TON Connect bridge, then uses the returned wallet state and signed payloads to continue the workflow.

That sounds straightforward until the first production issues show up:

  • the app manifest is not served correctly over HTTPS
  • the wallet can connect, but the next useful action is unclear
  • transaction payloads are built like generic JSON instead of TON BoC data
  • Telegram runtime behavior differs from a normal browser tab
  • the app treats transaction submission as final success even when cross-shard effects land later

A good TON Connect onboarding flow accounts for those details before the first user ever taps Connect Wallet.

Section

What builders usually need from TON Connect

TON Connect is most relevant when you need:

  • TON dapp wallet authentication
  • transaction signing on TON
  • jetton and NFT transfer flows
  • in-Telegram payments
  • wallet onboarding for Telegram Mini Apps

For most teams, the real evaluation question is not whether TON Connect is the recognized standard. It is whether the app can turn that standard into a low-friction onboarding path that works across wallets and environments.

Section

The connection flow to implement first

1. Publish the manifest before wiring the UI

TON Connect depends on a public tonconnect-manifest.json served over HTTPS. The required environment variable is NEXT_PUBLIC_TONCONNECT_MANIFEST_URL, and it is used by TonConnectUIProvider to identify the app.

This step is easy to underestimate. It is also one of the fastest ways to break onboarding.

Why it matters:

  • wallets use the manifest to identify your application
  • wallets can reject non-HTTPS, localhost-only, or self-signed setups
  • misconfigured CORS can make the connect experience fail silently

If the manifest is unstable, the rest of the onboarding flow is unstable too.

2. Initialize wallet state from a single provider layer

The integration flow works best when the React app is wrapped in a single provider layer built around TonConnectUIProvider.

<TonConnectUIProvider manifestUrl={NEXT_PUBLIC_TONCONNECT_MANIFEST_URL}>

That provider choice is more than setup boilerplate. It determines whether wallet state is centralized and predictable or spread across disconnected components.

A clean onboarding implementation usually starts with one provider layer, then reads connection state through hooks such as useTonAddress(), useTonWallet(), and useTonConnectUI().

3. Treat wallet connect as the start of a task

Users connect more readily when the app explains what they are about to unlock. In practice, wallet onboarding performs better when the prompt is attached to a concrete next action such as:

  • continue with TON wallet sign-in
  • approve a payment inside Telegram
  • mint, claim, transfer, or swap
  • verify balance before interacting with a contract

A connect button without context tends to create hesitation. A connect action tied to a clear task tends to move users forward.

4. Show useful connected-state feedback immediately

Once a wallet connects, the UI should make the new state obvious right away.

Useful post-connect behavior usually includes:

  • showing the active address and wallet identity
  • revealing the next useful action immediately
  • making disconnect and reconnect easy to find
  • avoiding unnecessary reconnect prompts between routine actions

The first successful connection should reduce uncertainty. It should not create another blank waiting state.

5. Build transaction requests in TON format, not a generic wallet pattern

The recommended transaction shape is:

{
  validUntil,
  messages: [{ address, amount, payload }]
}

Key implementation details matter here:

  • amount is in nanoTON
  • payload is a base64 BoC
  • the wallet returns a BoC of the signed external message

If your onboarding flow leads directly into a payment, transfer, or contract interaction, the app should explain what the signature is for and what the user should expect after approval.

Section

Where TON differs from a typical EVM wallet flow

Every account is a smart contract

TON does not follow the usual EVM expectation of externally owned accounts. Sending to an uninitialized address may require state_init, or a wallet contract may be deployed lazily on the first outgoing transaction.

That changes how builders think about ready addresses. If your product assumes every visible address is already fully initialized and contract-ready, onboarding problems can appear as soon as users try to receive or interact.

Cross-shard effects are asynchronous

TON finality is fast, but cross-shard settlement is not always immediate from the user’s perspective. Builders should poll by message hash rather than relying only on sender transaction state.

For onboarding, that means a signed transaction is not the end of the UX. You still need status messaging that explains whether the app is waiting for a downstream result.

Payloads use BoC serialization

TON payloads are not loose text or generic JSON blobs. They are packed into cells and slices with helpers such as beginCell() from @ton/core.

If the app treats payload creation like a generic web3 form-post problem, wallet connection may appear to work while the real contract interaction still fails.

Telegram changes the environment

TON Connect is especially relevant for Telegram Mini Apps, but Telegram introduces its own runtime constraints. Embedded wallet detection, iframe behavior, and CSP rules all need to be tested in the real environment rather than assumed from a normal browser tab.

Section

A practical TON Connect wallet onboarding checklist

Connection setup

  • 01the manifest is publicly accessible over HTTPS
  • 01NEXT_PUBLIC_TONCONNECT_MANIFEST_URL points to the correct manifest
  • 01the app is wrapped in TonConnectUIProvider
  • 01connect, disconnect, and reconnect states are all visible in the UI

Wallet state and user guidance

  • 01the first connect prompt explains why the wallet is needed
  • 01supported TON wallet options are obvious
  • 01the connected state unlocks a clear next step
  • 01retry and failure paths are understandable without guesswork

Transaction readiness

  • 01transaction requests follow TON Connect structure
  • 01amounts are converted to nanoTON correctly
  • 01payloads are encoded as base64 BoC when required
  • 01the signature request is tied to a clear user action

Chain and environment checks

  • 01chain reads point to the intended TON API endpoint
  • 01Toncenter rate-limit assumptions are understood if you rely on it
  • 01Telegram Mini App behavior is tested separately from browser behavior
  • 01post-sign status polling reflects asynchronous TON settlement behavior
Section

Common TON Connect onboarding mistakes

Treating connect as a cosmetic UI element

The wallet button is not the onboarding flow. Users still need context, supported-wallet clarity, and an obvious next action after connection.

Waiting too long to test the real manifest URL

A local prototype may appear correct while the real production flow fails because the manifest is not served correctly over HTTPS or the wallet cannot fetch it cleanly.

Building TON payloads like EVM-style calldata

TON transaction payloads depend on BoC serialization. If payload handling is improvised, connection success can hide deeper execution failures.

Assuming Telegram behaves like a normal browser tab

Telegram Mini Apps should be treated as a separate runtime. Wallet detection, embedded behavior, and connect UX all need in-app testing.

Using sender transaction submission as the only success state

On TON, the destination effect may land later than the wallet close event suggests. Good onboarding includes status feedback after signing, not only before it.

Section

How to choose the right onboarding pattern

Wallet sign-in first

Use this when the app primarily needs identity, session continuity, or wallet-aware personalization before the user makes a transaction.

Transaction-first onboarding

Use this when users are connecting because they need to approve a payment, transfer, mint, or other action immediately.

Telegram Mini App onboarding

Use this when the app lives inside Telegram and the wallet flow should feel embedded rather than redirect-heavy.

Multi-step product onboarding

Use this when wallet connect is only the first stage in a longer flow that may include balance reads, contract interaction, guided actions, or post-sign status tracking.

These journeys all use TON Connect, but they do not need the same first screen, messaging, or success states.

Section

What to verify before moving from prototype to production

  • the manifest is reachable from the exact environment users will access
  • the wallet picker works across the wallet mix your users actually use
  • a failed or canceled wallet action returns the user to a recoverable state
  • transaction payload construction is validated against the contract workflow you support
  • post-sign feedback is accurate for cross-shard or delayed destination effects
  • Telegram-specific behavior is tested inside the real Mini App runtime

These checks do not add polish around the edges. They usually determine whether onboarding feels dependable or fragile.

Section

How web3.new helps builders evaluate TON Connect faster

web3.new is designed for teams that move from protocol discovery into implementation planning. Instead of starting from scattered notes, builders can review protocol-specific setup details and then move into a prompt-ready workflow for broader app construction.

For TON Connect, the registry already surfaces the pieces most teams need early:

  • install commands for @tonconnect/ui-react, @tonconnect/sdk, @ton/ton, and @ton/core
  • required environment variables including the public manifest URL and TON API endpoint
  • provider and hook guidance for wallet state
  • transaction-signing structure for TON messages
  • implementation gotchas around account model, BoC payloads, HTTPS manifests, Telegram embedding, and asynchronous settlement

If you want the protocol-level reference first, start with the TON Connect registry page. If you are ready to shape a broader implementation prompt around your app, continue into the builder.

Section

FAQ

What is TON Connect?

TON Connect is the standard wallet connection protocol for TON apps. It links a dapp to compatible wallets and lets the app request transaction signing without controlling the user’s private keys.

Which wallets matter for TON Connect onboarding?

Common options include Tonkeeper, MyTonWallet, Telegram Wallet, and OpenMask. A strong onboarding flow makes the supported choices obvious instead of forcing users to guess.

What environment variables matter first?

The main ones are NEXT_PUBLIC_TONCONNECT_MANIFEST_URL for the public manifest and TON_API_ENDPOINT for chain reads. TONCENTER_API_KEY can also matter if the app needs higher rate limits for state queries.

Why does the manifest URL matter so much?

Wallets use the manifest to identify the app. If it is not served correctly over HTTPS, the connection flow can fail even when the rest of the UI appears ready.

What should happen right after a wallet connects?

The app should immediately show the connected wallet state and lead the user into the next useful action, such as sign-in confirmation, a balance-aware workflow, or a transaction approval step.

Is TON Connect only for browser dapps?

No. TON Connect is relevant for both TON dapps and Telegram Mini Apps, which means onboarding should be designed for the real runtime where users will connect.

Next step

Start with the protocol reference, then turn it into a working builder flow

Strong TON Connect onboarding comes from getting a few fundamentals right early: the manifest, the provider, the wallet state model, TON-native transaction formatting, and the environment-specific edge cases that show up inside real apps.