v1.2
- Breaking change:
addressis now “internal only” (details and migration) - Rich bounces: not 256 bits, but the full body on bounce
- Cheap builder-to-slice,
StateInit, and address composition - Compilation errors significantly improved
- Anonymous functions supported
- Borrow checker and other stuff related to undefined behavior
v1.1
map<K, V>— a convenient zero-overhead wrapper over TVM dictionariesenum— group numeric constants into a distinct typeprivateandreadonlyfields in structures- Enhanced overload resolution and partial specialization
v1.0
- The magic
lazykeyword — lazy loading, partial loading, partial updating - Auto-detect and inline functions at the compiler level
- Various peephole optimizations for gas efficiency
onInternalMessageandonBouncedMessage, TVM 11 support- Custom pack/unpack serializers for custom types
v0.99
- Universal
createMessage - Universal
createExternalLogMessage - Sharding — calculate addresses “close to another contract”
v0.13
- Auto-packing to/from cells/builders/slices
- Type
address - Lateinit variables
- Defaults for parameters
v0.12
- Structures
struct A { ... } - Generics
struct<T>andtype<T> - Methods
fun Point.getX(self) - Rename stdlib functions to short methods
v0.11
- Type aliases
type NewName = <existing type> - Union types
T1 | T2 | ... - Pattern matching for types
- Operators
isand!is - Pattern matching for expressions
- Semicolon for the last statement in a block can be omitted
v0.10
- Fixed-width integers:
int32,uint64, etc. Details - Type
coinsand functionton("0.05") bytesNandbitsNtypes (backed by slices at TVM level)- Replace
"..."cpostfixes withstringCrc32("...")functions - Support
0b...number literals along with0x... - Trailing comma support
v0.9
- Nullable types
int?,cell?, etc.; null safety - Standard library (asm definitions) updated to reflect nullability
- Smart casts, like in TypeScript in Kotlin
- Operator
!(non-null assertion) - Code after
throwis treated as unreachable - The
nevertype
v0.8
- Syntax
tensorVar.0andtupleVar.0(both for reading and writing) - Allow
cell,slice, etc. to be valid identifiers (not keywords)
v0.7
- Under the hood: refactor compiler internals; AST-level semantic analysis kernel
- Under the hood: rewrite the type system to static typing
- Clear and readable error messages on type mismatch
- Generic functions
fun f<T>(...)and instantiations likef<int>(...) - The
booltype; type casting viavalue as T
v0.6
The first public release. Here are some notes about its origin:Tolk is a fork of FunC, iteratively improved
For years, FunC was the primary language for TON. It gave complete control over the TVM — and if you mastered it, it gave you power. But its Lisp-like syntax and functional style made onboarding difficult for many. Initially, the plan was to improve FunC itself. The goal was simple: to make it more familiar to developers coming from TypeScript, Rust, or Go — without losing any efficiency. In 2024, a pull request FunC v0.5.0 was submitted — along with a roadmap for further improvements. But instead of merging it, the decision was made: to fork. To leave FunC untouched. As it is. As it always was. And to create a new language under a completely new name. At the TON Gateway in November 2024, Tolk was first announced to the public. The video is available on YouTube. The first released version of Tolk was v0.6 — a metaphor for the FunC v0.5 that could have been but never was.Comparison can be found here: Tolk vs FunC.