Global Variables
Global variables are declared at top-level. They may be private (no pub) or public (pub). Use var for mutable globals, const for immutable globals, and extern to declare symbols provided externally (no initializer).
// public globals
pub var NAME: OptionalType = Value;
pub const NAME: OptionalType = Value;
pub extern NAME: Type; // public external symbol (no initializer)
// private globals
var NAME: OptionalType = Value;
const NAME: OptionalType = Value;
extern NAME: Type; // private external symbol (no initializer)
- var: mutable global (initializer optional; zero-initialized if omitted).
- const: immutable global (must be initialized at declaration).
- extern: declares a symbol provided by the runtime/linker.
Examples:
const MY_VAL = 10; // private immutable global
pub var MY_VAR = 10; // public mutable global
var COUNTER: int; // private mutable global, zero-initialized
pub const MAX: int = 100; // explicit type
pub const VERSION: char* = "1.0";
pub extern stdin: void*; // public external symbol
extern errno: int; // private external symbol
Reassignment rules:
pub const PI = 3.14159;
PI = 3.14; // ❌ cannot assign to const variable
pub var CONFIG = 0;
CONFIG = 1; // ✅ allowed
Local Variables
Local variables inside functions are declared using var or const.
var name: OptionalType = Value;
const name: OptionalType = Value;
Examples:
fn main() {
var a = 10; // mutable
const b = 20; // immutable
var c: int; // zero-initialized; defaults to 0
}
Zero Initialization
Variables (both globals and locals) declared without an initializer are automatically zero-initialized:
var x: int;
var y: float64;
printf("%d\n", x); // prints 0
printf("%f\n", y); // prints 0.0

