#vm #scripting-language

no-std rune

The Rune Language, an embeddable dynamic programming language for Rust

46 releases

0.14.1 Sep 14, 2025
0.14.0 Apr 19, 2025
0.13.4 Jul 23, 2024
0.13.2 Mar 7, 2024
0.0.0 Jul 12, 2018

#22 in Programming languages

Download history 731/week @ 2025-09-26 369/week @ 2025-10-03 579/week @ 2025-10-10 991/week @ 2025-10-17 1073/week @ 2025-10-24 1083/week @ 2025-10-31 717/week @ 2025-11-07 468/week @ 2025-11-14 642/week @ 2025-11-21 1029/week @ 2025-11-28 473/week @ 2025-12-05 531/week @ 2025-12-12 557/week @ 2025-12-19 457/week @ 2025-12-26 791/week @ 2026-01-02 521/week @ 2026-01-09

2,415 downloads per month
Used in 24 crates

MIT/Apache

5.5MB
117K SLoC

Contains (WOFF font, 1.5MB) NanumBarunGothic-Regular.woff2, (WOFF font, 135KB) FiraSans-Medium.woff2, (WOFF font, 130KB) FiraSans-Regular.woff2, (WOFF font, 75KB) SourceCodePro-Regular.woff2, (WOFF font, 75KB) SourceCodePro-Semibold.woff2, (WOFF font, 82KB) SourceSerif4-Bold.woff2 and 2 more.

rune logo
Visit the site 🌐Read the book 📖

rune

github crates.io docs.rs build status chat on discord

The Rune Language, an embeddable dynamic programming language for Rust.


Contributing

If you want to help out, please have a look at Open Issues.


Highlights of Rune


Rune scripts

You can run Rune programs with the bundled CLI:

cargo run --bin rune -- run scripts/hello_world.rn

If you want to see detailed diagnostics of your program while it's running, you can use:

cargo run --bin rune -- run scripts/hello_world.rn --dump --trace

See --help for more information.


Running scripts from Rust

You can find more examples in the examples folder.

The following is a complete example, including rich diagnostics using termcolor. It can be made much simpler if this is not needed.

use rune::{Context, Diagnostics, Source, Sources, Vm};
use rune::termcolor::{ColorChoice, StandardStream};
use std::sync::Arc;

let context = Context::with_default_modules()?;
let runtime = Arc::new(context.runtime()?);

let mut sources = Sources::new();
sources.insert(Source::memory("pub fn add(a, b) { a + b }")?);

let mut diagnostics = Diagnostics::new();

let result = rune::prepare(&mut sources)
    .with_context(&context)
    .with_diagnostics(&mut diagnostics)
    .build();

if !diagnostics.is_empty() {
    let mut writer = StandardStream::stderr(ColorChoice::Always);
    diagnostics.emit(&mut writer, &sources)?;
}

let unit = result?;
let mut vm = Vm::new(runtime, Arc::new(unit));

let output = vm.call(["add"], (10i64, 20i64))?;
let output: i64 = rune::from_value(output)?;

println!("{}", output);

Dependencies

~5–23MB
~272K SLoC