Go to file
2024-04-07 01:06:28 -06:00
components [NO TESTS] WIP 2023-05-10 22:42:17 -06:00
doc Write up where this came from 2023-03-08 10:16:31 -07:00
examples Remove unused import 2023-03-08 15:15:50 -07:00
scratch [NO TESTS] WIP 2023-03-15 00:45:32 -06:00
tools Fix the license tests 2023-05-03 23:08:18 -06:00
.bazelignore [NO TESTS] WIP 2023-03-15 00:45:32 -06:00
.bazelrc [NO TESTS] WIP 2023-03-15 00:45:32 -06:00
.bazelversion Bazel 7; bzlmod 2024-04-07 01:06:28 -06:00
.envrc [NO TESTS] WIP 2023-03-15 00:45:32 -06:00
.gitignore Bazel 7; bzlmod 2024-04-07 01:06:28 -06:00
MODULE.bazel Bazel 7; bzlmod 2024-04-07 01:06:28 -06:00
pyproject.toml [NO TESTS] WIP 2023-03-15 00:45:32 -06:00
README.md Update licensure 2023-03-08 10:55:09 -07:00


A shining mercurial metal, laden with sensors and almost infinitely reconfigurable. The stuff of which robots and servitors are made.

Flowmetal is a substrate for automation. It provides a programming environment wherein programs are durable, evented and asynchronous by default. It is aimed at scripting or coordination tasks, such as workflows and scheduled jobs.

Let's unpack these terms.

Durable - programs and their state are not dynamic and RAM located as with traditional models of processes. Instead programs and their state are always persisted to storage. This allows programs to sleep for a long time or even move seamlessly between machines.

Evented - durability is implemented in an event sourced style. Each program retails - or at least has the opportunity to retain - both a log of any external events and of its own execution. This allows for programs to easily rebuild their state, simplifies the durable programming model, and greatly simplifies debugging as intermediary states are retained and inspectable.

This also allows for external systems such as REST callback APIs, databases and such to easily integrate with Flowmetal programs as event sources. It also allows bidirectional communication between Flowmetal programs and other more traditional programming environments. Anything that can communicate with Flowmetal can provide function implementations, or call Flowmetal programs!

This centering of evented communication makes Flowmetal ideal for coordination tasks, from simple task sequencing to map/reduce and other parallelism patterns.

Asynchronous - thanks to Flowmetal's evented execution model, waiting for slow external events either synchronously or asynchronously is second nature!

Scripting - Durablity and distribution of execution come at coordination costs which make Flowmetal well suited for coordination tasks, but not for heavy processing.


Copyright © 2023 Reid D. 'arrdem' McKenzie, all rights reserved.