A flow based programming language built on uxn.
Add some sprites
Fix typo causing bad lookups after id 10
Add some sprites


browse  log 



You can also use your local clone with git send-email.

#Beans lang


Beans is a flow based programming language built on the uxn virtual machine.

Beans' goal is to be a modular, explicit language that inspires play. Programs written in beans that are extremely decomposable, as the modules (called beans) are entirely independent from each other.


To install beans, first make sure uxn is installed, and it's in the path install uxn here

To assemble the main building blocks into bin/:


This assembles beanc.rom and uxnbean.rom, that are used to compile and run beans. Optionally use make save to copy them ~/roms/`.

Compile etc/hello.bpod

uxncli bin/beanc.rom etc/hello.bpod out.can

Run it

uxncli bin/uxnbean.rom out.can

#Make Shortcuts

To simplify the compilation/run steps, make provides some shortcuts to run examples in the etc folder.

make bin/snake.can runemu

This compiles etc/snake.bpod to bin/snake.can, then copies it to out.can. Then runemu triggers uxnemu ~/roms/uxnbean.rom out.can.

Similarly runcli will run the can without a window.

make bin/hello.can runcli

Note: make won't detect changes to nested dependencies now. To force a rebuild, either pass the -B flag, or include clean in the make command.

#Alias it!

For quick usage in the future in other directories, you can copy uxnbean.rom and beanc.rom to ~/roms, or use make save, then alias them in your .bashrc/.zshrc:

alias beanc='uxncli ~/roms/beanc.rom'
alias beancli='uxncli ~/roms/uxnbean.rom'
alias beanemu='uxnemu ~/roms/uxnbean.rom'

Now it's a bit easier to compile and run beans:

beanc etc/hello.bpod out.can
beancli out.can

Now you're ready to write some beans!


See the Overview Guide to get started working with the language.

See the Opcodes Reference for specifics on writing functions.

To understand the inner workings, src/rombuilder.tal is a pretty short read, this plus src/minimal-platform.tal is what's used to run precompiled roms (without the JIT compilation device).


My initial project to prove out this concept was written in javascript here: visual-cell-lang

For a walk-through of the initial ideas, checkout: Beans Genesis (May 2023)

Comparison with other frameworks: Evolution of Beans (July 2023).

Since then I've rewritten beans more formally and efficiently, without a built in visual interface. But the main concepts remain, and I hope to have a visual interface soon!