> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ton.org/llms.txt
> Use this file to discover all available pages before exploring further.

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.ton.org/feedback

```json
{
  "path": "/tolk/types/list-of-types",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Type system overview

Tolk has the following types:

* [numbers](/languages/tolk/types/numbers) — `int`, `int32`, `uint64`, `coins`, and others.
* [boolean](/languages/tolk/types/booleans) — `true` and `false`.
* [address](/languages/tolk/types/address) — `internal`, `external`, and `none`.
* [cells](/languages/tolk/types/cells) — containers with up to 1023 bits of data and up to 4 references to other cells, plus the cell manipulation primitives of TVM: [builders and slices](/tvm/builders-and-slices).
* [structures](/languages/tolk/types/structures) — multiple fields grouped into one entity.
* [generics](/languages/tolk/types/generics) — any struct can be generic `<T>`.
* [enums](/languages/tolk/types/enums) — distinct types containing integer variants.
* [nullable types](/languages/tolk/types/nullable) — `null` safety and safe casts.
* [union types](/languages/tolk/types/unions) — variables holding one of several possible values.
* [strings](/languages/tolk/types/strings) — string values stored as snake-encoded cells.
* [tensors](/languages/tolk/types/tensors) — multiple values placed sequentially on the stack.
* [arrays](/languages/tolk/types/tuples) — dynamically sized containers backed by TVM tuples.
* [maps](/languages/tolk/types/maps) — key-value dictionaries.
* [callables](/languages/tolk/types/callables) — first-class functions.
* [unknown](/languages/tolk/types/unknown) — any value that is a single-slot TVM primitive.
* [`void` and `never`](/languages/tolk/types/void-never) — both represent the absence of a value.

To make an interchangeable alias for an existing type, including structural types, there are [type aliases](/languages/tolk/types/aliases).

Smart contracts run on a stack-based virtual machine, [TVM](/tvm/overview), which imposes specific rules on how values are represented at runtime. For example, [strings](/languages/tolk/types/strings) are stored as snake-encoded cells, because TVM has no native string support.

All on-chain data and communication rely entirely on [cells](/languages/tolk/types/cells), so the type system focuses on binary serialization and clear data relationships:

* [Type checks and casts](/languages/tolk/types/type-checks-and-casts) covers casting with the unsafe `as` operator.
* [TVM stack representation](/languages/tolk/types/overall-tvm-stack) summarizes how types map to the TVM stack.
* [Serialization](/languages/tolk/types/overall-serialization) describes how types serialize and relate to [TL-B](/languages/tl-b/overview).
