Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>RuneNew to Visual Studio Code? Get it now.
Rune

Rune

Preview

udoprog

|
1,180 installs
| (0) | Free
Language support for Rune
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

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

  • Runs a compact representation of the language on top of an efficient stack-based virtual machine.
  • Clean Rust integration 💻.
  • Memory safe through reference counting 📖.
  • Awesome macros 📖.
  • Template literals 📖.
  • Try operators 📖.
  • Pattern matching 📖.
  • Structs and enums 📖 with associated data and functions.
  • Dynamic vectors 📖, objects 📖, and tuples 📖 with out-of-the-box serde support 💻.
  • First-class async support 📖.
  • Generators 📖.
  • Dynamic instance functions 📖.
  • Stack isolation 📖 between function calls.

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;

#[tokio::main]
async fn main() -> rune::support::Result<()> {
    let context = Context::with_default_modules()?;
    let runtime = Arc::new(context.runtime()?);

    let mut sources = Sources::new();

    sources.insert(Source::new(
        "script",
        r#"
        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);
    Ok(())
}
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft