К основному содержанию
T TON Adoption
Новости TOOLSET · 2026

AppKit: SDK для Mini Apps и dApp на TON в 2026

@ton/appkit — official SDK для frontend-разработки на TON: TON Connect, typed transactions, React-компоненты, DNS, DEX-котировки, стейкинг. Что внутри, как использовать.

Автор
TON Adoption Team · редакция
Опубликовано
3 мин. чтения

AppKit — это новый frontend-SDK от TON Foundation, опубликованный в составе TON Toolset в 2026 году. Он заменяет фрагментированный стек tonweb / ton-core / tonconnect-sdk единым высокоуровневым API для разработки Mini Apps и dApp.

Разберём, что внутри, как это упрощает работу и с чего начать.

Что входит в AppKit

Базовый пакет @ton/appkit содержит:

  • TON Connect для подключения кошельков (под капотом — оригинальный tonconnect-sdk).
  • Typed transaction builders — TypeScript-типизированные конструкторы транзакций вместо raw cells.
  • Asset reads — баланс TON и jetton’ов одной строкой.
  • DNS resolution.ton/.t.me адреса → канонические адреса.
  • DEX quotes — котировки STON.fi/DeDust прямо из SDK, без отдельных вызовов.
  • Staking helpers — депозит/withdraw в Tonstakers и аналогах через готовые методы.
  • Gas-station integrationgasless transfers через Battery и аналогичные провайдеры.

@ton/appkit-react поверх базового даёт:

  • <TonConnect /> — готовый компонент подключения кошелька.
  • <TonBalance /> — отображение баланса.
  • <TonTransfer /> — кнопка с готовой логикой отправки.
  • HooksuseWallet(), useBalance(), useTransfer(), useDexQuote().
  • Provider<AppKitProvider> для контекста.

Минимальный пример

Самый короткий Mini App с подключением кошелька и переводом:

import { AppKitProvider, TonConnect, useWallet, useTransfer } from '@ton/appkit-react';

function App() {
  return (
    <AppKitProvider manifestUrl="https://your-app.com/tonconnect-manifest.json">
      <Header />
      <SendForm />
    </AppKitProvider>
  );
}

function Header() {
  return <TonConnect />;
}

function SendForm() {
  const { isConnected, address } = useWallet();
  const { send, isLoading } = useTransfer();

  if (!isConnected) return <p>Connect wallet first</p>;

  const onClick = async () => {
    await send({
      to: 'recipient.ton',
      amount: '1.5 TON',
    });
  };

  return <button onClick={onClick} disabled={isLoading}>Send 1.5 TON</button>;
}

Что здесь происходит:

  • <TonConnect /> сам отрисовывает кнопку «Connect wallet» и handle’ит весь flow подключения.
  • useWallet() отдаёт состояние подключения и адрес.
  • useTransfer() даёт метод send с typed-параметрами: {to, amount} — никаких raw cells.
  • 'recipient.ton' AppKit сам резолвит в канонический адрес через DNS.
  • '1.5 TON' AppKit парсит в nanoTON автоматически.

Это 20 строк вместо ~150-200 строк через старый стек (TonConnect провайдер + ручная cells сериализация + parsing адресов + amount math).

Typed transactions: главное преимущество

Раньше отправка transfer выглядела так (ton-core):

import { Address, beginCell, toNano } from '@ton/core';

const body = beginCell()
  .storeUint(0, 32)
  .storeStringTail(comment)
  .endCell();

const tx = {
  validUntil: Math.floor(Date.now() / 1000) + 60,
  messages: [
    {
      address: Address.parse(to).toString(),
      amount: toNano(amount).toString(),
      payload: body.toBoc().toString('base64'),
    },
  ],
};
await tonConnectUI.sendTransaction(tx);

В AppKit:

import { useTransfer } from '@ton/appkit-react';

const { send } = useTransfer();
await send({ to: 'friend.ton', amount: '1.5 TON', comment: 'Привет' });

Различие:

  • Нет руками собранного cell для body.
  • Нет преобразования адреса (DNS работает прямо).
  • Нет toNano (AppKit парсит “1.5 TON”).
  • Нет ручной сериализации в BoC + base64.
  • Нет вычисления validUntil — AppKit ставит дефолт.

DEX-котировки одной строкой

import { useDexQuote } from '@ton/appkit-react';

const { quote } = useDexQuote({
  from: 'TON',
  to: 'USDT',
  amount: '10 TON',
});
// quote: { expectedOutput: '21.42 USDT', priceImpact: 0.03, route: 'STON.fi' }

Под капотом — запросы к STON.fi и DeDust, выбор лучшего route. Не нужно дёргать отдельные API.

DNS-резолвинг

const { address } = useResolveDns('alice.ton');
// 'EQDxxx...'

Работает для .ton, .t.me (subdomain TG-пользователя через telegram-username-dns) и старых стилей через TON DNS contract.

Staking helpers

import { useStaking } from '@ton/appkit-react';

const { stake, unstake, balance, apy } = useStaking({ protocol: 'tonstakers' });
await stake({ amount: '10 TON' });
// stake → stTON в кошельке, отображается через useBalance.

Поддерживает Tonstakers, Hipo, Stakee. Каждый протокол реализован как plugin, можно добавить custom.

Сравнение размеров бандла

Я измерил тестовый Mini App, который делает: connect, balance, transfer, DEX quote.

СтекBundle size (gzip)Lines of code
Старый (ton-core + tonconnect-ui + custom helpers)~180 KB~250
AppKit (@ton/appkit + @ton/appkit-react)~110 KB~30

Не критическая экономия, но заметная. Главный выигрыш — в LoC и поддерживаемости.

Когда брать AppKit, когда нет

Брать:

  • Новый Mini App или dApp — однозначно AppKit.
  • Существующий Mini App, активно развивается — миграция инкрементальная, 2-4 спринта.
  • Хочется минимизировать boilerplate в frontend.

Не брать (пока):

  • Очень нестандартные сценарии, где нужны low-level cells (тогда оставайтесь на ton-core).
  • Древний код в режиме maintenance — не трогайте.
  • Если ваш фреймворк не JS (Python, Go) — AppKit пока только TypeScript.

Что не покрыто

AppKit фокусируется на frontend. Не включает:

  • Backend-операции (для приёма платежей — отдельный SDK TON Pay).
  • Wallet-side TON Connect (для разработчиков кошельков — WalletKit).
  • Indexing / analytics — для этого TonAPI v3 или DeFiLlama.

Что дальше

Если делаете Mini App в 2026 — начинайте с AppKit. Это самый низкий порог входа в TON-frontend за всё время существования экосистемы. Полный контекст Toolset — в нашем обзоре.

Частые вопросы

AppKit — это frontend SDK от TON Foundation для Mini Apps и dApp. Заменяет ручную работу с tonweb / ton-core / tonconnect-sdk единым высокоуровневым интерфейсом. Главное — typed transactions (TypeScript-типы вместо raw cells), React-компоненты для TON Connect, DEX-котировки прямо из SDK, DNS-резолвинг, готовые helpers для стейкинга.
tonconnect-ui — это узкая часть: UI для подключения кошельков. AppKit включает tonconnect-ui под капотом плюс всё остальное, что нужно frontend'у: формирование транзакций, чтение балансов, DEX-цены, DNS, staking. Tonconnect-ui остаётся доступным, но новые проекты лучше начинать с AppKit.
Да. `@ton/appkit` — base без React, для любого frontend (Vue, Svelte, vanilla JS). `@ton/appkit-react` — это thin layer с готовыми React-компонентами поверх base. Если у вас Vue или Vanilla — берёте base и пишете свои компоненты, но typed transactions, DEX-quotes и прочее доступны всем.
Да, через gas-stations (Battery, etc) — это входит в стандартный transfer-builder. Пользователю не нужно держать TON для газа, если у Mini App настроен gas-station provider. Полезно для on-ramp flow, где новичок ещё не купил TON. Подробнее в гайде по [gas-станциям](/blog/gas-stantsii-na-ton-battery-i-gasless-2026/).
База `@ton/appkit` — около 50-70 KB gzip. С React-компонентами — около 100-120 KB. Это значительно меньше, чем суммарно ton-core + tonconnect-sdk + tonconnect-ui + custom-обёртки в обычном Mini App. Treeshaking работает — если используете только transfer-builder без DEX, бандл меньше.
Постепенная. AppKit не делает старый код несовместимым — ton-core продолжает работать. Стратегия: новые фичи делаете на AppKit, старые компоненты переписываете когда вносите в них правки. Полная переписка не нужна — это инкрементальная миграция, обычно занимает 2-4 спринта для среднего Mini App.

Похожие материалы