Introduction to JARU
JARU is in beta version. This means that:
- The language is functional and usable for creating real programs
- Undetected bugs may exist
- The API may change between minor versions without prior notice
- Some features may be incomplete or behave unexpectedly
- The documentation may not reflect the current state of the code
Check the changelog before updating and report any issues you find.
JARU is a dynamically typed programming language designed to provide full control over the stack: the language itself, the virtual machine, and the surrounding tooling.
It runs on its own compact and efficient VM, built to be predictable, extensible, and easy to integrate, both on desktop systems and on resource-constrained environments such as ESP32 microcontrollers or RISC-V (SiFive) architectures.
JARU prioritizes a clear and readable syntax, with explicit structures and no unnecessary dependencies, making code easier to read, maintain, and debug—even in complex systems.
More than a standalone language, JARU is designed as the foundation of a complete ecosystem, where the runtime, debugger, and IDE share a common vision, enabling a level of control and coherence that is difficult to achieve with traditional general-purpose languages.

The VM includes a garbage collector and standard libraries to accelerate development: Math, String, Display, System, GPIO, WiFi, MQTT, etc.
Main Features
- Dynamic types — no need to declare the type before assigning a value.
- Clean syntax — less noise, more intention.
- Built-in GC — automatic memory management.
- Cross-platform — develop on Windows and deploy to ESP32/RISC‑V.
- Standard library for IoT — ready-to-use modules for common hardware.
Semicolon (;)
The semicolon at the end of a statement is optional. Use it to separate statements when writing multiple on the same line.
print("Hello"); print("world");
println("!")
Comments
- Single line:
// ... - Multiple lines:
/* ... */
// This is a single-line comment
/*
This is a
multi-line comment
*/
Indentation
Use spaces or tabs (choose one and be consistent). Recommended: 2 spaces.
Identifiers
Identifiers name variables, functions, classes, objects, properties, and methods.
They must start with a letter or _, and not be reserved words. JARU is case-sensitive.
| Valid | Invalid | Reason |
|---|---|---|
person_name | 1number | Cannot start with a number |
_price | my identifier | Spaces not allowed |
myClass | class | Reserved word |
VAR_1 | #value | Non-alphanumeric symbol |
Hello World! (and more)
- Hello World
- IoT Control
- Classes
print("Hello World!");
// print doesn't add a newline; println does
print("Hello"); print(", ");
println("World");
use GPIO, Math
// Configure built-in LED
GPIO.pin(2, GPIO.OUTPUT)
// Blink LED based on signal strength
while (true)
var delay = Math.map(signal, -90, -30, 100, 1000)
GPIO.write(HIGH); pause(delay)
GPIO.write(LOW); pause(delay)
end
use GPIO
class Sensor
def init(pin, tipo)
this.pin = pin
this.tipo = tipo
end
def leer()
return GPIO.aread(this.pin)
end
def calibrar(offset)
return this.leer() + offset
end
end
var temp = Sensor(34, "temperatura")
println("Lectura: " , temp.calibrar(2.5))
print vs println
print()does not add a newline.println()does add a newline.
print("Hello"); print(", "); println("World");
Was this page helpful? Continue with Data Types and Variables and Constants.