Skip to main content

Getting Started

Set up the Ora development environment and run the current compiler.

Ora Asuka v0.1 is the first release. Syntax and features may still change as the language evolves.

Prerequisites

  • Zig 0.15.x
  • CMake
  • Git
  • Z3
  • MLIR

Installation

# Clone the repository
git clone https://github.com/oralang/Ora.git
cd Ora

# Run the setup helper
./setup.sh

# Build the compiler
zig build

# Run tests
zig build test

Verify the install

# View CLI help
./zig-out/bin/ora --help

# Compile an example contract
./zig-out/bin/ora ora-example/smoke.ora

# Format Ora source code
./zig-out/bin/ora fmt contract.ora

# Emit Ora MLIR
./zig-out/bin/ora --emit-mlir ora-example/smoke.ora

Start a new project

# Scaffold a project in a new directory
./zig-out/bin/ora init my-project
cd my-project

This generates an ora.toml, contracts/main.ora, and a README.md. You can also run ora init in an existing empty directory or ora init . for the current directory.

Try your first contract

contract SimpleStorage {
storage var value: u256;

pub fn set(new_value: u256) {
value = new_value;
}

pub fn get() -> u256 {
return value;
}
}

Build it:

./zig-out/bin/ora build contracts/main.ora

Formatting

# Format a file in-place
./zig-out/bin/ora fmt simple_test.ora

# Check if code is formatted (useful for CI)
./zig-out/bin/ora fmt --check simple_test.ora

# Show diff of formatting changes
./zig-out/bin/ora fmt --diff simple_test.ora

# Output formatted code to stdout
./zig-out/bin/ora fmt --stdout simple_test.ora

See Code Formatter for details.

Multi-file projects

Ora supports namespace-qualified imports for splitting code across files:

comptime const math = @import("./math.ora");

contract Calculator {
pub fn run() -> u256 {
return math.add(40, 2);
}
}

See Imports and Modules for the full import system, including package imports, ora.toml configuration, and resolution rules.

Debugging

Ora includes a source-level EVM debugger. Step through Ora statements, inspect bindings and machine state, and see the lowered SIR side-by-side:

./zig-out/bin/ora debug contracts/main.ora \
--signature 'set(u256)' \
--arg 42

Use s to step in, n to step over, :print value to inspect bindings, and :break 12 to set breakpoints. See Interactive Debugger for the full guide.

Exploring the repo

  • ora-example/ contains runnable samples.
  • examples/imports_simple/ contains multi-file import examples.
  • tests/fixtures/ contains parser and semantics fixtures.
  • GRAMMAR.bnf and GRAMMAR.ebnf describe the current grammar.
  • Sensei-IR (SIR) describes the backend IR.

Status

  • Examples in ora-example/ are aligned with the current compiler behavior.
  • Asuka v0.1 is the first release. Breaking changes are still possible.