Skip to main content
The official language of TON Blockchain is Tolk, and all other languages are deemed legacy. That said, you can still use them and contribute to the surrounding tooling or documentation.
FunC is an intermediate-level language used to program smart contracts on TON. It is a domain-specific, statically typed language with C-like syntax. To give a taste of FunC syntax, here is a simple example of a method for sending money written in FunC:
() send_money(slice address, int amount) impure inline {
    var msg = begin_cell()
        .store_uint(0x10, 6) ;; nobounce
        .store_slice(address)
        .store_coins(amount)
        .end_cell();

    send_raw_message(msg, 64);
}
The method receives as parameters the address to send the money to,
and the amount to send. The method does not return a value, indicated by () to the left of the method name send_money. The method uses the impure and inline specifiers, which are flags that tell the compiler to process the method in specific ways.
The method first creates the message to send msg by using a cell builder, since the message is encoded as a cell. A new cell builder is created with function begin_cell. Then, some message flags are set, indicated at the line with the single-line comment ;; nobounce. Then, function store_slice stores the receiving address, followed by function store_coins which stores the amount to send. The builder finalizes the cell with a call to the end_cell function. Finally, function send_raw_message sends the message, where the parameter 64 describes a sending mode.
Fix links once the pages are ready, since most of the links are broken or point to a generic stub.

Compiler

The compiler converts FunC programs into Fift assembler code, generating the corresponding bitcode for the TON Virtual Machine. Developers and engineers can use its bitcode, which is structured as a tree of cells like all data in the TON Blockchain, to create smart contracts or run it on a local instance of the TVM.

Compile with JS

Using the Blueprint framework is the most convenient and quickest way to begin developing and compiling smart contracts. Read more in the Blueprint section. The following command installs all JS dependencies and creates a template project in the current working directory:
npm create ton@latest

Compile with original binaries

FunC compiler binaries for Windows, macOS (Intel or Arm64), and Ubuntu can be downloaded from GitHub.
The last version for the FunC compiler was v2025.07. The FunC compiler is no longer developed. New releases are focused on the Tolk compiler.

TON Blockchain course

The TON Blockchain course covers FunC and smart contract development in its 4th module.

Tutorials

I cannot find where the “Introduction” page is in the new docs!!!!!!!The best place to start developing with FunC is the Introduction section.
Below, you can find additional materials shared by community experts:

Contests

Joining contests is a great way to learn FunC. You can also review past competitions to learn more:
ContestTasksSolutions
TSC #5 (Dec 2023)Tasks
TSC #4 (Sep 2023)TasksSolutions
TSC #3 (Dec 2022)TasksSolutions
TSC #2 (Jul 2022)TasksSolutions
TSC #1 (Mar 2022)TasksSolutions

Smart contract examples

Follow this link to find various standard smart contracts, such as wallets, electors that manage validation on TON, multi-signature wallets, etc. These can serve as helpful learning references.

Changelog

History of FunC
I