Core types

Inko provides various core types, such as String, Int, and Array.

Some of these types are value types, which means that when they are moved a copy is created and then moved.


Array is a contiguous growable array type and can store any value, as long as all values in the array are of the same type.


Inko's boolean type is Bool. Instances of Bool are created using true and false.

Bool is a value type.


ByteArray is similar to Array, except it's optimised for storing bytes. A ByteArray needs less memory compared to an Array, but can only store Int values in the range of 0 up to (and including) 255.


Channel is used for sending values between processes, and allows multiple processes to send and receive values concurrently.

Channel is a value type.


The Float class is used for IEEE 754 double-precision floating point numbers.

Float is a value type.


The Int class is used for integers. Integers are 64 bits signed integers.

Int is a value type.


Map is a hash map and can store key-value pairs of any type, as long as the keys implement the traits std.hash.Hash and std.cmp.Equal.


Nil is Inko's unit type, and used to signal the complete lack of a value. The difference with Option is that a value of type Nil can only ever be Nil, not something else. Nil is used as the default return type of methods, and in some cases can be used to explicitly ignore the result of an expression (e.g. in pattern matching bodies).

Nil is a value type.


Option is an algebraic data type/enum class used to represent an optional value. It has two variants: Some(T) and None, with None signalling the lack of a value.


Result is an algebraic data type/enum class used for error handling. It has two variants: Ok(T) and Error(E). The Ok variant signals the success of an operation, while Error signals an error occurred.


The String class is used for strings. Strings are UTF-8 encoded immutable strings. Internally strings are represented such that they can be efficiently passed to C code, at the cost of one extra byte of overhead per string.

String uses atomic reference counting when copying. This means that ten copies of a 1 GiB String only require 1 GiB of memory.

String is a value type.


Never is a type that indicates something never happens. When used as a return type, it means the method never returns. An example of this is std.process.panic(): this method panics and thus returns a Never.

You'll likely never need to use this type directly.