The language

Quick to write. Clear when it grows.

OrviScript combines familiar block syntax, optional type annotations, explicit errors, modules, async I/O, and automatic memory management.

01 · Familiar foundations

Start without fighting the syntax.

Bindings, functions, blocks, conditions, loops, lists, maps, and structs use a compact syntax that should feel recognizable to JavaScript, TypeScript, Python, and Rust developers.

types.orvi
1let port = 30002let label: string = "production"34struct Server {5    host: string6    port: int = 227}

02 · Explicit failure

Errors remain part of the program.

Result<T, E>, Option<T>, exhaustive match, and the ? operator make failure visible without turning every line into error-handling boilerplate.

config.orvi
1fn read_config(path: string) -> Result<string, string> {2    let content = fs.read_text(path)?3    return Ok(content)4}

03 · Async without detached chaos

Concurrency stays inside a scope.

OrviScript includes async functions, futures, async filesystem, process, HTTP and timer APIs, plus scoped spawn, join, cancel, and timeout on a current-thread executor.

status.orvi
1async fn fetch_status() -> Result<string, string> {2    let response = (await http.get(url))?3    return Ok(response.body)4}

See what makes automation native.

Explore tasks