> ## Documentation Index
> Fetch the complete documentation index at: https://companyname-a7d5b98e-nft-comparison.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# FunC language overview

export const Aside = ({type = "note", title = "", icon = "", iconType = "regular", children}) => {
  const asideVariants = ["note", "tip", "caution", "danger"];
  const asideComponents = {
    note: {
      outerStyle: "border-sky-500/20 bg-sky-50/50 dark:border-sky-500/30 dark:bg-sky-500/10",
      innerStyle: "text-sky-900 dark:text-sky-200",
      calloutType: "note",
      icon: <svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="w-4 h-4 text-sky-500" aria-label="Note">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M7 1.3C10.14 1.3 12.7 3.86 12.7 7C12.7 10.14 10.14 12.7 7 12.7C5.48908 12.6974 4.0408 12.096 2.97241 11.0276C1.90403 9.9592 1.30264 8.51092 1.3 7C1.3 3.86 3.86 1.3 7 1.3ZM7 0C3.14 0 0 3.14 0 7C0 10.86 3.14 14 7 14C10.86 14 14 10.86 14 7C14 3.14 10.86 0 7 0ZM8 3H6V8H8V3ZM8 9H6V11H8V9Z"></path>
        </svg>
    },
    tip: {
      outerStyle: "border-emerald-500/20 bg-emerald-50/50 dark:border-emerald-500/30 dark:bg-emerald-500/10",
      innerStyle: "text-emerald-900 dark:text-emerald-200",
      calloutType: "tip",
      icon: <svg width="11" height="14" viewBox="0 0 11 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg" className="text-emerald-600 dark:text-emerald-400/80 w-3.5 h-auto" aria-label="Tip">
          <path d="M3.12794 12.4232C3.12794 12.5954 3.1776 12.7634 3.27244 12.907L3.74114 13.6095C3.88471 13.8248 4.21067 14 4.46964 14H6.15606C6.41415 14 6.74017 13.825 6.88373 13.6095L7.3508 12.9073C7.43114 12.7859 7.49705 12.569 7.49705 12.4232L7.50055 11.3513H3.12521L3.12794 12.4232ZM5.31288 0C2.52414 0.00875889 0.5 2.26889 0.5 4.78826C0.5 6.00188 0.949566 7.10829 1.69119 7.95492C2.14321 8.47011 2.84901 9.54727 3.11919 10.4557C3.12005 10.4625 3.12175 10.4698 3.12261 10.4771H7.50342C7.50427 10.4698 7.50598 10.463 7.50684 10.4557C7.77688 9.54727 8.48281 8.47011 8.93484 7.95492C9.67728 7.13181 10.1258 6.02703 10.1258 4.78826C10.1258 2.15486 7.9709 0.000106649 5.31288 0ZM7.94902 7.11267C7.52078 7.60079 6.99082 8.37878 6.6077 9.18794H4.02051C3.63739 8.37878 3.10743 7.60079 2.67947 7.11294C2.11997 6.47551 1.8126 5.63599 1.8126 4.78826C1.8126 3.09829 3.12794 1.31944 5.28827 1.3126C7.2435 1.3126 8.81315 2.88226 8.81315 4.78826C8.81315 5.63599 8.50688 6.47551 7.94902 7.11267ZM4.87534 2.18767C3.66939 2.18767 2.68767 3.16939 2.68767 4.37534C2.68767 4.61719 2.88336 4.81288 3.12521 4.81288C3.36705 4.81288 3.56274 4.61599 3.56274 4.37534C3.56274 3.6515 4.1515 3.06274 4.87534 3.06274C5.11719 3.06274 5.31288 2.86727 5.31288 2.62548C5.31288 2.38369 5.11599 2.18767 4.87534 2.18767Z"></path>
        </svg>
    },
    caution: {
      outerStyle: "border-amber-500/20 bg-amber-50/50 dark:border-amber-500/30 dark:bg-amber-500/10",
      innerStyle: "text-amber-900 dark:text-amber-200",
      calloutType: "warning",
      icon: <svg className="flex-none w-5 h-5 text-amber-400 dark:text-amber-300/80" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-label="Warning">
          <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
        </svg>
    },
    danger: {
      outerStyle: "border-red-500/20 bg-red-50/50 dark:border-red-500/30 dark:bg-red-500/10",
      innerStyle: "text-red-900 dark:text-red-200",
      calloutType: "danger",
      icon: <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor" className="text-red-600 dark:text-red-400/80 w-4 h-4" aria-label="Danger">
          <path d="M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zm41.6-48c-4.3 7.4-4.3 16.6 0 24l88.3 152.9c4.3 7.4 12.2 12 20.8 12l176.6 0c8.6 0 16.5-4.6 20.8-12L453.4 268c4.3-7.4 4.3-16.6 0-24L365.1 91.1c-4.3-7.4-12.2-12-20.8-12l-176.6 0c-8.6 0-16.5 4.6-20.8 12L58.6 244zM256 128c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path>
        </svg>
    }
  };
  let variant = type;
  let gotInvalidVariant = false;
  if (!asideVariants.includes(type)) {
    gotInvalidVariant = true;
    variant = "danger";
  }
  const iconVariants = ["regular", "solid", "light", "thin", "sharp-solid", "duotone", "brands"];
  if (!iconVariants.includes(iconType)) {
    iconType = "regular";
  }
  return <>
      <div className={`callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border ${asideComponents[variant].outerStyle}`} data-callout-type={asideComponents[variant].calloutType}>
        <div className="mt-0.5 w-4" data-component-part="callout-icon">
          {}
          {icon === "" ? asideComponents[variant].icon : <Icon icon={icon} iconType={iconType} size={14} />}
        </div>
        <div className={`text-sm prose min-w-0 w-full ${asideComponents[variant].innerStyle}`} data-component-part="callout-content">
          {gotInvalidVariant ? <p>
              <span className="font-bold">
                Invalid <code>type</code> passed!
              </span>
              <br />
              <span className="font-bold">Received: </span>
              {type}
              <br />
              <span className="font-bold">Expected one of: </span>
              {asideVariants.join(", ")}
            </p> : <>
              {title && <p className="font-bold">{title}</p>}
              {children}
            </>}
        </div>
      </div>
    </>;
};

<Aside>
  The official language of TON Blockchain is Tolk. Other languages are still used, and legacy codebases exist, but Tolk is the only language actively supported. The FunC compiler, for instance, is no longer maintained.
</Aside>

**FunC** is an intermediate-level language used to write smart contracts on TON. It is a domain-specific, statically typed language with C-like syntax.
Example of a FunC method for sending funds:

```func theme={null}
() send_money(slice address, int amount) impure inline {
    var msg = begin_cell()
        .store_uint(0x10, 6) ;; It sets the message to be non-bounceable.
        .store_slice(address)
        .store_coins(amount)
        .end_cell();

    send_raw_message(msg, 64);
}
```

The method receives two parameters: the [`address`](/foundations/addresses/overview) to send the money to,
and the `amount` to send. It does not return a value, indicated by [`()`](/languages/func/types#tensor-types) to the left of the method name `send_money`.

The method uses the `impure` and `inline` [specifiers](/languages/func/functions#specifiers), which are flags that tell the compiler to process
the method in specific ways.

The method first creates the [message](/foundations/messages/ordinary-tx) to send `msg` by using a [cell builder](/tvm/builders-and-slices), since the message is encoded as a [cell](/foundations/serialization/cells). The procedure is:

1. Create a new cell builder with [`begin_cell`](/languages/func/stdlib#begin-cell).
2. Set [message flags](/foundations/messages/internal) at the line with the single-line [comment](/languages/func/comments) `;; It sets the message to be non-bounceable.`.
3. Store the receiving address with [`store_slice`](/languages/func/stdlib#store-slice).
4. Store the amount to send using [`store_coins`](/languages/func/stdlib#store-coins).
5. Finalize the cell with a call to the [`end_cell`](/languages/func/stdlib#end-cell) function.

Finally, function [`send_raw_message`](/languages/func/stdlib#send-raw-message) sends the message, where the parameter `64` describes a [sending mode](/foundations/messages/internal).

## Compiler

The compiler converts FunC programs into [Fift](/languages/fift) assembler code. The Fift assembler code is then compiled down to
bitcode for the [TON Virtual Machine](/tvm/overview) using the [Fift](/languages/fift) compiler.

Developers can use the compiled bitcode, structured as a [bag of cells](/foundations/serialization/boc) like all data in the TON blockchain, to test smart contracts, send messages, or execute it in a local TVM instance.

### Compile using tooling

To compile FunC files to bitcode, install the `func-js` npm package in your project folder.
It runs in any environment with [Node.js](https://nodejs.org/en/download) v22 or later installed.

The `func-js` package integrates the FunC and [Fift](/languages/fift) compilers
to produce bitcode directly from FunC source code, without manual Fift invocation.

To install `func-js`, run the following command in your project root:

```bash theme={null}
npm i @ton-community/func-js
```

Next, run the following command to compile a specific FunC file:

```bash theme={null}
npx func-js ./contract.fc --boc ./output.boc
```

where `contract.fc` is the FunC source file in your project root, and `output.boc` is the compiled bitcode output.

<Aside>
  It’s recommended to place the FunC standard library file in your project root. Download `smartcont_lib.zip` from the [GitHub repository](https://github.com/ton-blockchain/ton/releases/tag/v2025.07), extract it, and copy `stdlib.fc` to your project root.
</Aside>

You can also use Blueprint to start a project.
See the [Blueprint](/contract-dev/blueprint/overview) section for setup instructions.

### Compile manually using the binaries

Prebuilt FunC compiler binaries for Windows, macOS (Intel or Arm64), and Ubuntu are available on [GitHub](https://github.com/ton-blockchain/ton/releases/tag/v2025.07).

**1. Download the corresponding binary for your operating system:**

* Linux: `func-linux-x86_64` (Intel/AMD) and `func-linux-arm64` (Arm64)
* Mac: `func-mac-x86-64` (Intel/AMD) and `func-mac-arm64` (Arm64)
* Windows: `func.exe`

Rename the executable, for example, to `func`, for easier use in the command line, and add it to your system’s `PATH`.

**2. Download the FunC standard library.**

Get the `smartcont_lib.zip` from the same [GitHub](https://github.com/ton-blockchain/ton/releases/tag/v2025.07), extract it, and copy `stdlib.fc` to your project root.

**3. Compile a FunC file to Fift assembler code.**

Run the following command in your project root:

```bash theme={null}
func contract.fc -o output.fif
```

where `contract.fc` is the FunC file to compile, and `output.fif` is the generated Fift output.

If you need to compile the generated Fift file  `output.fif` further down to TVM bitcode, use the Fift compiler.
See the [Fift](/languages/fift) for download and usage instructions.

<Aside>
  The last FunC compiler version is v2025.07. The FunC compiler is no longer developed. New releases are focused on the [Tolk](https://github.com/ton-blockchain/ton/releases/latest) compiler.
</Aside>

## Tutorials

<Aside>
  The tutorials in this section are provided by external contributors and may not reflect FunC's current development status. They are offered as additional resources for exploring FunC's applications.
</Aside>

* [Challenge 1: Simple NFT deploy](https://github.com/romanovichim/TONQuest1/)

* [Challenge 2: Chatbot contract](https://github.com/romanovichim/TONQuest2/)

* [Challenge 3: Jetton vending machine](https://github.com/romanovichim/TONQuest3/)

* [Challenge 4: Lottery/raffle](https://github.com/romanovichim/TONQuest4/)

* [Challenge 5: Create UI to interact with the contract in 5 minutes](https://github.com/romanovichim/TONQuest5/)

* [Challenge 6: Analyzing NFT sales on the Getgems marketplace](https://github.com/romanovichim/TONQuest6/)

* [TON hello world Part 2: guide for writing your first smart contract](https://ton-community.github.io/tutorials/02-contract/)

* [TON hello world Part 4: guide for testing your first smart contract](https://ton-community.github.io/tutorials/04-testing/)

* [10 lessons for developing contracts in FunC](https://github.com/romanovichim/TonFunClessons_Eng/) — [Russian version](https://github.com/romanovichim/TonFunClessons_ru/)

* [FunC quiz](https://t.me/toncontests/60/) — a short Telegram quiz focused on FunC, with a few general TON questions.

## Contests

You can review past competitions to learn more:

| Contest           | Tasks                                                     | Solutions                                                                                                                                                           |
| :---------------- | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| TSC #5 (Dec 2023) | [Tasks](https://github.com/ton-community/tsc5/)           | —                                                                                                                                                                   |
| TSC #4 (Sep 2023) | [Tasks](https://github.com/ton-community/tsc4/)           | [1](https://github.com/aSpite/tsc4-contracts) [2](https://github.com/ProgramCrafter/tsc4) [3](https://github.com/Gusarich/tsc4) [4](https://github.com/akifoq/tsc4) |
| TSC #3 (Dec 2022) | [Tasks](https://github.com/ton-blockchain/func-contest3/) | [Solutions](https://github.com/nns2009/TON-FunC-contest-3/)                                                                                                         |
| TSC #2 (Jul 2022) | [Tasks](https://github.com/ton-blockchain/func-contest2/) | [Solutions](https://github.com/ton-blockchain/func-contest2-solutions/)                                                                                             |
| TSC #1 (Mar 2022) | [Tasks](https://github.com/ton-blockchain/func-contest1/) | [Solutions](https://github.com/ton-blockchain/func-contest1-solutions/)                                                                                             |

## Changelog

[History of FunC](/languages/func/changelog)
