diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
new file mode 100644
index 000000000..2c98c1dd2
--- /dev/null
+++ b/.github/workflows/deploy-docs.yml
@@ -0,0 +1,116 @@
+name: Deploy Docs
+
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ - ready_for_review
+ branches:
+ - main
+ paths:
+ - ".github/workflows/deploy-docs.yml"
+ - "next/**"
+ push:
+ branches:
+ - main
+ paths:
+ - ".github/workflows/deploy-docs.yml"
+ - "next/**"
+ workflow_dispatch:
+
+concurrency:
+ group: deploy-docs-${{ github.ref }}
+ cancel-in-progress: false
+
+permissions: { }
+
+jobs:
+ build:
+ name: Build docs
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: read
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ persist-credentials: false
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "22"
+
+ - name: Restore npm cache
+ id: npm-cache
+ uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
+ with:
+ path: &build-docs-npm-cache-paths |
+ ~/.npm
+ ${{ github.workspace }}/next/.next/cache
+ key: ${{ runner.os }}-${{ runner.arch }}-npm-docs-${{ hashFiles('next/package-lock.json') }}-${{ hashFiles('next/**.[jt]s', 'next/**.[jt]sx') }}
+ restore-keys: |
+ ${{ runner.os }}-${{ runner.arch }}-npm-docs-${{ hashFiles('next/package-lock.json') }}-
+
+ - name: Install docs dependencies
+ working-directory: next
+ run: npm ci
+
+ - name: Generated source
+ working-directory: next
+ run: npm run generated-source
+
+# - name: Check docs formatting
+# working-directory: next
+# run: npm run fmt:check
+#
+# - name: Lint Check docs
+# working-directory: next
+# run: npm run lint
+
+ - name: Build docs
+ working-directory: next
+ env:
+ NEXT_TELEMETRY_DISABLED: '1'
+ run: npm run build
+
+ - name: Generate redirect files
+ working-directory: next
+ run: npm run generate-redirects
+
+ - name: Save npm cache
+ if: github.ref == 'refs/heads/main' && steps.npm-cache.outputs.cache-hit != 'true'
+ uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
+ with:
+ path: *build-docs-npm-cache-paths
+ key: ${{ steps.npm-cache.outputs.cache-primary-key }}
+
+ - name: Upload GitHub Pages artifact
+ if: github.ref == 'refs/heads/main' && github.repository == 'the-ton-tech/ton-docs-private'
+ uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
+ with:
+ path: next/out
+
+ deploy:
+ name: Deploy docs
+ if: github.ref == 'refs/heads/main' && github.repository == 'the-ton-tech/ton-docs-private'
+ needs: [ build ]
+ runs-on: ubuntu-latest
+
+ permissions:
+ pages: write # to deploy to Pages
+ id-token: write # to verify the deployment originates from an appropriate source
+
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
diff --git a/.github/workflows/next-build.yml b/.github/workflows/next-build.yml
new file mode 100644
index 000000000..30c0099bb
--- /dev/null
+++ b/.github/workflows/next-build.yml
@@ -0,0 +1,80 @@
+name: Next.js build & lint
+
+on:
+ pull_request:
+ branches: ["**"]
+ paths:
+ - "next/**"
+ - ".github/workflows/next-build.yml"
+ push:
+ branches: ["main", "master"]
+ paths:
+ - "next/**"
+ - ".github/workflows/next-build.yml"
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ name: Build Next.js docs
+ runs-on: ubuntu-latest
+ env:
+ NEXT_TELEMETRY_DISABLED: "1"
+ HUSKY: "0"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ persist-credentials: false
+
+ - name: Setup Node.js 22
+ uses: actions/setup-node@v4
+ with:
+ node-version: "22"
+ cache: "npm"
+ cache-dependency-path: next/package-lock.json
+
+ - name: Install dependencies
+ working-directory: next
+ run: npm ci
+
+ - name: Generate Fumadocs source
+ working-directory: next
+ run: npm run generated-source
+
+ - name: Prettier check
+ working-directory: next
+ run: npm run fmt:check
+ continue-on-error: true
+
+ - name: ESLint
+ working-directory: next
+ run: npm run lint
+ continue-on-error: true
+
+ - name: Validate navigation
+ working-directory: next
+ run: npm run lint:navigation
+
+ - name: Validate internal links
+ working-directory: next
+ run: npm run lint:links:internal
+
+ - name: Validate links
+ working-directory: next
+ run: npm run lint:links:validate
+
+ - name: Validate SEO continuity (redirects, chains, sitemap, canonical)
+ working-directory: next
+ run: npm run lint:seo
+
+ - name: Next build
+ working-directory: next
+ run: npm run build
diff --git a/.gitignore b/.gitignore
index b04e0f746..f1c745ce6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,9 @@
.emacs.d/
.zed/
+# Claude Code session state (worktrees, caches)
+.claude/
+
# Node.js
node_modules/
@@ -24,3 +27,7 @@ __pycache__
# Generated folders
/stats/
+
+dist
+export.zip
+next/pnpm-lock.yaml
diff --git a/.mintignore b/.mintignore
new file mode 100644
index 000000000..af6bc0cf5
--- /dev/null
+++ b/.mintignore
@@ -0,0 +1 @@
+next/
diff --git a/contract-dev/introduction.mdx b/contract-dev/introduction.mdx
new file mode 100644
index 000000000..cf8204941
--- /dev/null
+++ b/contract-dev/introduction.mdx
@@ -0,0 +1,14 @@
+---
+title: "Introduction to smart contract development"
+sidebarTitle: "Introduction"
+---
+
+To start developing smart contracts on TON, use our Rust toolkit, [Acton](https://ton-blockchain.github.io/acton/docs/welcome).
+
+The recommended smart contract language is [Tolk](https://docs.ton.org/tolk/overview).
+
+In the sections below, you can also learn about the following:
+
+- IDEs and editor plugins: [VS Code](/contract-dev/ide/vscode) and [JetBrains IDEs](/contract-dev/ide/jetbrains)
+- Techniques: [signing messages](/contract-dev/techniques/signing), [contract sharding](/contract-dev/techniques/contract-sharding), and more
+- [Blueprint](/contract-dev/blueprint/overview) (for legacy developers)
diff --git a/docs.json b/docs.json
index 613dd31ce..ec6e5d157 100644
--- a/docs.json
+++ b/docs.json
@@ -66,22 +66,17 @@
}
},
"navigation": {
- "pages": [
- "start-here",
- "get-support",
- "from-ethereum",
- "more-tutorials",
- "old",
+ "tabs": [
{
- "group": "Ecosystem",
+ "tab": "TON overview",
"pages": [
{
- "group": "AI",
- "expanded": true,
+ "group": "Introduction",
"pages": [
- "ecosystem/ai/overview",
- "ecosystem/ai/mcp",
- "ecosystem/ai/wallets"
+ "start-here",
+ "toolset",
+ "ecosystem/subsecond",
+ "get-support"
]
},
{
@@ -95,13 +90,198 @@
]
},
{
- "group": "Explorers",
+ "group": "Infrastructure",
+ "pages": [
+ {
+ "group": "Explorers",
+ "pages": [
+ "ecosystem/explorers/overview",
+ "ecosystem/explorers/tonviewer"
+ ]
+ },
+ "ecosystem/analytics",
+ {
+ "group": "Oracles",
+ "pages": [
+ "ecosystem/oracles/overview",
+ "ecosystem/oracles/redstone",
+ "ecosystem/oracles/pyth"
+ ]
+ },
+ "ecosystem/bridges",
+ "ecosystem/status"
+ ]
+ },
+ {
+ "group": "AI in TON",
+ "pages": [
+ "ecosystem/ai/overview",
+ "ecosystem/ai/mcp",
+ "ecosystem/ai/wallets"
+ ]
+ },
+ {
+ "group": "Learn more",
+ "pages": [
+ "foundations/glossary",
+ "from-ethereum",
+ "more-tutorials",
+ "old"
+ ]
+ },
+ {
+ "group": "Contribute",
+ "pages": [
+ "contribute/style-guide",
+ {
+ "group": "Components and snippets",
+ "pages": [
+ "contribute/snippets/overview",
+ "contribute/snippets/aside",
+ "contribute/snippets/image",
+ "contribute/snippets/filetree"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "AppKit",
+ "icon": "box",
+ "pages": [
+ "ecosystem/appkit/overview",
+ "ecosystem/appkit/changelog",
+ {
+ "group": "Get Started",
+ "icon": "rocket",
+ "expanded": true,
+ "pages": [
+ "ecosystem/appkit/get-started",
+ {
+ "group": "Installation",
+ "pages": [
+ "ecosystem/appkit/get-started/installation",
+ "ecosystem/appkit/get-started/installation/react-app",
+ "ecosystem/appkit/get-started/installation/vanilla-js"
+ ]
+ },
+ "ecosystem/appkit/get-started/connectors",
+ "ecosystem/appkit/get-started/networks",
+ "ecosystem/appkit/get-started/basic-getter-hooks",
+ "ecosystem/appkit/get-started/sending-transactions",
+ "ecosystem/appkit/get-started/streaming",
+ "ecosystem/appkit/get-started/providers",
+ "ecosystem/appkit/get-started/using-ui-widgets"
+ ]
+ },
+ {
+ "group": "How to",
+ "pages": [
+ "ecosystem/appkit/howto",
+ "ecosystem/appkit/howto/appkit",
+ "ecosystem/appkit/howto/connect-to-a-wallet",
+ "ecosystem/appkit/howto/providers",
+ "ecosystem/appkit/howto/networks",
+ "ecosystem/appkit/howto/read-balances",
+ "ecosystem/appkit/howto/send-toncoin",
+ "ecosystem/appkit/howto/send-jettons",
+ "ecosystem/appkit/howto/nfts",
+ "ecosystem/appkit/howto/sign-data",
+ "ecosystem/appkit/howto/streaming",
+ "ecosystem/appkit/howto/swaps",
+ "ecosystem/appkit/howto/staking",
+ "ecosystem/appkit/howto/onramp",
+ "ecosystem/appkit/howto/gasless",
+ "ecosystem/appkit/howto/use-ui-widgets"
+ ]
+ },
+ {
+ "group": "Reference",
+ "icon": "book",
"pages": [
- "ecosystem/explorers/overview",
- "ecosystem/explorers/tonviewer"
+ "ecosystem/appkit/reference",
+ "ecosystem/appkit/reference/appkit",
+ "ecosystem/appkit/reference/appkit-react"
+ ]
+ },
+ "ecosystem/appkit/faq-troubleshooting"
+ ]
+ },
+ {
+ "tab": "Tools",
+ "pages": [
+ {
+ "group": "WalletKit",
+ "pages": [
+ "ecosystem/walletkit/overview",
+ {
+ "group": "Web",
+ "pages": [
+ "ecosystem/walletkit/web/init",
+ "ecosystem/walletkit/web/wallets",
+ "ecosystem/walletkit/web/connections",
+ "ecosystem/walletkit/web/events",
+ "ecosystem/walletkit/web/toncoin",
+ "ecosystem/walletkit/web/jettons",
+ "ecosystem/walletkit/web/nfts"
+ ]
+ },
+ {
+ "group": "iOS",
+ "pages": [
+ "ecosystem/walletkit/ios/installation",
+ "ecosystem/walletkit/ios/init",
+ "ecosystem/walletkit/ios/wallets",
+ "ecosystem/walletkit/ios/data",
+ "ecosystem/walletkit/ios/transactions",
+ "ecosystem/walletkit/ios/events",
+ "ecosystem/walletkit/ios/webview"
+ ]
+ },
+ {
+ "group": "Android",
+ "pages": [
+ "ecosystem/walletkit/android/installation",
+ "ecosystem/walletkit/android/init",
+ "ecosystem/walletkit/android/wallets",
+ "ecosystem/walletkit/android/data",
+ "ecosystem/walletkit/android/events",
+ "ecosystem/walletkit/android/transactions",
+ "ecosystem/walletkit/android/webview"
+ ]
+ },
+ "ecosystem/walletkit/qa-guide",
+ "ecosystem/walletkit/native-web",
+ "ecosystem/walletkit/browser-extension"
+ ]
+ },
+ {
+ "group": "TON Pay",
+ "pages": [
+ "ecosystem/ton-pay/overview",
+ "ecosystem/ton-pay/quick-start",
+ "ecosystem/ton-pay/on-ramp",
+ {
+ "group": "Payment integration",
+ "pages": [
+ "ecosystem/ton-pay/payment-integration/transfer",
+ "ecosystem/ton-pay/payment-integration/payments-react",
+ "ecosystem/ton-pay/payment-integration/payments-tonconnect",
+ "ecosystem/ton-pay/payment-integration/status-info"
+ ]
+ },
+ {
+ "group": "UI integration",
+ "pages": [
+ "ecosystem/ton-pay/ui-integration/button-react",
+ "ecosystem/ton-pay/ui-integration/button-js"
+ ]
+ },
+ "ecosystem/ton-pay/webhooks",
+ "ecosystem/ton-pay/api-reference"
]
},
- "ecosystem/sdks",
{
"group": "APIs",
"pages": [
@@ -161,154 +341,374 @@
"ecosystem/api/price"
]
},
- "ecosystem/subsecond",
- "ecosystem/status",
- "ecosystem/analytics",
+ "ecosystem/sdks"
+ ]
+ },
+ {
+ "tab": "Blockchain basics",
+ "pages": [
+ "foundations/core-concepts",
{
- "group": "Oracles",
+ "group": "Payment processing",
"pages": [
- "ecosystem/oracles/overview",
- "ecosystem/oracles/redstone",
- "ecosystem/oracles/pyth"
+ "payments/overview",
+ "payments/toncoin",
+ "payments/jettons"
]
},
- "ecosystem/bridges",
{
"group": "TON Connect",
"pages": [
"ecosystem/ton-connect/overview",
- "ecosystem/ton-connect/wallet-connect",
- "ecosystem/ton-connect/dapp",
- "ecosystem/ton-connect/wallet",
- "ecosystem/ton-connect/manifest",
- "ecosystem/ton-connect/message-lookup"
+ "ecosystem/ton-connect/get-started",
+ {
+ "group": "How to",
+ "pages": [
+ "ecosystem/ton-connect/how-to/connect",
+ "ecosystem/ton-connect/how-to/disconnect",
+ "ecosystem/ton-connect/how-to/send-transaction",
+ "ecosystem/ton-connect/how-to/sign-data",
+ "ecosystem/ton-connect/how-to/sign-message-gasless",
+ "ecosystem/ton-connect/how-to/embedded-request",
+ "ecosystem/ton-connect/how-to/filter-wallets",
+ "ecosystem/ton-connect/how-to/walletconnect-support"
+ ]
+ },
+ "ecosystem/ton-connect/core-concepts",
+ {
+ "group": "API reference",
+ "pages": [
+ "ecosystem/ton-connect/api-reference/ui-react",
+ "ecosystem/ton-connect/api-reference/ui",
+ "ecosystem/ton-connect/api-reference/sdk",
+ "ecosystem/ton-connect/api-reference/protocol"
+ ]
+ },
+ "ecosystem/ton-connect/troubleshooting",
+ "ecosystem/ton-connect/faq"
]
},
{
- "group": "AppKit",
+ "group": "Standard contracts",
"pages": [
- "ecosystem/appkit/overview",
- "ecosystem/appkit/init",
- "ecosystem/appkit/toncoin",
- "ecosystem/appkit/jettons",
- "ecosystem/appkit/nfts",
- "ecosystem/appkit/swap",
- "ecosystem/appkit/stake"
- ]
- },
- {
- "group": "WalletKit",
- "pages": [
- "ecosystem/walletkit/overview",
+ "standard/overview",
{
- "group": "Web",
+ "group": "Wallets",
"pages": [
- "ecosystem/walletkit/web/init",
- "ecosystem/walletkit/web/wallets",
- "ecosystem/walletkit/web/connections",
- "ecosystem/walletkit/web/events",
- "ecosystem/walletkit/web/toncoin",
- "ecosystem/walletkit/web/jettons",
- "ecosystem/walletkit/web/nfts"
+ "standard/wallets/how-it-works",
+ "standard/wallets/mnemonics",
+ "standard/wallets/comparison",
+ "standard/wallets/interact",
+ {
+ "group": "Wallet V5",
+ "tag": "latest",
+ "pages": [
+ "standard/wallets/v5",
+ "standard/wallets/v5-api"
+ ]
+ },
+ "standard/wallets/v4",
+ {
+ "group": "Highload wallets",
+ "pages": [
+ "standard/wallets/highload/overview",
+ {
+ "group": "Highload wallet v3",
+ "pages": [
+ "standard/wallets/highload/v3/create",
+ "standard/wallets/highload/v3/send-single-transfer",
+ "standard/wallets/highload/v3/send-batch-transfers",
+ "standard/wallets/highload/v3/verify-is-processed",
+ "standard/wallets/highload/v3/specification"
+ ]
+ },
+ {
+ "group": "Highload wallet v2",
+ "pages": [
+ "standard/wallets/highload/v2/specification"
+ ]
+ }
+ ]
+ },
+ "standard/wallets/lockup",
+ {
+ "group": "Preprocessed wallet",
+ "tag": "v2",
+ "pages": [
+ "standard/wallets/preprocessed-v2/interact",
+ "standard/wallets/preprocessed-v2/specification"
+ ]
+ },
+ "standard/wallets/restricted",
+ "standard/wallets/performance",
+ "standard/wallets/history"
]
},
{
- "group": "iOS",
+ "group": "Tokens",
"pages": [
- "ecosystem/walletkit/ios/installation",
- "ecosystem/walletkit/ios/init",
- "ecosystem/walletkit/ios/wallets",
- "ecosystem/walletkit/ios/data",
- "ecosystem/walletkit/ios/transactions",
- "ecosystem/walletkit/ios/events",
- "ecosystem/walletkit/ios/webview"
+ "standard/tokens/overview",
+ "standard/tokens/metadata",
+ {
+ "group": "Jettons",
+ "pages": [
+ "standard/tokens/jettons/overview",
+ "standard/tokens/jettons/how-it-works",
+ "standard/tokens/jettons/comparison",
+ "standard/tokens/jettons/mint",
+ "standard/tokens/jettons/transfer",
+ "standard/tokens/jettons/burn",
+ "standard/tokens/jettons/find",
+ "standard/tokens/jettons/wallet-data",
+ "standard/tokens/jettons/supply-data",
+ "standard/tokens/jettons/mintless/overview",
+ "standard/tokens/jettons/mintless/deploy",
+ "standard/tokens/jettons/api"
+ ]
+ },
+ {
+ "group": "NFTs",
+ "pages": [
+ "standard/tokens/nft/overview",
+ "standard/tokens/nft/how-it-works",
+ "standard/tokens/nft/sbt",
+ "standard/tokens/nft/comparison",
+ "standard/tokens/nft/deploy",
+ "standard/tokens/nft/transfer",
+ "standard/tokens/nft/metadata",
+ "standard/tokens/nft/verify",
+ "standard/tokens/nft/api",
+ "standard/tokens/nft/nft-reference"
+ ]
+ },
+ "standard/tokens/airdrop"
]
},
+ "standard/vesting"
+ ]
+ },
+ {
+ "group": "Smart contract development",
+ "pages": [
+ "contract-dev/introduction",
+ "contract-dev/acton",
{
- "group": "Android",
+ "group": "IDEs and editor plugins",
"pages": [
- "ecosystem/walletkit/android/installation",
- "ecosystem/walletkit/android/init",
- "ecosystem/walletkit/android/wallets",
- "ecosystem/walletkit/android/data",
- "ecosystem/walletkit/android/events",
- "ecosystem/walletkit/android/transactions",
- "ecosystem/walletkit/android/webview"
+ "contract-dev/ide/vscode",
+ "contract-dev/ide/jetbrains"
+ ]
+ },
+ {
+ "group": "Techniques",
+ "pages": [
+ "contract-dev/techniques/signing",
+ "contract-dev/techniques/contract-sharding",
+ "contract-dev/techniques/security",
+ "contract-dev/techniques/gas",
+ "contract-dev/techniques/on-chain-jetton-processing",
+ "contract-dev/techniques/using-on-chain-libraries",
+ "contract-dev/techniques/random",
+ "contract-dev/techniques/upgrades",
+ "contract-dev/techniques/vanity",
+ "contract-dev/techniques/zero-knowledge"
]
},
{
- "group": "Manual implementation",
+ "group": "Blueprint",
+ "tag": "legacy",
"pages": [
- "ecosystem/walletkit/qa-guide",
- "ecosystem/walletkit/native-web",
- "ecosystem/walletkit/browser-extension"
+ "contract-dev/blueprint/overview",
+ "contract-dev/blueprint/first-smart-contract",
+ "contract-dev/blueprint/develop",
+ {
+ "group": "Testing",
+ "pages": [
+ "contract-dev/testing/overview",
+ "contract-dev/testing/reference"
+ ]
+ },
+ "contract-dev/blueprint/debug",
+ "contract-dev/blueprint/deploy",
+ "contract-dev/blueprint/coverage",
+ "contract-dev/blueprint/benchmarks",
+ "contract-dev/blueprint/config",
+ "contract-dev/blueprint/cli",
+ "contract-dev/blueprint/api"
]
}
]
},
{
- "group": "TON Pay",
+ "group": "Tolk language",
+ "tag": "recommended",
"pages": [
- "ecosystem/ton-pay/overview",
- "ecosystem/ton-pay/quick-start",
- "ecosystem/ton-pay/on-ramp",
+ "tolk/overview",
+ "tolk/basic-syntax",
+ "tolk/idioms-conventions",
+ "tolk/examples",
{
- "group": "Payment integration",
+ "group": "Type system",
"pages": [
- "ecosystem/ton-pay/payment-integration/transfer",
- "ecosystem/ton-pay/payment-integration/payments-react",
- "ecosystem/ton-pay/payment-integration/payments-tonconnect",
- "ecosystem/ton-pay/payment-integration/status-info"
+ "tolk/types/list-of-types",
+ "tolk/types/numbers",
+ "tolk/types/booleans",
+ "tolk/types/address",
+ "tolk/types/cells",
+ "tolk/types/strings",
+ "tolk/types/structures",
+ "tolk/types/aliases",
+ "tolk/types/generics",
+ "tolk/types/enums",
+ "tolk/types/nullable",
+ "tolk/types/unions",
+ "tolk/types/tensors",
+ "tolk/types/tuples",
+ "tolk/types/maps",
+ "tolk/types/callables",
+ "tolk/types/unknown",
+ "tolk/types/void-never",
+ "tolk/types/type-checks-and-casts",
+ "tolk/types/overall-tvm-stack",
+ "tolk/types/overall-serialization"
]
},
{
- "group": "UI integration",
+ "group": "Syntax details",
"pages": [
- "ecosystem/ton-pay/ui-integration/button-react",
- "ecosystem/ton-pay/ui-integration/button-js"
+ "tolk/syntax/variables",
+ "tolk/syntax/conditions-loops",
+ "tolk/syntax/exceptions",
+ "tolk/syntax/functions-methods",
+ "tolk/syntax/structures-fields",
+ "tolk/syntax/pattern-matching",
+ "tolk/syntax/mutability",
+ "tolk/syntax/operators",
+ "tolk/syntax/imports"
]
},
- "ecosystem/ton-pay/webhooks",
- "ecosystem/ton-pay/api-reference"
+ {
+ "group": "Language features",
+ "pages": [
+ "tolk/features/message-handling",
+ "tolk/features/contract-storage",
+ "tolk/features/contract-getters",
+ "tolk/features/contract-abi",
+ "tolk/features/message-sending",
+ "tolk/features/auto-serialization",
+ "tolk/features/lazy-loading",
+ "tolk/features/jetton-payload",
+ "tolk/features/standard-library",
+ "tolk/features/asm-functions",
+ "tolk/features/compiler-optimizations"
+ ]
+ },
+ {
+ "group": "Migrating from FunC",
+ "pages": [
+ "tolk/from-func/tolk-vs-func",
+ "tolk/from-func/stdlib-comparison",
+ "tolk/from-func/converter"
+ ]
+ },
+ "tolk/changelog"
]
},
{
- "group": "TMA: Telegram Mini Apps",
+ "group": "Other languages",
"pages": [
- "ecosystem/tma/overview",
- "ecosystem/tma/create-mini-app",
{
- "group": "Telegram UI",
+ "group": "TL-B",
+ "pages": [
+ "languages/tl-b/overview",
+ "languages/tl-b/syntax-and-semantics",
+ "languages/tl-b/simple-examples",
+ "languages/tl-b/complex-and-non-trivial-examples",
+ "languages/tl-b/tep-examples",
+ "languages/tl-b/tooling"
+ ]
+ },
+ {
+ "group": "Fift",
"pages": [
- "ecosystem/tma/telegram-ui/overview",
- "ecosystem/tma/telegram-ui/getting-started",
- "ecosystem/tma/telegram-ui/platform-and-palette",
+ "languages/fift/overview",
+ "languages/fift/fift-and-tvm-assembly",
+ "languages/fift/deep-dive",
+ "languages/fift/multisig",
+ "languages/fift/whitepaper"
+ ]
+ },
+ {
+ "group": "FunC",
+ "pages": [
+ "languages/func/overview",
+ "languages/func/cookbook",
{
- "group": "Reference",
+ "group": "Language",
+ "expanded": true,
"pages": [
- "ecosystem/tma/telegram-ui/reference/avatar"
+ "languages/func/comments",
+ "languages/func/types",
+ "languages/func/literals",
+ "languages/func/operators",
+ "languages/func/expressions",
+ "languages/func/statements",
+ {
+ "group": "Program declarations",
+ "expanded": true,
+ "pages": [
+ "languages/func/declarations-overview",
+ "languages/func/functions",
+ "languages/func/special-functions",
+ "languages/func/asm-functions",
+ "languages/func/global-variables",
+ "languages/func/compiler-directives"
+ ]
+ },
+ "languages/func/built-ins",
+ "languages/func/dictionaries"
]
- }
+ },
+ {
+ "group": "Libraries",
+ "expanded": true,
+ "pages": [
+ "languages/func/stdlib",
+ "languages/func/libraries"
+ ]
+ },
+ "languages/func/changelog",
+ "languages/func/known-issues"
]
},
+ "languages/tact"
+ ]
+ },
+ {
+ "group": "TVM: TON Virtual Machine",
+ "pages": [
+ "tvm/overview",
{
- "group": "Analytics",
+ "group": "Tools",
"pages": [
- "ecosystem/tma/analytics/analytics",
- "ecosystem/tma/analytics/supported-events",
- "ecosystem/tma/analytics/preparation",
- "ecosystem/tma/analytics/install-via-script",
- "ecosystem/tma/analytics/install-via-npm",
- "ecosystem/tma/analytics/api-endpoints",
- "ecosystem/tma/analytics/managing-integration",
- "ecosystem/tma/analytics/faq"
+ "tvm/tools/txtracer",
+ "tvm/tools/retracer",
+ "tvm/tools/tvm-explorer",
+ "tvm/tools/ton-decompiler"
]
- }
+ },
+ "tvm/instructions",
+ "tvm/builders-and-slices",
+ "tvm/continuations",
+ "tvm/registers",
+ "tvm/gas",
+ "tvm/initialization",
+ "tvm/exit-codes",
+ "tvm/get-method"
]
},
{
- "group": "Blockchain nodes",
- "expanded": true,
+ "group": "Nodes",
"pages": [
"ecosystem/nodes/overview",
{
@@ -351,426 +751,98 @@
"ecosystem/nodes/rust/probes",
"ecosystem/nodes/rust/monitoring"
]
+ },
+ {
+ "group": "Staking",
+ "pages": [
+ "ecosystem/staking/overview",
+ "ecosystem/staking/stake-calculation",
+ "ecosystem/staking/liquid-staking",
+ "ecosystem/staking/single-nominator",
+ "ecosystem/staking/nominator-pools"
+ ]
}
]
},
{
- "group": "Staking",
- "pages": [
- "ecosystem/staking/overview",
- "ecosystem/staking/stake-calculation",
- "ecosystem/staking/liquid-staking",
- "ecosystem/staking/single-nominator",
- "ecosystem/staking/nominator-pools"
- ]
- }
- ]
- },
- {
- "group": "Payment processing",
- "pages": [
- "payments/overview",
- "payments/toncoin",
- "payments/jettons"
- ]
- },
- {
- "group": "Standard contracts",
- "pages": [
- {
- "group": "Wallets",
+ "group": "Primitives",
"pages": [
- "standard/wallets/how-it-works",
- "standard/wallets/mnemonics",
- "standard/wallets/comparison",
- "standard/wallets/interact",
{
- "group": "Wallet V5",
- "tag": "latest",
+ "group": "Serialization",
"pages": [
- "standard/wallets/v5",
- "standard/wallets/v5-api"
+ "foundations/serialization/cells",
+ "foundations/serialization/library",
+ "foundations/serialization/merkle",
+ "foundations/serialization/merkle-update",
+ "foundations/serialization/pruned",
+ "foundations/serialization/boc"
]
},
- "standard/wallets/v4",
{
- "group": "Highload wallets",
+ "group": "Addresses",
"pages": [
- "standard/wallets/highload/overview",
- {
- "group": "Highload wallet v3",
- "pages": [
- "standard/wallets/highload/v3/create",
- "standard/wallets/highload/v3/send-single-transfer",
- "standard/wallets/highload/v3/send-batch-transfers",
- "standard/wallets/highload/v3/verify-is-processed",
- "standard/wallets/highload/v3/specification"
- ]
- },
- {
- "group": "Highload wallet v2",
- "pages": [
- "standard/wallets/highload/v2/specification"
- ]
- }
+ "foundations/addresses/overview",
+ "foundations/addresses/formats",
+ "foundations/addresses/serialize",
+ "foundations/addresses/derive"
]
},
- "standard/wallets/lockup",
{
- "group": "Preprocessed wallet",
- "tag": "v2",
+ "group": "Messages & Transactions",
"pages": [
- "standard/wallets/preprocessed-v2/interact",
- "standard/wallets/preprocessed-v2/specification"
+ "foundations/messages/overview",
+ "foundations/messages/internal",
+ "foundations/messages/external-in",
+ "foundations/messages/external-out",
+ "foundations/messages/deploy",
+ "foundations/messages/modes",
+ "foundations/messages/ordinary-tx"
]
},
- "standard/wallets/restricted",
- "standard/wallets/performance",
- "standard/wallets/history"
- ]
- },
- {
- "group": "Tokens",
- "expanded": true,
- "pages": [
- "standard/tokens/overview",
- "standard/tokens/metadata",
{
- "group": "Jettons",
+ "group": "Actions",
"pages": [
- "standard/tokens/jettons/overview",
- "standard/tokens/jettons/how-it-works",
- "standard/tokens/jettons/comparison",
- "standard/tokens/jettons/mint",
- "standard/tokens/jettons/transfer",
- "standard/tokens/jettons/burn",
- "standard/tokens/jettons/find",
- "standard/tokens/jettons/wallet-data",
- "standard/tokens/jettons/supply-data",
- "standard/tokens/jettons/mintless/overview",
- "standard/tokens/jettons/mintless/deploy",
- "standard/tokens/jettons/api"
+ "foundations/actions/overview",
+ "foundations/actions/send",
+ "foundations/actions/reserve",
+ "foundations/actions/set-code",
+ "foundations/actions/change-library"
]
},
{
- "group": "NFT",
+ "group": "Consensus",
"pages": [
- "standard/tokens/nft/overview",
- "standard/tokens/nft/how-it-works",
- "standard/tokens/nft/sbt",
- "standard/tokens/nft/comparison",
- "standard/tokens/nft/deploy",
- "standard/tokens/nft/transfer",
- "standard/tokens/nft/metadata",
- "standard/tokens/nft/verify",
- "standard/tokens/nft/api",
- "standard/tokens/nft/nft-reference",
- "standard/tokens/nft/nft-2.0"
+ "foundations/consensus/catchain-visualizer"
]
},
- "standard/tokens/airdrop"
- ]
- },
- "standard/vesting"
- ]
- },
- {
- "group": "Contract development",
- "pages": [
- "contract-dev/acton",
- {
- "group": "IDEs and editor plugins",
- "pages": [
- "contract-dev/ide/vscode",
- "contract-dev/ide/jetbrains"
- ]
- },
- {
- "group": "Techniques",
- "expanded": true,
- "pages": [
- "contract-dev/techniques/signing",
- "contract-dev/techniques/contract-sharding",
- "contract-dev/techniques/security",
- "contract-dev/techniques/gas",
- "contract-dev/techniques/on-chain-jetton-processing",
- "contract-dev/techniques/using-on-chain-libraries",
- "contract-dev/techniques/random",
- "contract-dev/techniques/upgrades",
- "contract-dev/techniques/vanity",
- "contract-dev/techniques/zero-knowledge"
- ]
- },
- {
- "group": "Blueprint",
- "tag": "legacy",
- "pages": [
- "contract-dev/blueprint/overview",
- "contract-dev/blueprint/first-smart-contract",
- "contract-dev/blueprint/develop",
+ "foundations/status",
+ "foundations/phases",
+ "foundations/fees",
+ "foundations/traces",
+ "foundations/shards",
+ "foundations/limits",
+ "foundations/config",
{
- "group": "Testing",
+ "group": "Web3 services",
"pages": [
- "contract-dev/testing/overview",
- "contract-dev/testing/reference"
+ "foundations/web3/overview",
+ "foundations/web3/ton-dns",
+ "foundations/web3/ton-storage",
+ "foundations/web3/ton-proxy",
+ "foundations/web3/ton-sites"
]
},
- "contract-dev/blueprint/debug",
- "contract-dev/blueprint/deploy",
- "contract-dev/blueprint/coverage",
- "contract-dev/blueprint/benchmarks",
- "contract-dev/blueprint/config",
- "contract-dev/blueprint/cli",
- "contract-dev/blueprint/api"
- ]
- }
- ]
- },
- {
- "group": "Tolk language",
- "tag": "recommended",
- "pages": [
- "tolk/overview",
- "tolk/basic-syntax",
- "tolk/idioms-conventions",
- "tolk/examples",
- {
- "group": "Type system",
- "pages": [
- "tolk/types/list-of-types",
- "tolk/types/numbers",
- "tolk/types/booleans",
- "tolk/types/address",
- "tolk/types/cells",
- "tolk/types/strings",
- "tolk/types/structures",
- "tolk/types/aliases",
- "tolk/types/generics",
- "tolk/types/enums",
- "tolk/types/nullable",
- "tolk/types/unions",
- "tolk/types/tensors",
- "tolk/types/tuples",
- "tolk/types/maps",
- "tolk/types/callables",
- "tolk/types/unknown",
- "tolk/types/void-never",
- "tolk/types/type-checks-and-casts",
- "tolk/types/overall-tvm-stack",
- "tolk/types/overall-serialization"
- ]
- },
- {
- "group": "Syntax details",
- "pages": [
- "tolk/syntax/variables",
- "tolk/syntax/conditions-loops",
- "tolk/syntax/exceptions",
- "tolk/syntax/functions-methods",
- "tolk/syntax/structures-fields",
- "tolk/syntax/pattern-matching",
- "tolk/syntax/mutability",
- "tolk/syntax/operators",
- "tolk/syntax/imports"
- ]
- },
- {
- "group": "Language features",
- "pages": [
- "tolk/features/message-handling",
- "tolk/features/contract-storage",
- "tolk/features/contract-getters",
- "tolk/features/contract-abi",
- "tolk/features/message-sending",
- "tolk/features/auto-serialization",
- "tolk/features/lazy-loading",
- "tolk/features/jetton-payload",
- "tolk/features/standard-library",
- "tolk/features/asm-functions",
- "tolk/features/compiler-optimizations"
- ]
- },
- {
- "group": "Migrating from FunC",
- "pages": [
- "tolk/from-func/tolk-vs-func",
- "tolk/from-func/stdlib-comparison",
- "tolk/from-func/converter"
- ]
- },
- "tolk/changelog"
- ]
- },
- {
- "group": "Other languages",
- "pages": [
- {
- "group": "TL-B",
- "pages": [
- "languages/tl-b/overview",
- "languages/tl-b/syntax-and-semantics",
- "languages/tl-b/simple-examples",
- "languages/tl-b/complex-and-non-trivial-examples",
- "languages/tl-b/tep-examples",
- "languages/tl-b/tooling"
- ]
- },
- {
- "group": "Fift",
- "pages": [
- "languages/fift/overview",
- "languages/fift/fift-and-tvm-assembly",
- "languages/fift/deep-dive",
- "languages/fift/multisig",
- "languages/fift/whitepaper"
- ]
- },
- {
- "group": "FunC",
- "pages": [
- "languages/func/overview",
- "languages/func/cookbook",
{
- "group": "Language",
- "expanded": true,
+ "group": "Merkle proofs",
"pages": [
- "languages/func/comments",
- "languages/func/types",
- "languages/func/literals",
- "languages/func/operators",
- "languages/func/expressions",
- "languages/func/statements",
- {
- "group": "Program declarations",
- "expanded": true,
- "pages": [
- "languages/func/declarations-overview",
- "languages/func/functions",
- "languages/func/special-functions",
- "languages/func/asm-functions",
- "languages/func/global-variables",
- "languages/func/compiler-directives"
- ]
- },
- "languages/func/built-ins",
- "languages/func/dictionaries"
+ "foundations/proofs/overview",
+ "foundations/proofs/verifying-liteserver-proofs"
]
},
- {
- "group": "Libraries",
- "expanded": true,
- "pages": [
- "languages/func/stdlib",
- "languages/func/libraries"
- ]
- },
- "languages/func/changelog",
- "languages/func/known-issues"
- ]
- },
- "languages/tact"
- ]
- },
- {
- "group": "TVM: TON Virtual Machine",
- "pages": [
- "tvm/overview",
- {
- "group": "Tools",
- "pages": [
- "tvm/tools/txtracer",
- "tvm/tools/retracer",
- "tvm/tools/tvm-explorer",
- "tvm/tools/ton-decompiler"
- ]
- },
- "tvm/instructions",
- "tvm/builders-and-slices",
- "tvm/continuations",
- "tvm/registers",
- "tvm/gas",
- "tvm/initialization",
- "tvm/exit-codes",
- "tvm/get-method"
- ]
- },
- {
- "group": "Blockchain foundations",
- "pages": [
- {
- "group": "Serialization",
- "pages": [
- "foundations/serialization/cells",
- "foundations/serialization/library",
- "foundations/serialization/merkle",
- "foundations/serialization/merkle-update",
- "foundations/serialization/pruned",
- "foundations/serialization/boc"
- ]
- },
- {
- "group": "Addresses",
- "pages": [
- "foundations/addresses/overview",
- "foundations/addresses/formats",
- "foundations/addresses/serialize",
- "foundations/addresses/derive"
- ]
- },
- {
- "group": "Messages & Transactions",
- "pages": [
- "foundations/messages/overview",
- "foundations/messages/internal",
- "foundations/messages/external-in",
- "foundations/messages/external-out",
- "foundations/messages/deploy",
- "foundations/messages/modes",
- "foundations/messages/ordinary-tx"
+ "foundations/system",
+ "foundations/precompiled"
]
},
- {
- "group": "Actions",
- "pages": [
- "foundations/actions/overview",
- "foundations/actions/send",
- "foundations/actions/reserve",
- "foundations/actions/set-code",
- "foundations/actions/change-library"
- ]
- },
- {
- "group": "Consensus",
- "pages": [
- "foundations/consensus/catchain-visualizer"
- ]
- },
- "foundations/status",
- "foundations/phases",
- "foundations/fees",
- "foundations/traces",
- "foundations/shards",
- "foundations/limits",
- "foundations/config",
- {
- "group": "Web3 services",
- "pages": [
- "foundations/web3/overview",
- "foundations/web3/ton-dns",
- "foundations/web3/ton-storage",
- "foundations/web3/ton-proxy",
- "foundations/web3/ton-sites"
- ]
- },
- {
- "group": "Merkle proofs",
- "pages": [
- "foundations/proofs/overview",
- "foundations/proofs/verifying-liteserver-proofs"
- ]
- },
- "foundations/system",
- "foundations/precompiled",
{
"group": "Whitepapers",
"pages": [
@@ -780,24 +852,13 @@
"foundations/whitepapers/ton",
"foundations/whitepapers/catchain"
]
- },
- "foundations/glossary"
+ }
]
},
{
- "group": "Contribute",
- "pages": [
- "contribute/style-guide",
- {
- "group": "Components and snippets",
- "pages": [
- "contribute/snippets/overview",
- "contribute/snippets/aside",
- "contribute/snippets/image",
- "contribute/snippets/filetree"
- ]
- }
- ]
+ "tab": "Smart contracts",
+ "icon": "arrow-up-right",
+ "href": "https://ton-blockchain.github.io/acton/docs/welcome"
}
]
},
@@ -1291,11 +1352,6 @@
"destination": "/standard/tokens/nft/overview",
"permanent": true
},
- {
- "source": "/v3/documentation/dapps/assets/nft-2.0",
- "destination": "/standard/tokens/nft/nft-2.0",
- "permanent": true
- },
{
"source": "/v3/documentation/dapps/assets/usdt",
"destination": "https://old-docs.ton.org/v3/documentation/dapps/assets/usdt",
@@ -1988,57 +2044,57 @@
},
{
"source": "/guidelines/tma",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/overview",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/guidelines/tma-guidelines",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/guidelines/testing-apps",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/guidelines/publishing",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/guidelines/monetization",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/guidelines/tips-and-tricks",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/guidelines/tma-tutorials-and-examples",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/tutorials/step-by-step-guide",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/tutorials/app-examples",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/v3/guidelines/dapps/tma/tutorials/design-guidelines",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
@@ -2568,27 +2624,27 @@
},
{
"source": "/develop/dapps/telegram-apps/testing-apps",
- "destination": "/v3/guidelines/dapps/tma/guidelines/testing-apps",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/publishing",
- "destination": "/v3/guidelines/dapps/tma/guidelines/publishing",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/monetization",
- "destination": "/v3/guidelines/dapps/tma/guidelines/monetization",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/tips-and-tricks",
- "destination": "/v3/guidelines/dapps/tma/guidelines/tips-and-tricks",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/design-guidelines",
- "destination": "/v3/guidelines/dapps/tma/tutorials/design-guidelines",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
@@ -3158,17 +3214,17 @@
},
{
"source": "/develop/dapps/telegram-apps/README",
- "destination": "/v3/guidelines/dapps/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/app-examples",
- "destination": "/v3/guidelines/dapps/tma/tutorials/app-examples",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/develop/dapps/telegram-apps/step-by-step-guide",
- "destination": "/v3/guidelines/dapps/tma/tutorials/step-by-step-guide",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
@@ -3558,17 +3614,17 @@
},
{
"source": "/ecosystem/tma/mate/telegram-apps-mate",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/ecosystem/tma/mate/getting-started",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
"source": "/ecosystem/tma/mate/hosting",
- "destination": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview",
"permanent": true
},
{
@@ -3635,6 +3691,181 @@
"source": "/contract-dev/ide/overview",
"destination": "/contract-dev/ide/vscode",
"permanent": true
+ },
+ {
+ "source": "/ecosystem/tma/overview",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/create-mini-app",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/telegram-ui/overview",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/telegram-ui/getting-started",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/telegram-ui/platform-and-palette",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/telegram-ui/reference/avatar",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/analytics",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/supported-events",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/preparation",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/install-via-script",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/install-via-npm",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/api-endpoints",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/managing-integration",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/tma/analytics/faq",
+ "destination": "/ecosystem/appkit/overview"
+ },
+ {
+ "source": "/ecosystem/appkit/init",
+ "destination": "/ecosystem/appkit/get-started"
+ },
+ {
+ "source": "/ecosystem/appkit/toncoin",
+ "destination": "/ecosystem/appkit/howto/send-toncoin"
+ },
+ {
+ "source": "/ecosystem/appkit/jettons",
+ "destination": "/ecosystem/appkit/howto/send-jettons"
+ },
+ {
+ "source": "/ecosystem/appkit/nfts",
+ "destination": "/ecosystem/appkit/howto/nfts"
+ },
+ {
+ "source": "/ecosystem/appkit/swap",
+ "destination": "/ecosystem/appkit/howto/swaps"
+ },
+ {
+ "source": "/ecosystem/appkit/stake",
+ "destination": "/ecosystem/appkit/howto/staking"
+ },
+ {
+ "source": "/ecosystem/ton-connect/wallet-connect",
+ "destination": "/ecosystem/ton-connect/how-to/walletconnect-support"
+ },
+ {
+ "source": "/ecosystem/ton-connect/dapp",
+ "destination": "/ecosystem/ton-connect/overview"
+ },
+ {
+ "source": "/ecosystem/ton-connect/wallet",
+ "destination": "/ecosystem/ton-connect/overview"
+ },
+ {
+ "source": "/ecosystem/ton-connect/manifest",
+ "destination": "/ecosystem/ton-connect/overview"
+ },
+ {
+ "source": "/ecosystem/ton-connect/message-lookup",
+ "destination": "/ecosystem/ton-connect/overview"
+ },
+ {
+ "source": "/standard/wallets/gasless",
+ "destination": "/ecosystem/appkit/howto/gasless",
+ "permanent": true
+ },
+ {
+ "source": "/standard/tokens/nft/nft-2.0",
+ "destination": "/standard/tokens/nft/overview",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/overview",
+ "destination": "/languages/tl-b/overview",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/syntax-and-semantics",
+ "destination": "/languages/tl-b/syntax-and-semantics",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/simple-examples",
+ "destination": "/languages/tl-b/simple-examples",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/complex-and-non-trivial-examples",
+ "destination": "/languages/tl-b/complex-and-non-trivial-examples",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/tep-examples",
+ "destination": "/languages/tl-b/tep-examples",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/tlb/tooling",
+ "destination": "/languages/tl-b/tooling",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/consensus/catchain-overview",
+ "destination": "/foundations/whitepapers/catchain",
+ "permanent": true
+ },
+ {
+ "source": "/foundations/whitepapers/comments",
+ "destination": "/foundations/whitepapers/overview",
+ "permanent": true
+ },
+ {
+ "source": "/languages/fift/types",
+ "destination": "/languages/fift/overview",
+ "permanent": true
+ },
+ {
+ "source": "/languages/fift/basic-values",
+ "destination": "/languages/fift/overview",
+ "permanent": true
+ },
+ {
+ "source": "/languages/fift/variables",
+ "destination": "/languages/fift/overview",
+ "permanent": true
+ },
+ {
+ "source": "/languages/fift/control",
+ "destination": "/languages/fift/overview",
+ "permanent": true
+ },
+ {
+ "source": "/languages/fift/fift-assembler",
+ "destination": "/languages/fift/fift-and-tvm-assembly",
+ "permanent": true
}
]
}
diff --git a/ecosystem/api/toncenter/smc-index.json b/ecosystem/api/toncenter/smc-index.json
index 97fdbf38c..f4f971e03 100644
--- a/ecosystem/api/toncenter/smc-index.json
+++ b/ecosystem/api/toncenter/smc-index.json
@@ -62,7 +62,8 @@
"schema": {
"type": "string",
"description": "The nominator address.",
- "title": "Nominator"
+ "title": "Nominator",
+ "example": "UQDTKO3a_hF6r_i_9RcLe5euCgMsfCkrrmBfS_ZdfUgoNiei"
},
"description": "The nominator address."
},
@@ -80,7 +81,8 @@
}
],
"description": "The pool address in which nominator stakes coins. If not specified, returns nominator from all his pools.",
- "title": "Pool"
+ "title": "Pool",
+ "example": "Ef8OsrSEsBU_e9xPvgbNMjo700s1gqJSwvqnzM5tWv5CCGsX"
},
"description": "The pool address in which nominator stakes coins. If not specified, returns nominator from all his pools."
}
@@ -134,7 +136,8 @@
"schema": {
"type": "string",
"description": "The pool address. Can be sent in hex, base64 or base64url form.",
- "title": "Pool"
+ "title": "Pool",
+ "example": "Ef8OsrSEsBU_e9xPvgbNMjo700s1gqJSwvqnzM5tWv5CCGsX"
},
"description": "The pool address. Can be sent in hex, base64 or base64url form."
}
@@ -184,7 +187,8 @@
"schema": {
"type": "string",
"description": "The nominator address.",
- "title": "Nominator"
+ "title": "Nominator",
+ "example": "UQDTKO3a_hF6r_i_9RcLe5euCgMsfCkrrmBfS_ZdfUgoNiei"
},
"description": "The nominator address."
},
@@ -195,7 +199,8 @@
"schema": {
"type": "string",
"description": "Pool address to get bookings in.",
- "title": "Pool"
+ "title": "Pool",
+ "example": "Ef8OsrSEsBU_e9xPvgbNMjo700s1gqJSwvqnzM5tWv5CCGsX"
},
"description": "Pool address to get bookings in."
},
@@ -304,7 +309,8 @@
"schema": {
"type": "string",
"description": "The nominator address.",
- "title": "Nominator"
+ "title": "Nominator",
+ "example": "UQDTKO3a_hF6r_i_9RcLe5euCgMsfCkrrmBfS_ZdfUgoNiei"
},
"description": "The nominator address."
},
@@ -315,7 +321,8 @@
"schema": {
"type": "string",
"description": "Pool address to get earnings in.",
- "title": "Pool"
+ "title": "Pool",
+ "example": "Ef8OsrSEsBU_e9xPvgbNMjo700s1gqJSwvqnzM5tWv5CCGsX"
},
"description": "Pool address to get earnings in."
},
@@ -420,7 +427,8 @@
"schema": {
"type": "string",
"description": "Pool address to get bookings in.",
- "title": "Pool"
+ "title": "Pool",
+ "example": "Ef8OsrSEsBU_e9xPvgbNMjo700s1gqJSwvqnzM5tWv5CCGsX"
},
"description": "Pool address to get bookings in."
},
diff --git a/ecosystem/api/toncenter/v2.json b/ecosystem/api/toncenter/v2.json
index 231e6d24a..ee5636613 100644
--- a/ecosystem/api/toncenter/v2.json
+++ b/ecosystem/api/toncenter/v2.json
@@ -841,7 +841,15 @@
"operationId": "getMasterchainBlockSignatures_get",
"parameters": [
{
- "$ref": "#/components/parameters/seqno"
+ "name": "seqno",
+ "in": "query",
+ "description": "Masterchain block sequence number (block height). Used to query state at a specific point in time. If omitted, returns the current state.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "example": 68213743
}
],
"responses": {
@@ -1006,7 +1014,15 @@
"$ref": "#/components/parameters/shard"
},
{
- "$ref": "#/components/parameters/seqnoOptional"
+ "name": "seqno",
+ "in": "query",
+ "description": "Block sequence number to look up. Provide this, `lt`, or `unixtime` to identify the block. If omitted, returns the current block.",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "example": 73082262
},
{
"name": "lt",
@@ -1076,8 +1092,15 @@
"operationId": "getShards_get",
"parameters": [
{
- "$ref": "#/components/parameters/seqno",
- "description": "Seqno of masterchain block"
+ "name": "seqno",
+ "in": "query",
+ "description": "Seqno of masterchain block",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "example": 68213743
}
],
"responses": {
@@ -1234,6 +1257,11 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/RunGetMethodRequest"
+ },
+ "example": {
+ "address": "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs",
+ "method": "get_jetton_data",
+ "stack": []
}
}
},
@@ -1295,6 +1323,11 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/RunGetMethodStdRequest"
+ },
+ "example": {
+ "address": "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs",
+ "method": "get_jetton_data",
+ "stack": []
}
}
},
@@ -1472,6 +1505,11 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/EstimateFeeRequest"
+ },
+ "example": {
+ "address": "EQAPgRDXZBQAWp8KfetNFZOLHNjbIt8_Fg7VtIM3c1q7YtHM",
+ "body": "te6cckEBBAEAkQABoXNpZ25///8R/////wAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAECCg7DyG0CAgMAAABgQgAHwIhrsgoALU+FPvWmisnFjmxtkW+fiwdq2kGbua1dsQAAAAAAAAAAAAAAAAAASigcDQ==",
+ "ignore_chksig": true
}
}
},
@@ -1722,7 +1760,8 @@
"schema": {
"type": "integer",
"format": "int32"
- }
+ },
+ "example": 0
},
{
"name": "seqno",
@@ -1838,14 +1877,17 @@
{
"name": "libraries",
"in": "query",
- "description": "Hashes of libraries",
- "required": false,
+ "description": "Hashes of libraries to fetch. Provide one or more library cell hashes in hex format.",
+ "required": true,
"schema": {
"type": "array",
"items": {
- "type": "#/components/schemas/TonHash"
+ "$ref": "#/components/schemas/TonHash"
}
- }
+ },
+ "example": [
+ "8f452d7a4dfd74066b682365177259ed05734435be76b5fd4bd5d8af2b7c3d68"
+ ]
}
],
"responses": {
@@ -1898,6 +1940,12 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/JsonRpcRequest"
+ },
+ "example": {
+ "jsonrpc": "2.0",
+ "id": "1",
+ "method": "getMasterchainInfo",
+ "params": {}
}
}
},
@@ -1987,7 +2035,8 @@
"schema": {
"$ref": "#/components/schemas/TonAddr"
},
- "description": "The account address to query."
+ "description": "The account address to query.",
+ "example": "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs"
},
"hash": {
"name": "hash",
@@ -1995,7 +2044,8 @@
"required": true,
"schema": {
"$ref": "#/components/schemas/TonHash"
- }
+ },
+ "example": "b113a994b5024a16719f69139328eb759596c38a25f59028b146fecdc3621dfe"
},
"hashOptional": {
"name": "hash",
@@ -2013,7 +2063,8 @@
"schema": {
"type": "integer",
"format": "int32"
- }
+ },
+ "example": 0
},
"shard": {
"name": "shard",
@@ -2023,7 +2074,8 @@
"schema": {
"type": "string",
"x-usrv-cpp-type": "std::int64_t"
- }
+ },
+ "example": "8000000000000000"
},
"seqno": {
"name": "seqno",
@@ -2033,7 +2085,8 @@
"schema": {
"type": "integer",
"format": "int32"
- }
+ },
+ "example": 73082262
},
"seqnoOptional": {
"name": "seqno",
@@ -2147,7 +2200,8 @@
"schema": {
"$ref": "#/components/schemas/TonAddr"
},
- "description": "Source account address."
+ "description": "Source account address.",
+ "example": "EQDOz0WkOipe6e8v0ExU_VNozZUfRFMTWjuuBkRSndpy9fp_"
},
"destinationAddress": {
"name": "destination",
@@ -2156,7 +2210,8 @@
"schema": {
"$ref": "#/components/schemas/TonAddr"
},
- "description": "Destination account address."
+ "description": "Destination account address.",
+ "example": "EQDOj8JxAaq_1ZUE7o4O6pX7PxIsRu9uqq8lLAdBDtB_L-OH"
},
"createdLt": {
"name": "created_lt",
@@ -2166,7 +2221,8 @@
"schema": {
"type": "string",
"x-usrv-cpp-type": "std::int64_t"
- }
+ },
+ "example": "78473359000006"
}
},
"responses": {
diff --git a/ecosystem/api/toncenter/v3.yaml b/ecosystem/api/toncenter/v3.yaml
index f3a719430..2121309eb 100644
--- a/ecosystem/api/toncenter/v3.yaml
+++ b/ecosystem/api/toncenter/v3.yaml
@@ -26,6 +26,8 @@ paths:
type: array
items:
type: string
+ example:
+ - EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
- name: include_boc
in: query
description: 'Include code and data BOCs. Default: true'
@@ -264,6 +266,8 @@ paths:
type: array
items:
type: string
+ example:
+ - EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
responses:
'200':
description: OK
@@ -292,6 +296,7 @@ paths:
required: true
schema:
type: string
+ example: EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
- name: use_v2
in: query
description: Use method from api/v2. Not recommended
@@ -323,16 +328,20 @@ paths:
- name: hash
in: query
description: Transaction hash.
+ required: true
schema:
type: string
+ example: 6XDJwadlnDFW+HLKm/OoDTpiwOAyoyNMLHCcWYc0omk=
- name: direction
in: query
description: Direction of message.
+ required: true
schema:
type: string
enum:
- in
- out
+ example: in
responses:
'200':
description: OK
@@ -473,6 +482,9 @@ paths:
type: array
items:
type: string
+ example:
+ - '0xf8a7ea5'
+ - '0x178d4519'
- name: bodies
in: query
description: List of message bodies to decode (base64 or hex)
@@ -508,6 +520,10 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/DecodeRequest'
+ example:
+ opcodes:
+ - '0xf8a7ea5'
+ - '0x178d4519'
responses:
'200':
description: OK
@@ -540,6 +556,7 @@ paths:
description: Domain name to search for. DNS records with this exact domain name will be returned.
schema:
type: string
+ example: foundation.ton
- name: limit
in: query
description: Limit number of queried rows. Use with *offset* to batch read.
@@ -585,6 +602,10 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/V2EstimateFeeRequest'
+ example:
+ address: EQAPgRDXZBQAWp8KfetNFZOLHNjbIt8_Fg7VtIM3c1q7YtHM
+ body: te6cckEBBAEAkQABoXNpZ25///8R/////wAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAECCg7DyG0CAgMAAABgQgAHwIhrsgoALU+FPvWmisnFjmxtkW+fiwdq2kGbua1dsQAAAAAAAAAAAAAAAAAASigcDQ==
+ ignore_chksig: true
responses:
'200':
description: OK
@@ -948,6 +969,7 @@ paths:
schema:
type: integer
format: int32
+ example: 68213743
responses:
'200':
description: OK
@@ -977,6 +999,7 @@ paths:
schema:
type: integer
format: int32
+ example: 68213743
- name: limit
in: query
description: Limit number of queried rows. Use with *offset* to batch read.
@@ -1197,6 +1220,8 @@ paths:
type: array
items:
type: string
+ example:
+ - EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
responses:
'200':
description: OK
@@ -1230,11 +1255,14 @@ paths:
- name: multisig_address
in: query
description: 'Address of corresponding multisig. Max: 1024.'
+ required: true
explode: true
schema:
type: array
items:
type: string
+ example:
+ - EQA4qyJqpTzdWEIIgW-OUkg3Jhrl4vrGkqYkzNCxR-fk70Cd
- name: parse_actions
in: query
description: Parser order actions
@@ -1292,11 +1320,14 @@ paths:
- name: address
in: query
description: 'Multisig contract address in any form. Max: 1024.'
+ required: true
explode: true
schema:
type: array
items:
type: string
+ example:
+ - EQA4qyJqpTzdWEIIgW-OUkg3Jhrl4vrGkqYkzNCxR-fk70Cd
- name: wallet_address
in: query
description: 'Address of signer or proposer wallet in any form. Max: 1024.'
@@ -1605,8 +1636,10 @@ paths:
- name: account
in: query
description: List of account addresses to get actions. Can be sent in hex, base64 or base64url form.
+ required: true
schema:
type: string
+ example: EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
- name: ext_msg_hash
in: query
description: Find actions by trace external hash
@@ -1654,8 +1687,10 @@ paths:
- name: account
in: query
description: List of account addresses to get transactions. Can be sent in hex, base64 or base64url form.
+ required: true
schema:
type: string
+ example: EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
- name: ext_msg_hash
in: query
description: Find trace by external hash
@@ -1689,11 +1724,14 @@ paths:
- name: account
in: query
description: List of account addresses to get transactions. Can be sent in hex, base64 or base64url form.
+ required: true
explode: true
schema:
type: array
items:
type: string
+ example:
+ - EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
- name: trace_id
in: query
description: Find transactions by trace id.
@@ -1746,6 +1784,10 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/V2RunGetMethodRequest'
+ example:
+ address: EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
+ method: get_jetton_data
+ stack: []
responses:
'200':
description: OK
@@ -2067,6 +2109,7 @@ paths:
schema:
type: integer
format: int32
+ example: 68213743
- name: limit
in: query
description: Limit number of queried rows. Use with *offset* to batch read.
@@ -2118,8 +2161,10 @@ paths:
- name: msg_hash
in: query
description: Message hash. Acceptable in hex, base64 and base64url forms.
+ required: true
schema:
type: string
+ example: 2jgA4GAQZXcA7ZlrdQ7IA+EhY8KHg8ccLRqKpzA/T2A=
- name: body_hash
in: query
description: Hash of message body.
@@ -2180,11 +2225,14 @@ paths:
- name: contract_address
in: query
description: 'Vesting contract address in any form. Max: 1000.'
+ required: true
explode: true
schema:
type: array
items:
type: string
+ example:
+ - EQA5OSku0NViTdvki1NQwlU-SBmCI2CYFOLer9Cx__KZX95d
- name: wallet_address
in: query
description: 'Wallet address to filter by owner or sender. Max: 1000.'
@@ -2245,6 +2293,7 @@ paths:
required: true
schema:
type: string
+ example: UQDve6CLVbaaXQTd54gI-XK8iR63SsaSgcoRZ9byuSFdahyg
- name: use_v2
in: query
description: Use method from api/v2. Not recommended
@@ -2282,6 +2331,8 @@ paths:
type: array
items:
type: string
+ example:
+ - EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
responses:
'200':
description: OK
diff --git a/ecosystem/appkit/changelog.mdx b/ecosystem/appkit/changelog.mdx
new file mode 100644
index 000000000..2238fa3d7
--- /dev/null
+++ b/ecosystem/appkit/changelog.mdx
@@ -0,0 +1,80 @@
+---
+title: "Changelog"
+sidebarTitle: "Changelog"
+---
+
+AppKit ships as two paired packages — `@ton/appkit` and `@ton/appkit-react` — that version together. Each release below lists the matching pair, and pulls in notable changes from the underlying `@ton/walletkit` when they affect AppKit consumers.
+
+AppKit is early-stage. Pin a known-good version in `package.json` and review this page before upgrading.
+
+## `@ton/appkit` 0.0.4 — 2026-03-25
+
+Paired with `@ton/appkit-react` 0.0.5 · `@ton/walletkit` 0.0.11.
+
+**Added**
+
+- `getMasterchainInfo` on `ApiClient` (implemented in `ApiClientToncenter` and `ApiClientTonApi`).
+- `getBlockNumber` core action in `@ton/appkit`.
+- `useBlockNumber` React hook in `@ton/appkit-react`.
+- `ApiClientTonApi` gained or improved: `jettonsByOwnerAddress`, `nftItemsByAddress`, `nftItemsByOwner`, `runGetMethod`, `getAccountTransactions`, `getTransactionsByHash`, `getTrace`, `getPendingTrace`, `getEvents`, `getMasterchainInfo`.
+- `connectionEventFromUrl` for handling a TON Connect connect event in the same place the URL is received (via `@ton/walletkit`).
+- Log levels configurable from environment (via `@ton/walletkit`).
+
+**Changed (breaking)**
+
+- `SwapQuote` and `SwapQuoteParams`: `amount`, `fromAmount`, `toAmount`, and `minReceived` changed type from `TokenAmount` to `string`. These fields now carry already-formatted, human-readable values; `TokenAmount` remains the raw nano representation.
+
+**Changed**
+
+- Switched to the public `@tonconnect/bridge-sdk` package (via `@ton/walletkit`).
+
+## `@ton/appkit` 0.0.3 — 2026-03-06
+
+Paired with `@ton/appkit-react` 0.0.4 · `@ton/walletkit` 0.0.10.
+
+**Added**
+
+- Support for the Tetra network and `ApiClientTonApi` implementation.
+- `getDefaultNetwork`, `setDefaultNetwork`, `watchDefaultNetwork` core actions.
+- `useDefaultNetwork` and `useNetworks` React hooks.
+- Internal event-bus subscription for `defaultNetwork` updates.
+- `TonConnectConnector` now subscribes to `NETWORKS_EVENTS.DEFAULT_CHANGED` for automatic network switching when the wallet reports a network change.
+
+**Changed (breaking)**
+
+- React hook rename: `useNFTsByAddress` → `useNftsByAddress`.
+- `ApiClient.sendBoc` return value now uses a `0x`-prefixed hex string.
+
+**Fixed**
+
+- Infinite re-render in `useNetworks`.
+
+**Internal**
+
+- API clients refactored over a shared abstract `BaseApiClient`.
+
+## `@ton/appkit` 0.0.2 — 2026-02-26
+
+Paired with `@ton/appkit-react` 0.0.3 · `@ton/walletkit` 0.0.9.
+
+**Added**
+
+- `getTransactionStatus` accepts either a BOC or a hash.
+
+**Changed (breaking)**
+
+- `ApiClient.sendBoc` adds the `0x` prefix to the returned hash.
+
+## `@ton/appkit` 0.0.1
+
+Paired with `@ton/appkit-react` 0.0.1.
+
+- Initial alpha release.
+
+## Upgrade notes
+
+The breaking changes worth a code-level review:
+
+- **`SwapQuote` amounts as strings (0.0.4).** Anything that treated `SwapQuote.amount`, `fromAmount`, `toAmount`, or `minReceived` as nano `TokenAmount` values needs to handle them as already-formatted decimal strings. Raw nano values now live only in `TokenAmount`-typed fields.
+- **`useNFTsByAddress` → `useNftsByAddress` (0.0.3).** Casing-only rename; behavior is unchanged.
+- **`ApiClient.sendBoc` returns `0x`-prefixed hex (0.0.2 and 0.0.3).** Callers that compared the return value as a bare hash string need to strip or expect the prefix.
diff --git a/ecosystem/appkit/faq-troubleshooting.mdx b/ecosystem/appkit/faq-troubleshooting.mdx
new file mode 100644
index 000000000..58bd2d4ca
--- /dev/null
+++ b/ecosystem/appkit/faq-troubleshooting.mdx
@@ -0,0 +1,77 @@
+---
+title: "FAQ & Troubleshooting"
+sidebarTitle: "FAQ & Troubleshooting"
+---
+
+Use this page to answer common AppKit questions and triage the most common failure classes: connector issues, wallet rejection, network mismatch, provider gaps, and settlement confusion.
+
+## FAQ
+
+### What is AppKit?
+
+AppKit is a TypeScript toolkit for TON wallet connection, transaction requests, asset reads, provider integrations, React hooks, and UI components.
+
+### Is AppKit a wallet?
+
+No. Wallets hold keys and sign requests. AppKit prepares requests, tracks application state, and routes actions through connectors and providers.
+
+### Does AppKit store private keys?
+
+No. Private keys stay in the user's wallet. AppKit stores runtime configuration, local state, and provider registrations.
+
+### Can AppKit be used without React?
+
+Yes. The core package `@ton/appkit` works from plain TypeScript. React-specific hooks and components live in `@ton/appkit-react`.
+
+### How is transaction success confirmed?
+
+A wallet transaction response only proves the user signed and the wallet submitted the request. Confirm success with `getTransactionStatus`, streaming updates, or backend verification before changing product state.
+
+### Why does a wallet reject a request?
+
+Common causes include user rejection, expired requests, wrong network, missing wallet selection, malformed payloads, and insufficient balance for value plus fees.
+
+## Troubleshoot by symptom
+
+### The connect button opens, but no wallet connects
+
+Check the connector configuration first:
+
+- confirm the TON Connect manifest URL is public and reachable
+- confirm at least one connector is registered on the `AppKit` instance
+- confirm the React tree is wrapped with `AppKitProvider`
+
+If the UI is custom, confirm the code passes a valid `connectorId` to `connect`.
+
+### Reads work, but watch hooks never update
+
+Streaming hooks need a streaming provider. Confirm that:
+
+- a streaming provider is registered for the active network
+- the network passed to the watcher matches the configured network
+- `hasStreamingProvider(appKit, network)` returns `true`
+
+### The wallet signs, but the app never sees settlement
+
+Separate wallet acceptance from on-chain settlement:
+
+- treat the wallet response as a submission result, not finality
+- check `getTransactionStatus` with the returned `boc`
+- if streaming is used, remember that streaming finality uses `pending`, `confirmed`, `finalized`, and `invalidated`
+
+### Jetton or NFT data looks wrong
+
+Treat off-chain metadata as display data:
+
+- read decimals from jetton metadata before building transfers
+- sanitize jetton and NFT names, images, and descriptions
+- route by contract addresses, not by display metadata
+
+### A transaction fails on the wrong network
+
+Check both the selected wallet network and the AppKit default network. Block unsafe actions until the expected network and wallet-reported network match.
+
+## Related pages
+
+- [Get started](/ecosystem/appkit/get-started)
+- [How to](/ecosystem/appkit/howto)
diff --git a/ecosystem/appkit/get-started.mdx b/ecosystem/appkit/get-started.mdx
new file mode 100644
index 000000000..8575ecd77
--- /dev/null
+++ b/ecosystem/appkit/get-started.mdx
@@ -0,0 +1,26 @@
+---
+title: "Get started with AppKit"
+sidebarTitle: "Get started"
+---
+
+Follow this section end-to-end to take a fresh project from zero to a working AppKit app. Each page is one concrete action.
+
+The first four pages get the baseline running — install the packages, register a connector, read wallet and chain state, and send a transaction. From that point the app is functional. The remaining pages are improvements that layer on live updates, DeFi flows, and ready-made UI.
+
+## Step by step
+
+| Step | What you do |
+| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
+| [Prepare your project](/ecosystem/appkit/get-started/installation) | Scaffold a project if you have none, install AppKit, and add the Buffer polyfill. |
+| [Add wallet connectors](/ecosystem/appkit/get-started/connectors) | Create the AppKit instance and drop in ``. |
+| [Add networks](/ecosystem/appkit/get-started/networks) | Configure mainnet alongside testnet and pick an API client. |
+| [Use basic getter hooks](/ecosystem/appkit/get-started/basic-getter-hooks) | Read wallet, address, balance, jetton, NFT, network, and transaction state. |
+| [Send transactions](/ecosystem/appkit/get-started/sending-transactions) | Send Toncoin, jettons, NFTs, or prepared transactions. |
+| [Stream live updates](/ecosystem/appkit/get-started/streaming) | Subscribe to balance, jetton, and transaction changes in real time. |
+| [Add DeFi providers](/ecosystem/appkit/get-started/providers) | Plug in swap and staking providers when the app needs DeFi flows. |
+| [Use UI widgets](/ecosystem/appkit/get-started/using-ui-widgets) | Drop in ``, ``, and other prebuilt flows. |
+
+## What to do next
+
+- See task-level walkthroughs in [How to](/ecosystem/appkit/howto).
+- Look up the full surface in [AppKit reference](/ecosystem/appkit/reference).
diff --git a/ecosystem/appkit/get-started/basic-getter-hooks.mdx b/ecosystem/appkit/get-started/basic-getter-hooks.mdx
new file mode 100644
index 000000000..b2971734e
--- /dev/null
+++ b/ecosystem/appkit/get-started/basic-getter-hooks.mdx
@@ -0,0 +1,64 @@
+---
+title: "Use basic getter hooks"
+sidebarTitle: "Use basic getter hooks"
+---
+
+Read the connected wallet's state from React using AppKit's getter hooks. They re-render when the underlying state changes and do not themselves start wallet actions — transactions and signatures use mutation hooks such as `useTransferTon`, `useSignText`, and `useSendTransaction`.
+
+## Before you begin
+
+You need the React providers in place. See [Installation → Wrap the application](/ecosystem/appkit/get-started/installation/react-app#wrap-the-application).
+
+## Three return shapes
+
+Getter hooks come in three return shapes. Which shape a hook uses depends on where the data lives.
+
+**Tuple with setter** — for state AppKit stores reactively and that the app can change. The first element is the value (or `null` if not yet set), the second is the setter.
+
+```tsx
+const [wallet, setWalletId] = useSelectedWallet();
+const [network, setDefaultNetwork] = useDefaultNetwork();
+```
+
+The hooks that return tuples: `useSelectedWallet`, `useDefaultNetwork`.
+
+**Direct value** — for store-derived state that is read-only from React. Returns the value itself, no wrapper.
+
+```tsx
+const address = useAddress(); // string | undefined
+const network = useNetwork(); // Network | undefined
+const networks = useNetworks(); // Network[]
+const connectors = useConnectors(); // Connector[]
+const wallets = useConnectedWallets(); // WalletInterface[]
+const connector = useConnectorById('tonconnect'); // Connector | undefined
+const appKit = useAppKit(); // AppKit
+```
+
+These hooks use `useSyncExternalStore` under the hood and re-render when the underlying state changes.
+
+**TanStack Query result** — for chain data fetched through an API client. Returns `{ data, isLoading, isError, error, refetch }` and accepts a `query` field for `refetchInterval`, `enabled`, `staleTime`, and the rest of the TanStack Query options.
+
+```tsx
+const { data: balance, isLoading } = useBalance();
+const { data: jettons } = useJettons({ query: { refetchInterval: 20000 } });
+```
+
+The hooks that return query results: `useBalance`, `useJettons`, `useNfts`, `useTransactionStatus`, `useJettonInfo`, `useJettonBalanceByAddress`, `useJettonWalletAddress`, `useBlockNumber`, `useNft`, and the `*ByAddress` variants.
+
+## Provider data is not chain finality
+
+A getter hook reflects a snapshot of provider data, not the chain itself. The user's wallet may report state that differs from what the configured `apiClient` returns — usually because the indexer is a few blocks behind the wallet, sometimes because the two read different networks. For live updates without manual refetch, mount the matching `useWatch*` hook (covered on [Stream live updates](/ecosystem/appkit/get-started/streaming)).
+
+## Tips
+
+Treat hook data as the latest read, not as a settlement check. Verify chain effects with `getTransactionStatus` or a backend before crediting value, and re-check after any reconnect.
+
+## Code example
+
+See a [working example](https://github.com/ton-connect/kit/tree/main/apps/appkit-minter) that uses `useBalance`, `useJettons`, and `useNfts` to render wallet state — [try it live](https://appkit-minter.vercel.app/).
+
+## What to do next
+
+- Move on to [Send transactions](/ecosystem/appkit/get-started/sending-transactions) — at that point you'll have a working app.
+- For a full walkthrough of reading TON, jetton, and NFT data, see [Read balances](/ecosystem/appkit/howto/read-balances).
+- Look up the full hook surface in the [`@ton/appkit-react` reference](/ecosystem/appkit/reference/appkit-react).
diff --git a/ecosystem/appkit/get-started/connectors.mdx b/ecosystem/appkit/get-started/connectors.mdx
new file mode 100644
index 000000000..a5b80ca9c
--- /dev/null
+++ b/ecosystem/appkit/get-started/connectors.mdx
@@ -0,0 +1,52 @@
+---
+title: "Add wallet connectors"
+sidebarTitle: "Add wallet connectors"
+---
+
+Wire up a connector so AppKit can talk to a wallet. A connector is the transport that carries requests to the wallet and responses back — it does not sign, and is not itself a wallet. Signing always happens inside the user's wallet application. AppKit cares about the connector's `id`, `type`, `metadata`, and the methods it exposes (`connectWallet`, `disconnectWallet`, `getConnectedWallets`, `destroy`). The protocol underneath is hidden.
+
+## Before you begin
+
+Install AppKit first. See [Prepare your project](/ecosystem/appkit/get-started/installation).
+
+## Create the AppKit instance
+
+The `AppKit` constructor takes a `connectors` array of connector factories such as `createTonConnectConnector`. A single `AppKit` instance can hold more than one connector, and the user picks at connect time. The example below registers a single TON Connect connector — enough to start wiring up the connect button.
+
+```ts
+// appkit.ts
+import { AppKit, createTonConnectConnector } from '@ton/appkit';
+
+export const appKit = new AppKit({
+ connectors: [
+ createTonConnectConnector({
+ tonConnectOptions: {
+ manifestUrl: 'https://example.com/tonconnect-manifest.json',
+ },
+ }),
+ ],
+});
+```
+
+## Render a connect button
+
+Drop `` somewhere in the tree to open the wallet picker. The button assumes the React providers are already mounted — see [Installation → Wrap the application](/ecosystem/appkit/get-started/installation/react-app#wrap-the-application).
+
+For most apps, this drop-in component is the right starting point. `` from `@ton/appkit-react` owns the connect modal, the session lifecycle (open, restore on reload, expire), and the connected-address display. When the UI needs a tailored wallet list, use `useConnectors` and `useConnect` directly. That pattern is documented in [Connect to a wallet](/ecosystem/appkit/howto/connect-to-a-wallet).
+
+```tsx
+import { TonConnectButton } from '@ton/appkit-react';
+
+export function Header() {
+ return ;
+}
+```
+
+## Tips
+
+Do not assume every connector supports every flow. Check capability before sending a request and treat user rejection as a normal outcome on every action. Connector errors and chain errors are different failure classes and need different recovery paths.
+
+## What to do next
+
+- Continue to [Add networks](/ecosystem/appkit/get-started/networks) to configure mainnet alongside testnet and pick an API client.
+- For the custom-selector pattern, vanilla JS connect, and error handling, see [Connect to a wallet](/ecosystem/appkit/howto/connect-to-a-wallet).
diff --git a/ecosystem/appkit/get-started/installation.mdx b/ecosystem/appkit/get-started/installation.mdx
new file mode 100644
index 000000000..73fb44ec2
--- /dev/null
+++ b/ecosystem/appkit/get-started/installation.mdx
@@ -0,0 +1,83 @@
+---
+title: "Prepare your project"
+sidebarTitle: "Prepare your project"
+---
+
+Before adding AppKit, you need a JavaScript project with a module bundler. If you already have one, skip the scaffold step. The Buffer polyfill is required either way — AppKit's dependencies (`@ton/core` and `@ton/crypto`) use Node.js' `Buffer` global, which browsers don't expose and bundlers (Vite, esbuild, Rollup, Parcel) don't polyfill automatically. Without it, the first call into `@ton/core` — usually address parsing — throws `ReferenceError: Buffer is not defined`.
+
+The polyfill must run before any AppKit import. Load it from a dedicated module in the HTML entry, ahead of the application script — relying on import order inside the entry file alone is fragile.
+
+The steps below use Vite. The same pattern applies to any module-based bundler (Webpack, Parcel, Rollup): a dedicated polyfill module referenced from the HTML entry, before the application script.
+
+
+
+ Create a new Vite project with the React + TypeScript template.
+
+ ```shell
+ pnpm create vite my-app --template react-ts
+ cd my-app
+ pnpm install
+ ```
+
+ Swap `pnpm` for `npm create` or `yarn create` if you don't use pnpm.
+
+
+
+ ```shell
+ npm i buffer
+ ```
+
+
+
+ Add a file that imports `buffer` and exposes it on `window`. Use `.ts` for TypeScript projects, `.js` otherwise.
+
+ ```ts
+ // src/buffer.ts
+ import { Buffer } from 'buffer';
+
+ window.Buffer = Buffer;
+ ```
+
+
+
+ In `index.html`, reference the polyfill from a `
+
+