For comprehensive documentation, tutorials, and examples, visit ryelang.org
Rye is a high-level, dynamic programming language inspired by Rebol, Factor, Linux shells, and Go. It features a Go-based interpreter and interactive console, making it an excellent scripting companion for Go programs. Rye can also be embedded into Go applications as a scripting or configuration language.
Key characteristics:
- Homoiconic: Code is data, data is code
- Function-oriented: No keywords, everything is a function call
- Expression-based: Everything returns a value
- First-class functions: Functions and code blocks are values
- Multiple dialects: Specialized interpreters for different tasks
- Safety-focused: Explicit state changes, pure/impure function separation, validation dialect
Status: Alpha - Core language design is stable, focus is on improving runtime, documentation, and usability.
print "Hello World"
"Hello World" .replace "World" "Mars" |print
; prints: Hello Mars
"12 8 12 16 8 6" .load .unique .sum
; returns: 42
{ "Anne" "Joan" "Adam" } |filter { .first = "A" } |for { .print }
; prints:
; Anne
; Adam
fac: fn { x } { either x = 1 { 1 } { x * fac x - 1 } }
; function that calculates factorial
range 1 10 |map { .fac } |print\csv
; prints: 1,2,6,24,120,720,5040,40320,362880,3628800
kind: "admin"
open sqlite://data.db |query { select * from user where kind = ?kind }
; returns: Table of admins
read %name.txt |fix { "Anonymous" } |post* https://example.com/postname 'text
; makes HTTP post of the name read from a file, or "Anonymous" if file failed to be read
For more examples and interactive demos, visit ryelang.org/meet_rye/
- Install Go 1.21.5 or later:
# Example for Linux wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin go version
-
Clone the repository:
git clone https://github.com/refaktor/rye.git cd rye
-
Build options:
-
Minimal build (fewer modules, smaller binary):
go build -tags "b_tiny" -o bin/rye
-
Standard build (most modules included):
go build -o bin/rye # or simply ./build
-
Custom build (select specific modules):
go build -tags "b_tiny,b_sqlite,b_http,b_json" -o bin/rye
-
-
Run Rye:
# Run the REPL bin/rye # Run a script bin/rye script.rye
Rye can run in browsers and other WASM environments:
GOOS=js GOARCH=wasm go build -tags "b_tiny" -o wasm/rye.wasm main_wasm.go
# or use the helper script
./buildwasm
# Then visit http://localhost:8085/ryeshell/
cd info
../bin/rye . test
# Generate function reference
../bin/rye . doc
If you prefer not to build from source, you have several options:
Pre-compiled binaries for Linux, macOS, Windows, and WASM are available under Releases.
- Homebrew (macOS/Linux):
brew install ryelang
-
Binary image (includes Rye and Emacs-nox):
docker run -ti ghcr.io/refaktor/rye
-
Development image (build from repository):
docker build -t refaktor/rye -f .docker/Dockerfile . docker run -ti refaktor/rye
- ryelang.org - Official documentation, tutorials, and examples
- Blog - Latest updates and development news
- Examples folder - Code examples and demos
- Asciinema demos - Interactive terminal demos
- Rye-fyne - GUI toolkit binding
- Rye-gio - Gioui toolkit binding (WIP)
- Rye-ebitengine - 2D game engine binding (WIP)
- ryegen - Binding generation toolkit (WIP)
- VS Code: Search for "ryelang" in the Extension marketplace
- Emacs: Syntax highlighting available soon
- GitHub Discussions
- Issues
- Email: janko.itm+rye[at]gmail.com
- Twitter: @refaktor