Public Types#

These are all the types that you can interact with using the data API. Parts of the C API that are relevant to each type are included for convenience. Please reference the Data API docs for more details. For information on using the Data API from Lua, refer to Lua Data Object Functions.


The value of a boolean type can be either True or False.

void inkd_bool(inkd, ink_ident field, bool value);
bool inkd_get_bool(inkd, ink_ident field);


All text in uiink is encoded in UTF-8. The Text type is sometimes referred to as a string.

void inkd_string(inkd, ink_ident field, ink_str value);
void inkd_charp(inkd, ink_ident field, const char* value);
ink_str inkd_get_string(inkd, ink_ident field);

void ink_str_hold(ink_str s);
void ink_str_release(ink_str s);
void ink_str_assign_hold(ink_str* holder, ink_str s);
const char* ink_str_char(ink_str s);
size_t ink_str_len(ink_str s);
ink_str ink_str_from_borrow(const char* source, size_t len);
ink_str ink_str_from_copy(const char* source, size_t len);
ink_str ink_str_new(size_t len, char** fill);
ink_str ink_str_empty(void);
bool ink_str_equals(ink_str a, ink_str b);

See the Data API docs on ink_str for more information on how to work with text strings.


Color values are stored as RGBA in a 32 bit unsigned integer. Red is the most significant byte and Alpha is the least significant byte. So for example, the value 0x00FF00FF is the color blue at full opacity.

void inkd_color(inkd, ink_ident field, uint32_t value);
uint32_t inkd_get_dimension(inkd, ink_ident field);


An approximation of a real number. In uiink, Numbers are implemented using single-precision floating points.


Due to how CPUs handle floating point numbers, comparing for equality can be tricky and may have very surprising results. For example, 0.6/0.2-3==0 will on most computers evaluate to False. The Number Math Node does properly handle this issue, but any equal comparisons you make in a Lua Node will not.

void inkd_float(inkd, ink_ident field, float value);
float inkd_get_float(inkd, ink_ident field);


A number without a fractional component.

void inkd_int(inkd, ink_ident field, int value);
int inkd_get_int(inkd, ink_ident field);


void inkd_image(inkd, ink_ident field, struct ink_image* value);
struct ink_image* inkd_get_image(inkd, ink_ident field);


Identifiers, or ink_ident, are most commonly used in the Data API to refer to names used in Quill. For example the name of a Global Source Node and its fields. Refer to the Identifiers Documentation for more details.

void inkd_ident(inkd, ink_ident field, ink_ident value);
ink_ident inkd_get_ident(inkd, ink_ident field);


void inkd_impulse(inkd, ink_ident field);


void inkd_trigger(inkd, ink_ident field);

Will fire a trigger that flows left to right in the node system.


A list is zero or more entries, with each entry containing a set of data. Refer to the Data API docs for details on how to manipulate list data.

inkd inkd_append(inkd, ink_ident field);
void inkd_remove(inkd);
inkd inkd_get_parent(inkd);
int  inkd_get_index(inkd);
void inkd_move(inkd, int new_index);
void inkd_clear(inkd, ink_ident field);
void inkd_clear_all(inkd);
void inkd_variant(inkd, ink_ident variant);

Private Types#

These types will only be found in quill and can not be read or written in a source node.


Dimension types consist of two components, a number and a unit. The can be constructed using the Number Dimension and Integer Dimension nodes.

View Reference#

Used to reference a view.