Async calls and workflow rules live in application code.
1async function release() {2 const output = await build()3 await test(output)4 if (!existsSync(output)) {5 throw new Error("artifact missing")6 }7}
Familiar like JavaScript and Python. Explicit where it matters like Rust. OrviScript gives scripts, tools, and task workflows one readable language.
build.orvi1task 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}
orviscript task run buildA language, not a collection of scripts
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.
Async calls and workflow rules live in application code.
1async function release() {2 const output = await build()3 await test(output)4 if (!existsSync(output)) {5 throw new Error("artifact missing")6 }7}
Task dependencies and results are part of the language.
1task release -> Result<void, string> {2 needs: [build, test]3 let output = task.result("build")?4 if !fs.exists(output) {5 return Err("artifact missing")6 }7 return Ok()8}
Simple by default
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.
Blocks and expressions feel natural to JavaScript and Python developers.
Keep a binding dynamic, or enforce int, string, structs, interfaces, Option, and Result.
defer and using run predictable LIFO cleanup on return, errors, and ? propagation.
Automation is a language feature
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.
Measured with OrviScript 0.6.2
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 roadmapA complete development loop
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$ orviscript check✓ 8 modules checked$ orviscript test✓ 12 passed · 0 failed$ orviscript task run release✓ build → test → releaseWhere it is going
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.
OrviScript is open source, runnable, and still early enough to shape.