TON for developers: FunC, Tact and Tolk in 2026
The smart contract languages used on TON in 2026 — FunC, Tact, Tolk. Which to pick as a beginner, how they differ, what tooling you need and where to learn.
- Author
- TON Adoption Team · research desk
- Published
- Updated
Contents21sections
- Three TON languages
- FunC: the classic
- Tact: the friendly one
- Tolk: the new recommended default
- What to choose
- Blueprint: the main tool
- What’s inside
- Creating a project
- Running tests
- Deploying to testnet
- Minimal development workflow
- What to understand about the TON model
- Every account is a contract
- Asynchrony
- Bounce
- Storage fee
- Cells and Slices
- Frontend and dApp
- Where to learn
- What next
- Sources
For a developer used to Solidity, TON is a separate universe. Different languages, different concepts (asynchrony, cells, message-passing), different tools. This guide is a map of the terrain: what exists, what to pick, in what order to learn it.
One important disclaimer: below we discuss smart contracts, i.e. code that lives on-chain. For front-end integration (a JS/React dApp, a bot, a mini-app) the languages are different — TypeScript, Python — and they are standard.
Three TON languages
TON has three actively maintained languages for smart contracts in 2026:
- FunC — low-level, historically the first, written by Nikolai Durov.
- Tact — high-level, introduced in 2023, syntax close to TypeScript/Kotlin.
- Tolk — newest (2024–2025), positioned by TON Foundation as the recommended default.
There’s also Fift — a stack-oriented language, but it’s used only for deployment and low-level utilities. Production contracts are not written in it.
All three languages compile to TVM bytecode, which is what runs on the network.
FunC: the classic
FunC is a functional, low-level language with explicit work over TON memory primitives (cells, slices, dictionaries). Its syntax resembles a hybrid of C and Lisp:
- Explicit typing (
int,cell,slice). - Direct TVM instructions when needed.
- Minimal abstractions — you write close to the metal.
Pros:
- Full control over gas spend.
- All examples in the TON docs were historically in FunC — the base language.
- The majority of existing mainnet contracts are written in FunC.
Cons:
- High entry barrier: you need to understand cells and the low-level model.
- Lots of boilerplate (serialisation, message handling, authorisation — all manual).
- Easy to mistype or get the operation order wrong.
FunC is still supported, but TON Foundation is gradually shifting focus to Tolk. Pure-FunC new projects in 2026 are rare.
Tact: the friendly one
Tact was conceived as “Solidity for TON” — a high-level language that hides most of the TVM complexity. The syntax is close to TypeScript:
contract Counter {
val: Int as uint32 = 0;
receive("increment") {
self.val = self.val + 1;
}
get fun value(): Int {
return self.val;
}
}
Pros:
- Low barrier for developers with TypeScript/Java/Kotlin background.
- Automatic message serialisation.
- Built-in patterns for jettons, NFTs, ownership.
- Excellent documentation at tact-lang.org.
Cons:
- Less control over gas — the compiler generates “safe” code, not always optimal.
- Some scenarios still require embedded FunC fragments.
- Smaller community than FunC.
Tact is actively used in production — many 2024–2025 projects migrated from FunC to it.
Tolk: the new recommended default
Tolk is TON Foundation’s freshest work. Launched in 2024–2025 and by 2026 the recommended default language.
fun main(in_msg: cell, in_msg_full: cell, my_balance: int): int {
var counter: int = read_counter();
counter += 1;
save_counter(counter);
return 0;
}
The Tolk idea:
- Modern, type-safe syntax (TypeScript-like).
- A FunC core under the hood — full TVM control.
- Automatic packing of structures into cells.
- Pattern matching, null safety, generics.
Pros:
- 30–50% gas savings versus FunC, per TON Foundation’s own benchmarks.
- Auto-inlining of functions (manual in FunC).
- Modern type system: type aliases, union types, generics, null safety.
- Still close to TVM, low-level flexibility preserved.
Cons:
- Young — the ecosystem is still forming.
- Fewer ready-made examples and audited cases.
- Documentation is still being written.
In 2026 TON Foundation is actively rewriting examples and templates in Tolk. New developers should look at Tolk first.
What to choose
| Scenario | Recommendation |
|---|---|
| New project, no legacy code | Tolk |
| Gas optimisation is critical | Tolk or FunC |
| Team comfortable with TypeScript/Solidity | Tact |
| Maintaining an existing FunC project | FunC |
| Learning, understanding TON internals | First FunC for the basics, then Tolk |
For an absolute beginner the path is:
- Learn the TON base model — cells, async messages, account-as-contract.
- Build the first contract in Tolk via Blueprint.
- As needed — peek into FunC for deep control.
Blueprint: the main tool
Blueprint is the framework for TON development, the analogue of Hardhat in Ethereum. Built by TON Foundation, supports all three contract languages.
What’s inside
- Scaffolding —
npm create ton@latestbuilds a project with an example. - Compiler — built-in support for FunC, Tact, Tolk.
- Sandbox — local TVM emulator for unit tests.
- Deploy — scripts for testnet/mainnet via Tonkeeper or mnemonic.
- Testing — Jest-based, runs through @ton/sandbox.
Creating a project
npm create ton@latest my-contract
cd my-contract
npm install
Blueprint then asks: which contract language (FunC/Tact/Tolk), the main contract name, whether to scaffold an example. After that you have a ready structure with tests and a deploy script.
Running tests
npx blueprint test
Tests run in the local sandbox — no network calls, no TON spent. Time per test — milliseconds.
Deploying to testnet
npx blueprint run --testnet
The script asks how to authenticate (Tonkeeper via QR or mnemonic) and deploys the contract. Same with --mainnet for production.
Minimal development workflow
The typical contract development process:
- Scaffold.
npm create ton@latest my-token. - Local development. Write the contract, write tests in
tests/MyToken.spec.ts. - Local tests.
npx blueprint test— must be green. - Testnet deploy.
npx blueprint run --testnet. The contract gets an address. From here you can connect to it with Tonkeeper on testnet. - Manual testing. Switch Tonkeeper to testnet, send transactions, inspect behaviour through TonScan testnet.
- Audit. If the contract holds real funds — non-negotiable. TON audit firms: Certik, Trail of Bits, slowmist.com (TON-specialised), Tonbit.
- Mainnet deploy.
npx blueprint run --mainnet. Deployment costs 0.05–0.5 TON.
What to understand about the TON model
A few concepts that distinguish TON development from EVM:
Every account is a contract
Even an ordinary wallet is a smart contract (a wallet contract). It has code, state and a balance. When you “send TON”, you actually invoke a function on your wallet contract that emits a message to the recipient.
Asynchrony
Contracts do not “call” each other. They send messages, and the recipient processes them in the next block. There’s no “return value right now” — you have to design logic with callback messages.
Bounce
If the recipient cannot process the message, it bounces back with a bounced=true flag. The sender contract must know how to handle the bounce — otherwise funds get stuck.
Storage fee
A contract pays for storage out of its own balance. Leave a contract without TON, and over a few months its state is eaten by the storage fee and the contract becomes frozen.
Cells and Slices
All data on TON is stored in cells — structures with a fixed limit (1023 bits of data + 4 references to other cells). Large data becomes a tree of cells. Serialising into cells and back is its own skill.
More on the model — in the EVM-incompatibility article.
Frontend and dApp
If you’re not writing the contract itself but a dApp around it, frontend development is standard: TypeScript, React/Vue/Svelte, whatever.
Key libraries:
- @ton/ton — official SDK for talking to the TON network from JS/TS.
- @tonconnect/ui-react — a Connect Wallet button supporting every wallet. More — in the TON Connect article.
- @ton/core — types and low-level cell operations.
- @ton/crypto — cryptography (mnemonic, keys, signatures).
Where to learn
Free resources in 2026:
- docs.ton.org — official documentation. Updated regularly, has tutorials.
- tact-lang.org — Tact’s separate documentation.
- TON Hello World — step-by-step “your first contract” tutorial.
- GitHub TON-Foundation — repositories with examples and templates.
- Telegram channels —
@toncontests,@tondevchat,@TONresearch.
Paid courses exist, but free materials plus your own practice are enough to get started.
What next
If you’d rather start with the architecture — the full TON guide. If you’re curious about how dApps talk to wallets — TON Connect. For risk-free experimentation — the testnet guide.
Sources
Frequently asked
Which language should I learn for TON in 2026?
Can I write TON smart contracts in JavaScript or Python?
What is the main development tool?
How do I test smart contracts without spending real TON?
How much does it cost to deploy a contract on mainnet?
Related
- BasicsFeb 4, 2026
TON Connect: what it is, why it matters and how it works
TON Connect is the standard linking wallets to dApps on TON. How the protocol works, supporting wallets, the difference from WalletConnect
- BasicsFeb 16, 2026
TON mainnet vs testnet: what they are and how to switch
How TON mainnet differs from testnet, how to switch Tonkeeper to testnet, where to get free testnet TON and why developers and curious users care about the.
- BasicsJan 17, 2026
Why TON is not EVM-compatible and what it means for users
TON uses TVM instead of the Ethereum Virtual Machine — why it was designed that way, what it costs and gains the user, and which TON-EVM bridges exist in 2026.