Introduction

Flow

Flow is a unique programming language based on the dataflow paradigm.

It draws inspiration from Vue.js's reactivity system (opens in a new tab), Kotlin Flow (opens in a new tab), as well as Haskell's monads and arrows, HDL languages like Verilog (opens in a new tab), Nintendo Switch's Game Programming for Beginners (opens in a new tab), and the game Factorio (opens in a new tab).
Flow extracts the common concept of "flow" seen in these systems and represents it in a simple form.

Examples

Flow's program syntax is simple. Here are some examples to get a feel for Flow:

> 1 + 2 -> output
3
3
3.
> @a'0 -> trace -> + 1 -> @a
0
1
2
3.
> if (blink == 0) (then:-> 2 ->) (else:-> 3 ->) merge -> output
2
3
2
3.
> copy 2 (-> * 2 ->) (-> + 1 ->) pair -> output
(4, 3).
> [1, 2, 3] -> map -> * 2 -> unmap -> output
[2, 4, 6].

Installation

Flow is developed in Haskell and distributed as a WebAssembly binary, so you can try it directly in your browser.
To try Flow in your browser, visit:

https://playflow.vercel.app (opens in a new tab)

You can also run it locally using a runtime such as wasmtime (opens in a new tab). Download the latest Flow release from GitHub Releases (opens in a new tab).

Run it like this:

$ wasmtime flow-lang.wasm