Reference

Keywords

Generated from LANGUAGE.md at d971c06, 2026-10-15.

Articles (Context-Dependent)

KeywordUsage
a, anDeclares new variable with type
theReferences existing variable

Statement Starters

KeywordPurpose
PrintOutput
Set, CreateVariable declaration
If, WhenConditional
WhileLoop
ForIteration
ToFunction definition
ReturnReturn value
IncrementAdd 1 to variable
DecrementSubtract 1 from variable
BreakExit loop
ContinueSkip to next iteration
ExitTerminate program with exit code
AppendAdd element to list
FreeRelease a buffer or list's memory immediately (see Releasing a Buffer)
AllocateReserve a raw block of heap memory, freed with Free
Create, Change, Remove/DeleteDirectories, device nodes, symlinks, chdir (see Directories, Mounting, and Process Control)
Mount, Unmount/UmountMount/unmount filesystems
Pivotpivot_root - switch the root filesystem
Executeexecve - replace the process image
Shutdown/Poweroff, Reboot/Restart, Haltreboot(2) - power off/restart/halt the machine
fork, reapProcess control expressions - fork(2)/wait4(2)
Send signalkill(2) - send a signal to a process, a process group, my process group, or every process (child aliases process)
ReadRead from <file> into <buffer>. / Read line from <file> into <buffer>.
WriteWrite <value> to <file>.
Openopen a file for reading/writing/appending called <name> at <path>.
CloseClose <file>.
WaitWait <n> seconds. / Wait <n> milliseconds.
SleepSleep for <n> seconds. / Sleep for <n> milliseconds.
GetGet current time into <name>.
ClearSet a buffer's length to 0, keeping its capacity (clear <buffer>.)
CopyReplace a buffer's contents with another's bytes (copy <source> to <destination>.)
ResizeChange a buffer's capacity, preserving data up to the smaller of the two lengths (resize <buffer> to <n> bytes.)
SeekMove a file's read/write position (Seek <file> to line <n>. / Seek <file> to byte <n>.)
RepeatLoop a fixed number of times (Repeat <n> times, <statements>., see Repeat)
SeeInclude another Vox source file, or consume a shared library's .lib interface (see The see Keyword)
LibraryDeclare a shared library's name and version at the top of a .vox file (see Shared libraries)

Flag Schema

KeywordPurpose
FlagDeclare a command-line flag schema (a flag called ...)
ParseTrigger command-line flag parsing (Parse flags.)
RequiredMark a flag as required
DefaultSupply a default value for a flag

Connectors

KeywordPurpose
withFunction parameters, function arguments
called, namedVariable naming
of, to, onFunction arguments
andMultiple uses (see below)
orLogical OR
butConditional chaining
thenAfter condition
otherwise, elseAlternative branch
from, toRange bounds
betweenRange bound, inclusive of both ends (see Ranges)
inCollection/range membership (For each x in <list>) and unit casting (<timer>'s duration in seconds)
intoDestination of Read from <file> into <buffer>. and Get current time into <name>.
eachUniversal loop expansion: turns any action into a loop (<action> each <var> from <collection>, see Loop Expansion)
withoutSuppresses the trailing newline (Print <x> without newline.); also the without waiting reap suffix
asType-cast target (as a number) and substitution replacement (treating X as Y)
treatingInline value substitution (treating <match> as <replacement>, see Inline Substitution with treating)
timesLoop-count unit in Repeat <n> times, <statements>.

The and Keyword

The word and has multiple context-dependent meanings:

ContextExampleMeaning
Logical operatorif x and y thenBoolean AND of two conditions
Function parameterswith a number called x and a number called ySeparates parameter declarations
Function arguments'add' of 3 and 5Separates argument values
Subject list terminatorx, y, and z are trueFinal item in comma-separated list before are

Disambiguation:

  • When and appears after a comma and before are, it's a list terminator
  • When and appears between two conditions (no comma), it's a logical operator
  • When and follows with/of/to/on, it separates arguments

Types

The type keywords, reserved as variable names for the same reason a statement starter is (see Types for what each one holds):

KeywordPurpose
numberInteger type
intAlternate spelling of number (its alias integer is in the Reserved Aliases table below)
floatFloating-point type
textString type
booleanBoolean type
true, falseThe two boolean literal values
listCollection type (see Lists and Collections)
mapKey/value collection type (see Maps)
bufferMemory-block type for I/O (see Buffers)
fileFile descriptor handle type (see File I/O)
timeDate/time value type (see Time and Timers)
timerStopwatch type for measuring durations (see Timers)
nothingThe absent value literal (see Nothing (the absent value))

Operators

The operator keywords, fully defined in Operators:

KeywordPurpose
add, subtract, multiply, divide, moduloArithmetic operators (x add 5, see Arithmetic)
is, are, equals, greater, less, thanComparison operators (x is greater than 5, see Comparisons)
notLogical negation (see Logical Operators)
even, odd, positive, negative, zero, emptyProperty-check predicates (the x is even, see Property Checks)
bit-and, bit-or, bit-xor, bit-not, bit-shift-left, bit-shift-rightBitwise operators (see Bitwise Operators)

Reserved Aliases

A few alternate spellings are also reserved because the compiler recognizes them as aliases for canonical keywords. This table lists every alias the lexer folds onto a canonical keyword; a keyword with only one spelling is not repeated here (it is reserved too, but it is not an alias of anything):

AliasCanonical keyword
absabsolute
plusadd
pushappend
argargument
paramargument
parameterargument
argsarguments
parametersarguments
paramsarguments
boolboolean
namedcalled
closedclose
skipcontinue
definecreate
makecreate
daysday
removedelete
fddescriptor
envenvironment
equalequals
existexists
quitexit
terminateexit
nofalse
decimalfloat
realfloat
deallocatefree
releasefree
startingfrom
fetchget
retrieveget
biggergreater
largergreater
moregreater
hourshour
insidein
withinin
integerint
fewerless
smallerless
liblibrary
arraylist
collectionlist
dictionarymap
msmilliseconds
minutesminute
modmodulo
remaindermodulo
monthsmonth
nilnothing
nullnothing
numbersnumber
aton
openedopen
permspermissions
displayprint
printsprint
showprint
growresize
reallocateresize
shrinkresize
givereturn
returnsreturn
importsee
includesee
requiresee
assignset
storeset
delaysleep
minussubtract
messagetext
stringtext
stopwatchtimer
upto
treattreating
yestrue
timestampunix
unixtimeunix
varvariable
verversion
pausewait
yearsyear

These cannot be used as variable names. The diagnostic names the spelling you wrote and notes which canonical keyword it aliases, so a number called ms is ... reports 'ms' as an alternate spelling of 'milliseconds', not the internal canonical name. say and output are not in this table: the lexer never folds them, so they are ordinary variable names (BUGS_FOUND #106) - only show, display, and prints are alternate spellings of print.

Every keyword listed in the tables above is likewise reserved as a variable name. Two that are easy to hit by accident are worth calling out: the flag-schema keyword flag (a flag called ...) and the property keyword empty (x's empty). Writing a number called flag is 1. or a number called empty is 1. is rejected with the same "reserved keyword" diagnostic. (As with any reserved word, you can still quote the name ('flag', 'empty') if you genuinely need it.)

Reserved Nouns and Properties

Words reserved as the head of a built-in noun phrase, rather than as a statement starter, operator, type name, or connector:

KeywordPurpose
argumentsCommand-line arguments, accessed via 's (arguments's count, arguments's first, ...) — see Command-Line Arguments
argumentIndexed argument access (the argument at <i>) and the the argument count phrase — see Dynamic Index Access
environmentEnvironment variables, accessed via 's (environment's "HOME", environment's count, ...) — see Environment Variables
variableOptional noun in the environment variable "<NAME>" / the environment variable count
input, standardstandard input - the process's stdin (Read from standard input into <buffer>.)
byteSingle-byte access by position (byte <n> of <buffer>, Set byte <n> of <buffer> to <value>.) — see Buffer Byte Access
elapsedA running timer's elapsed duration (the '<timer>''s elapsed in seconds) — see Timer Properties
errorThe On error <action>. handler that runs after a failed operation — see Error Handling
existsPredicate on a named environment variable (the environment variable "<NAME>" exists) — see Checking if Variable Exists

File, Buffer, List, and Time Properties

Property words claimed by the 's syntax, or by their own access phrase, across buffers, files, lists, maps, numbers, and time values:

KeywordPurpose
descriptor, modified, accessed, permissions, readable, writable, fullFile properties, accessed via 's (<file>'s descriptor, <file>'s modified, ...) — see File Properties
reading, writing, appendingFile-open modes (open a file for reading/writing/appending ...) — see Opening Files
keys, valuesMap properties, each yielding a fresh list (<map>'s keys, <map>'s values) — see Maps
absolute, signNumber properties (<n>'s absolute, <n>'s sign) — see Number Properties
elementList element access by position (element <n> of <list>) — see List Element Access
bytesBuffer size unit (<n> bytes in size) and seek target (Seek <file> to bytes <n>.) — see Buffers / Seeking
current, hour, minute, day, month, year, unixCurrent time and its properties (current time, <time>'s hour, ...) — see Time and Timers
duration, runningTimer properties (<timer>'s duration, <timer>'s running) — see Timer Properties
millisecond, milliseconds, secondsDuration units (Wait <n> seconds., Sleep for <n> milliseconds.) — see Time and Timers

Two classes of special word

Not every word with a special meaning is reserved. Vox distinguishes:

  • Reserved keywords: banned as bare names everywhere, because they would be ambiguous anywhere: statement starters, operators (times, add), type names, connectors.
  • Contextual keywords: claimed only in the position where they mean something, and ordinary identifiers everywhere else: start/begin/ stop/finish for timers, send for signals, waiting in without waiting, available in is available, the things words, the property word name, and the property word count, claimed after a possessive marker and in the the argument count / the environment variable count phrases, so a number called count is 0. compiles while arguments's count keeps its meaning. The same treatment extends to the whole possessive/phrase family: capacity (also the with capacity N / of capacity N buffer phrase), raw, all (also the all the numbers from/between … range), first, last, second (also the Wait 1 second. unit: Set second to 1. Wait second seconds. compiles and waits one second), size and its synonym length (also with size N and N bytes in size), and version (the Library <name> version "…" and see <lib> version "…" headers). Each is a bare variable name everywhere except its one fixed grammatical position; arguments's first and a number called first is 0. both work in the same program.

The test for which class a word belongs in: if every position where the word means something is grammatically identifiable, it is contextual; only a word that would be ambiguous in ordinary positions is reserved.

Contextual Keywords (Things)

Three words the things feature claims only inside their construct, and treats as ordinary identifiers everywhere else: the same treatment send/begin/stop get for timers. None of them is a reserved variable name, so a number called thing is 1. and To do. (a function named do) both compile.

WordClaimed inElsewhere
thingA thing called <name> has ... (a definition)ordinary identifier
hasthe verb of a thing definitionordinary identifier
doTo do the <type>'s <member> (a member definition)ordinary identifier

A fourth, the, gains a second reading in this company: in To do the point's 'placed at' it pairs with a known identifier (the type), where a point's 'placed at' calls a maker that brings a new point into being. See the article rule.