Book
Guides
Getting started

Welcome to Tact

There are two ways to start with Tact: using a template or starting from scratch.

We recommend using a template, as it contains a simple contract that can be deployed to the TON blockchain, along with examples of implementing unit tests and helper functions for contract deployment.

Getting started from template

To get started, you can use the template project. It contains a simple contract that can be deployed to the TON blockchain, as well as examples of implementing unit tests and helper functions for contract deployment.

To create a project from the template, simply create a new repository from the template project: https://github.com/tact-lang/tact-template (opens in a new tab).

Getting started from scratch

Tact is distributed via npm package manager and is meant to be installed to TypeScript/JavaScript projects:

yarn add @tact-lang/compiler

Then you need to create a tact.config.json file in the root of your project. It should contain the following:

{
  "projects": [
    {
      "name": "sample",
      "path": "./sources/contract.tact",
      "output": "./sources/output"
    }
  ]
}

Add an example contract to ./sources/contract.tact:

import "@stdlib/deploy";
 
message Add {
    amount: Int as uint32;
}
 
contract SampleTactContract with Deployable {
 
    owner: Address;
    counter: Int as uint32;
 
    init(owner: Address) {
        self.owner = owner;
        self.counter = 0;
    }
 
    fun add(v: Int) {
 
        // Check sender
        let ctx: Context = context();
        require(ctx.sender == self.owner, "Invalid sender");
 
        // Update counter
        self.counter = (self.counter + v);
    }
 
    receive(msg: Add) {
        self.add(msg.amount);
    }
 
    receive("increment") {
        self.add(1);
    }
 
    get fun counter(): Int {
        return self.counter;
    }
}

Add a build script to package.json:

{
  "scripts": {
    "build": "tact --config ./tact.config.json"
  }
}

Now you can run yarn build and get the compiled contract in ./sources/output folder.