Show HN: Runal – A text-based creative coding environment for the terminal

4 months ago 7

GitHub release (latest SemVer) GitHub Workflow Status

📓 User Manual

Runal is a text-based creative coding environment for the terminal. It works similarly as processing or p5js but it does all the rendering as text. It can either be programmed with JavaScript, or used as a Go package.

Runal is a work-in-progress. It has only been tested on Linux and macOS and the API should not be considered as stable until it reaches 1.0.

Feel free to open an issue.

signls screenshot

On linux or macOS, you can run this quick-install bash script:

curl -sSL empr.cl/get/runal | bash

Download the last release for your platform.

Then:

# Extract files mkdir -p runal && tar -zxvf runal_VERSION_PLATFORM.tar.gz -C runal cd runal # Run runal ./runal # Run runal demo ./runal -demo

We recommend using Windows Terminal with a good monospace font like Iosevka to display Signls correctly on Windows.

Unzip the last windows release and, in the same directory, run:

; Run runal .\runal.exe ; Run runal demo .\runal.exe -demo

If your a developer using Go, you can use the go install command:

go install github.com/emprcl/runal@latest

You'll need go 1.23 minimum. Although you should be able to build it for either linux, macOS or Windows, it has only been tested on linux.

# Linux make GOLANG_OS=linux build # macOS make GOLANG_OS=darwin build # Windows make GOLANG_OS=windows build # Raspberry Pi OS make GOLANG_OS=linux GOLANG_ARCH=arm64 build

You can use JavaScript for scripting your sketch. Your js file should contain a setup and a draw method. Both methods take a single argument (here c) representing a canvas object that holds all the available primitives:

// sketch.js function setup(c) {} function draw(c) {}

You can add an extra method onKey to catch keyboard events:

function onKey(c, key) {}

And you can then execute the file with:

The js file will be automatically reloaded when modified, no need to restart the command.

Because Runal is written in Go, you can also use it as a Go package.

// sketch.go package main import ( "context" "os" "os/signal" "github.com/emprcl/runal" ) func main() { runal.Run(context.Background(), setup, draw, nil) } func setup(c *runal.Canvas) {} func draw(c *runal.Canvas) {}

Then, simply build it:

Check the API reference. You can also check some examples in the examples directory.

Runal uses a few awesome packages:

Read Entire Article