A programming language for real-world automation.

Familiar like JavaScript and Python. Explicit where it matters like Rust. OrviScript gives scripts, tools, and task workflows one readable language.

Runnable automationbuild.orvi
build.orvi
1task build -> Result<string, string> {2    let output = path.join([context.project_dir, "dist/app"])3    fs.create_dir_all("dist")?4    fs.write_text(output, "built by OrviScript")?5    return Ok(output)6}
SyntaxFamiliar by design
AutomationTasks built in
RuntimeWritten in Rust
orviscript task run build

A language, not a collection of scripts

Write the idea.
Keep the control.

Start with a ten-line script. Add types when the program grows. Turn repeated commands into named tasks with dependencies, without switching to a separate build system or configuration language.

Compare with
01
JavaScript

Async calls and workflow rules live in application code.

release.js
1async function release() {2  const output = await build()3  await test(output)4  if (!existsSync(output)) {5    throw new Error("artifact missing")6  }7}
Same goalLess orchestration code. An explicit task flow.
One languageOne runtimeOne task model

Simple by default

Readable on day one. Safer when it matters.

Use dynamic values for quick work or add type annotations to protect stable interfaces. Operational failures use Result<T, E> and the ? operator, so errors stay visible instead of disappearing inside shell exit codes or unexpected exceptions.

See the language model

Familiar syntax

Blocks and expressions feel natural to JavaScript and Python developers.

Types when useful

Keep a binding dynamic, or enforce int, string, structs, interfaces, Option, and Result.

Cleanup you can see

defer and using run predictable LIFO cleanup on return, errors, and ? propagation.

Automation is a language feature

Tasks know what depends on what.

Declare a build, test, deploy, or maintenance task in the same file as the code it coordinates. OrviScript validates the dependency graph, stops dependent work after failure, and makes task results explicit.

01buildcreates artifact
02testchecks result
03releaseruns after both succeed

Measured with OrviScript 0.6.2

One million iterations, near Node.js time.

OrviScript completed the workload in 115.9 ms. On the same Ryzen 9 9950X3D machine, Node.js measured 102.3 ms and Python 384.8 ms across 30 runs.

Read the method and roadmap
115.9 msOrviScript 0.6.2 · one million iterations
1.13×Node.js advantage over OrviScript
3.32×OrviScript advantage over Python

A complete development loop

The editor and runtime speak the same language.

The CLI, formatter, semantic analysis, language server, and interpreter share the Rust parser. The current release includes cross-file diagnostics, completion, hover, definitions, references, rename, formatting, and a VS Code extension.

See the current tooling
Terminal
$ orviscript check✓ 8 modules checked$ orviscript test✓ 12 passed · 0 failed$ orviscript task run release✓ build → test → release

Where it is going

From readable source to portable software.

Today, OrviScript runs through an interpreter. Standalone executable bundling, a bytecode VM, and experimental native AOT compilation are future, separate execution paths. The interpreter remains first-class.

InterpreteravailableStandalone bundleplannedBytecode VMplannedNative AOTexperimental direction

Start with a script. Keep the language as it grows.

OrviScript is open source, runnable, and still early enough to shape.