Repolode
mattwparas

mattwparas/steel

An embeddable and extensible Scheme dialect implemented in Rust, with a standalone REPL and bytecode VM.

Stars
2,629
Forks
143
Open issues
87
Last commit
2 days ago

What is it?

Steel is a Scheme interpreter written in Rust that can run as a standalone interpreter and REPL or be embedded inside Rust applications. The language is implemented as a bytecode virtual machine and is mostly compliant with R5RS, with R7RS support in progress.

The language includes module support using require and provide in the style of Racket, along with syntax-rules and syntax-case macros. Higher-order contracts and built-in immutable data structures such as lists, vectors, hashmaps and hashsets are also provided.

Native Rust functions and structs can be exposed to Steel code through embedding or FFI. The project also includes a package manager, a language server and a standard library, and it is still pre-1.0, so the API may change.

Key features

  • 01Mostly R5RS-compliant Scheme implemented as a bytecode virtual machine
  • 02Module system using require and provide, similar to Racket
  • 03syntax-rules and syntax-case macro support
  • 04Embedding and FFI for calling native Rust functions and structs
  • 05Higher-order contracts and built-in immutable lists, vectors, hashmaps and hashsets

Use cases

  • Adding a scripting language to a Rust application
  • Learning or experimenting with Scheme and interpreter design
  • Writing configuration or extension scripts that call into Rust code

Quick start

  1. 1

    Install Rust (required to build Steel)

  2. 2

    Clone the repository

  3. 3

    Run the REPL with cargo

    cargo run

Things to know

  • The API is pre-1.0 and may change at any time.
  • Only mostly R5RS compliant; let-syntax is missing and R7RS support is still in progress.

In collections

Topics

FAQ

What is steel?
An embeddable and extensible Scheme dialect implemented in Rust, with a standalone REPL and bytecode VM. Steel is a Scheme interpreter written in Rust that can run as a standalone interpreter and REPL or be embedded inside Rust applications. The language is implemented as a bytecode virtual machine and is mostly compliant with R5RS, with R7RS support in progress.
Is steel free to use? What license does it have?
steel is open source under the Apache-2.0 license. Check the license terms before using it in commercial products.
Is steel still maintained?
Actively maintained. The last commit to steel was on Oct 22, 2026.
What can I use steel for?
Adding a scripting language to a Rust application Learning or experimenting with Scheme and interpreter design Writing configuration or extension scripts that call into Rust code
How do I install steel?
Install Rust (required to build Steel) Clone the repository Run the REPL with cargo: cargo run
Where can I get steel?
The source code and installation instructions are on GitHub: https://github.com/mattwparas/steel

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects