Skip to content

rune-rs/rune

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d589b6d Β· Mar 6, 2025
Dec 19, 2024
Apr 6, 2023
Sep 12, 2024
Nov 3, 2024
Dec 30, 2024
Mar 6, 2025
Dec 25, 2024
Dec 19, 2024
Dec 25, 2024
Jan 5, 2025
Nov 1, 2024
Oct 30, 2024
Oct 7, 2020
Dec 3, 2020
Sep 6, 2020
Apr 27, 2024
Aug 6, 2020
Aug 6, 2020
Jul 27, 2024
Jul 15, 2024

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);