Built in Rust for developers who live in multiple runtimes.
rungives you a consistent CLI, persistent REPLs, and batteries-included examples for your favorite languages.
Run 2.0 (Experimental)
Run 2.0 adds WASI 0.2 component support for cross-language composition, instant startup, and edge deployment.
Quick Links:
See Run 2.0 Documentation below for details.
- Website and Docs
- Overview
- Quickstart
- Installation
- How it works
- Supported languages
- Command Variations - Flexible Syntax
- Command-Line Flags Reference
- When to Use --lang
- Main Function Flexibility
- Examples
- REPL
- Stdin Piping Examples
- Language-Specific Notes
- Run 2.0 - WASI Component Runtime
- License
Website and Docs
The official website and full documentation are available here:
- Website: https://run.esubalew.et/
- Docs Overview: https://run.esubalew.et/docs/overview
Use these links to explore features, language guides, and detailed examples.
Overview - Universal Multi-Language Runner
A powerful command-line tool for executing code in 25 programming languages
What is run?
run is a universal multi-language runner and smart REPL (Read-Eval-Print Loop) written in Rust. It provides a unified interface for executing code across 25 programming languages without the hassle of managing multiple compilers, interpreters, or build tools.
Whether you're a beginner learning your first programming language or an experienced polyglot developer, run streamlines your workflow by providing consistent commands and behavior across all supported languages.
Who is this for?
- Beginners: Learn programming without worrying about complex setup procedures. Just install run and start coding in any language.
- Students: Quickly test code snippets and experiment with different programming paradigms across multiple languages.
- Developers: Prototype ideas rapidly, test algorithms, and switch between languages seamlessly without context switching.
- DevOps Engineers: Write and test automation scripts in various languages from a single tool.
- Educators: Teach programming concepts across multiple languages with a consistent interface.
Why was run created?
Traditional development workflows require installing and configuring separate tools for each programming language. This creates several problems:
- Time-consuming setup: Installing compilers, interpreters, package managers, and configuring environments for each language.
- Inconsistent interfaces: Each language has different commands and flags for compilation and execution.
- Cognitive overhead: Remembering different commands and workflows for each language.
- Barrier to entry: Beginners struggle with setup before writing their first line of code.
run solves these problems by providing a single, unified interface that handles all the complexity behind the scenes. You focus on writing code, and run takes care of the rest.
Why Rust?
run is built with Rust for several compelling reasons:
- Performance: Rust's zero-cost abstractions and efficient memory management ensure run starts instantly and executes with minimal overhead.
- Reliability: Rust's strong type system and ownership model prevent common bugs like null pointer dereferences and data races, making run stable and crash-resistant.
- Cross-platform: Rust compiles to native code for Windows, macOS, and Linux, providing consistent behavior across all platforms.
- Memory safety: No garbage collector means predictable performance without unexpected pauses.
- Modern tooling: Cargo (Rust's package manager) makes building and distributing run straightforward.
- Future-proof: Rust's growing ecosystem and industry adoption ensure long-term maintainability.
Quickstart
# Show build metadata for the current binary
# Execute a snippet explicitly
# Let run detect language from the file extension
# Drop into the interactive REPL (type :help inside)
# Pipe stdin (here: JSON) into Node.js
|
# Pipe stdin into Python
|
# Pipe stdin into Go
|
Installation
All release assets are published on the GitHub Releases page, including macOS builds for both Apple Silicon (arm64) and Intel (x86_64). Pick the method that fits your platform:
Installs the
runbinary from therun-kitcrate. Updating? Runcargo install run-kit --force.
# Or build from source
This builds the run binary using your active Rust toolchain. The project targets Rust 1.70 or newer.
This formula is published as a standalone file on each release; it isn't part of the default Homebrew taps.
ARCH=
DEB_FILE=
scoop install https://github.com/Esubaalew/run/releases/latest/download/run-scoop.json
Pass --version v0.2.0, --prefix /usr/local/bin, or --repo yourname/run to customize the install.
Verify installation:
How it works
run shells out to real toolchains under the hood. Each LanguageEngine implements a small trait that knows how to:
- Detect whether the toolchain is available (e.g.
python3,go,rustc). - Prepare a temporary workspace (compilation for compiled languages, transient scripts for interpreters).
- Execute snippets, files, or stdin streams and surface stdout/stderr consistently.
- Manage session state for the interactive REPL (persistent modules, stateful scripts, or regenerated translation units).
This architecture keeps the core lightweight while making it easy to add new runtimes or swap implementations.
Supported languages
run supports 25 programming languages out of the box:
| Category | Languages & aliases | Toolchain expectations |
|---|---|---|
| Scripting & shells | Bash (bash), Python (py, python), Ruby (rb, ruby), PHP (php), Perl (perl), Groovy (groovy, grv), Lua (lua), R (r), Elixir (ex, elixir) |
Matching interpreter on PATH |
| Web & typed scripting | JavaScript (js, node), TypeScript (ts, deno), Dart (dart), Kotlin (kt, kotlin) |
node, deno, dart, kotlinc + JRE |
| Systems & compiled | C (c), C++ (cpp, cxx), Rust (rs, rust), Go (go), Swift (swift), Zig (zig), Nim (nim), Haskell (hs, haskell), Crystal (cr, crystal), C# (cs, csharp), Java (java), Julia (jl, julia) |
Respective compiler / toolchain |
Complete Language Aliases Reference
| Alias | Description | Badge |
|---|---|---|
python, py, py3, python3 |
Python programming language | |
javascript, js, node, nodejs |
JavaScript (Node.js runtime) | |
typescript, ts, ts-node, deno |
TypeScript with type checking | |
rust, rs |
Rust systems programming language | |
go, golang |
Go programming language | |
c, gcc, clang |
C programming language | |
cpp, c++, g++ |
C++ programming language | |
java |
Java programming language | |
csharp, cs, dotnet |
C# (.NET) | |
ruby, rb, irb |
Ruby programming language | |
bash, sh, shell, zsh |
Bash shell scripting | |
lua, luajit |
Lua scripting language | |
perl, pl |
Perl programming language | |
groovy, grv, groovysh |
Groovy on the JVM | |
php, php-cli |
PHP scripting language | |
haskell, hs, ghci |
Haskell functional language | |
elixir, ex, exs, iex |
Elixir functional language | |
julia, jl |
Julia scientific computing | |
dart, dartlang, flutter |
Dart language (Flutter) | |
swift, swiftlang |
Swift programming language | |
kotlin, kt, kts |
Kotlin (JVM/Native) | |
r, rscript, cran |
R statistical computing | |
crystal, cr, crystal-lang |
Crystal language | |
zig, ziglang |
Zig systems language | |
nim, nimlang |
Nim programming language |
Command Variations - Flexible Syntax
run supports multiple command formats:
# Full syntax
# Shorthand flags
# Language first, then code
# Auto-detect from file
Command-Line Flags Reference
When to Use --lang (Important!)
Always use --lang when syntax is ambiguous:
# Ambiguous - may choose wrong language
# Explicit - always correct
Main Function Flexibility
For compiled languages, run is smart about main functions:
)
) { ) }
Examples
Real programs live under the examples/ tree:
REPL
The REPL supports built-in commands:
| Command | Purpose |
|---|---|
:help |
List available meta commands |
:languages |
Show detected engines and status |
:lang <id> or :<alias> |
Switch the active language (:py, :go, …) |
:detect on/off/toggle |
Control snippet language auto-detection |
:load path/to/file |
Execute a file inside the current session |
:reset |
Clear the accumulated session state |
:exit / :quit |
Leave the REPL |
Interactive REPL - Line by Line or Paste All
)
if
) )
for)
)
Variable Persistence & Language Switching
$ run go
go>>> x := 10
go>>> x
10
go>>> :py
switched to python
python>>> y = 10
python>>> print(y)
10
Stdin Piping Examples
# Node.js (JSON Processing)
|
# Python (Uppercase)
|
# Go (Greeting)
|
Language-Specific Notes
For detailed usage and best practices for each language, visit the documentation.
Run 2.0 - WASI Component Runtime
Run 2.0 is an experimental extension that adds WASI 0.2 component support. It is opt-in and does not replace Run 1.0.
What Run 2.0 Adds
- Cross-language composition: Rust, Python, Go, JS components calling each other via WIT interfaces
- Instant startup: <10ms cold start (vs Docker's 5-10 seconds)
- Hermetic builds: Reproducible builds with toolchain lockfiles
- Edge deployment: Deploy to Cloudflare Workers, AWS Lambda, Vercel
Quick Start
# Install with v2 support
# See v2 commands
# Initialize a project
# Build and run
Run 2.0 Commands
| Command | Description |
|---|---|
run v2 init |
Initialize a new project |
run v2 build |
Build WASI components |
run v2 dev |
Development server with hot reload |
run v2 test |
Run component tests |
run v2 deploy |
Deploy to edge/registry |
run v2 install |
Install dependencies |
Configuration
run.toml defines your project:
[]
= "my-app"
= "1.0.0"
[[]]
= "api"
= "src/lib.rs"
= "rust"
= "wit/api.wit"
[]
= ["src/**/*.rs"]
= true
Resources
- Run 2.0 Examples - Working examples and templates
- Migration Guide - Migrate from Docker to Run 2.0
- Registry Server - Self-hosted component registry
License
Apache 2.0. See LICENSE for details.
Built with Rust. If run helps your workflow, star the repo and share it with other polyglot developers.