Tact v1.6.12 is released! This is another joint release: both v1.6.11… — Tact Kitchen — TG.ME

🎉 Tact v1.6.12 is released!

This is another joint release: both v1.6.11 and v1.6.12 were published consecutively. The former focused on fixing bugs and implementing performance optimizations, while the latter introduced new quality-of-life features, such as support for toCell() and toSlice() methods on contract types, as well as improvements in trait-based inheritance attributes.

By using the v1.6.12, you get the benefits of both at once. However, before we begin unpacking both, we'd like to give a big shout-out to our new community contributors: hazyone and lordivash. Major kudos to hazyone for opening seven valuable pull requests, listening to the feedback from the Tact team and working on PRs until completion!

Now, let's get back to the release notes.

⛽️ Gas optimizations

Version 1.6.12 marks a new optimization victory of Tact over FunC. Based on the public benchmarks, Tact's _port_ of Jetton contracts consumes 2515 fewer gas units for transfer, 912 fewer for burn, and 437 fewer gas units for discovery compared to the reference FunC code.

These are our best numbers to date, but we don't intent to stop — apart from improving the compiler and the benchmarks, we also tend to our idiomatic Tact implementation of Jettons and other standard contracts.

The latest achievements of v1.6.11 and v1.6.12 were possible in part to those optimizations:

• Compiler now generates more efficient code for Slice serialization and if-throw patterns with throwIf() and throwUnless() function calls
• Deserialization of messages and optional addresses was improved
• Gas consumption of equality comparisons of optionals was reduced

🛠 Bug fixes

Most of bugs were found and squished in v1.6.11. That said, here are most notable ones from both releases:

• Now, if two require() calls generate the same error code, there is a clear and informative error message
• Self-inheritance of traits and contracts was disallowed, and the need in explicit overrides of abstract methods and constants in traits was removed
• Arguments of the == and != operators now are evaluated in the left-to-right order
• Special characters in comment receivers are now better escaped
• No-op instructions are no longer added for dump() and dumpStack() when the debug mode is off
• Map size is now correctly counted for the bounced messages, and equivalent as-annotations of map types are now accepted — for example, Int is identical to Int as int257, Int as varuint16 is identical to Int as coins, etc.
• Issues with trait return types were resolved
• The special type constructor bounced<M> is now allowed as a return type of assembly functions

For the full list, read the release notes of v1.6.11.

🧰 Standard library additions and changes

In Tact, contracts themselves can be represented as struct types by their persistent state variables. You might've seen the following pattern used to obtain the complete contract's state in a single getter:

get fun state(): ContractName {
return self; // all the contract's variables at once
}


Now, you can also call toCell() and toSlice() methods on the contract types! If a contract doesn’t use parameters, the resulting Cell or Slice will contain a leading one bit representing the lazy initialization bit of the init() function.

🧳 Miscellaneous improvements

• The functions page in the docs got a complete overhaul. Go check it out, your time starts now.

• Described safety-related tact.config.json options on gas and security best practice pages.

Tact language server and VSCode extensions got a lot of performance updates and feature enhancements.

📜 See the full release notes for Tact v1.6.11 and v1.6.12
📥 And upgrade Tact in your projects

You may have noticed the update of Tact's branding — it started with the renewed logo and banner of the X/Twitter account, then continued through our GitHub, Telegram chat, and documentation. How do you find it? Tell us in the comments below.

🍲 tact labubu wen
♨️ @tact_kitchen from the @ton_studio
⚡11
May 28, 2025 775 3