Skip to content
/ tact Public

⚡ Tact compiler for TON blockchain—build secure, efficient smart contracts with powerful tooling and seamless integration

License

Notifications You must be signed in to change notification settings

tact-lang/tact

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tact Language Compiler

Tact language banner

A next-gen smart contract programming language for TON Blockchain focused on efficiency and ease of development. Tact is a good fit for complex smart contracts, quick onboarding, and rapid prototyping.

Developed by TON Studio, powered by the community — as of the beginning of 2025, the number of unique code1 contracts deployed on the mainnet reached almost 28 thousand, of which about 33% were written in Tact. You can view some selected projects here: Tact in production.

Tact has undergone a comprehensive security audit by Trail of Bits, a leading Web3 security firm.

Try it onlineFeaturesSecurityKey resourcesInstallationCommunityContributing

Website Documentation Audited by Trail of Bits Twitter Telegram Telegram

Features

The most prominent and distinctive features of Tact are:

  • Familiar and user-friendly TypeScript-like syntax.
  • Strong static type system with built-in Structs, Messages, and maps, among others.
  • First-class maps support, with many methods and a convenient foreach statement for traversing.
  • Automatic (de)serialization of incoming messages and data structures.
  • Automatic routing of internal, external, and bounced messages.
  • Automatic handling of message types, including binary, text, and fallback slices.
  • No boilerplate functions for sending messages and deploying child contracts.
  • Reusable and composable behaviors using traits, similar to interfaces or mixins.
  • Support for low-level programming with asm functions.
  • Generation of single-file TypeScript wrappers for convenient interactions with compiled contracts, which include:
    • Type definitions for Structs and Messages observable in the compilation report.
    • Corresponding storeStructureName() and loadStructureName() functions for (de)serialization.
    • All global and contract-level constants.
    • Bi-directional records of exit codes: from their names to numbers and vice versa.
    • Opcodes of all Messages.
    • A contract wrapper class with various helper functions for initialization, deployment, and message exchange.
  • Rich standard library.
  • Extensive documentation.
  • Robust tooling.
  • ...and there's much more to come!

Security

Tact in production

Some selected software and applications based on contracts written in Tact, deployed in production, and consumed by end users:

Open source or source available
Closed source

See Tact in production on the Awesome Tact list.

Key resources

Installation

Compiler

The Tact compiler is distributed as an NPM package bundled with the Tact standard library.

The recommended Node.js version is 22 or higher, while the minimum version is 18.

Use your favorite package manager to install it into a Node.js project:

# yarn is recommended, but not required
yarn add @tact-lang/compiler

# you can also use npm
npm i @tact-lang/compiler@latest

# or pnpm
pnpm add @tact-lang/compiler

# or bun
bun add @tact-lang/compiler

Alternatively, you can install it globally as such:

npm i -g @tact-lang/compiler

It will make the tact compiler available on your PATH, as well as:

  • a convenient unboc disassembler of a contract's code compiled into a Bag of Cells .boc format.
  • a formatter tact-fmt, which can format or check the formatting of individual Tact files and directories.

Tooling

Extensions and plugins
Security
Utility
  • Formatter (tact-fmt) — The official formatter. It ships with the Tact Language Server, VS Code extension, and as a standalone binary with the compiler. You can invoke it by running npx tact-fmt in your Tact projects.
  • BoC Disassembler (unboc) — Disassembler for .boc files. Ships as a standalone binary with the compiler. You can invoke it by running npx unboc in your Tact projects.

Getting started

For a quick start, read the "Let's start!" mini-guide in the Tact documentation. It uses the Blueprint development environment for writing, testing, and deploying smart contracts on TON Blockchain.

If you want more manual control, use tact-template. It's a ready-to-use template with the development environment set up, including the Tact compiler with TypeScript + Jest, a local TON emulator, AI-based editor support, and examples of how to run tests.

git clone --depth 1 https://github.com/tact-lang/tact-template

Community

If you can’t find the answer in the docs, or you’ve tried to do some local testing and it still didn’t help — don’t hesitate to reach out to Tact’s flourishing community:

Contributing

Contributions are welcome! To help develop the compiler, see the contributing guide.

In addition, we invite you to create new educational materials in any form, help foster the community, and build new Tact contracts and projects. The best creations will be featured in awesome-tact and on social media.

Good luck on your coding adventure with ⚡ Tact!

License

MIT © The Tact Authors: Steve Korshakov; TON Studio.

Footnotes

  1. The "unique code" means that each contract in the data sample has at least one TVM instruction that differs from the other contracts, excluding many preprocessed wallets with everything inlined — even seqno and a public key for signature verification!