Skip to main content

Introduction to JARU

JARUDynamicIoTESP32Beta
Project Status

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.

JARU Hero

Productivity

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.

semicolon.aru
print("Hello"); print("world");
println("!")

Comments

  • Single line: // ...
  • Multiple lines: /* ... */
comments.aru
// 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.

ValidInvalidReason
person_name1numberCannot start with a number
_pricemy identifierSpaces not allowed
myClassclassReserved word
VAR_1#valueNon-alphanumeric symbol

Hello World! (and more)

hello.aru
print("Hello World!");

// print doesn't add a newline; println does
print("Hello"); print(", ");
println("World");

  • print() does not add a newline.
  • println() does add a newline.
print-vs-println.aru
print("Hello"); print(", "); println("World");

Was this page helpful? Continue with Data Types and Variables and Constants.