Skip to content
Tool for creating animations
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode Change build back to building everything May 27, 2018
anim_sqlite Invalidate the onion skin cache when performing edits with a time att… Apr 24, 2019
animation So we need to eliminate f64s from how animation coordinates are repre… Jun 13, 2019
canvas Now need flo_curves v0.3 May 11, 2019
flo Now need flo_curves v0.3 May 11, 2019
float_encoder Update version numbers of all the packages Aug 6, 2018
logging Update desync to 0.4.0 Apr 24, 2019
png Change screenshot Dec 16, 2018
src Fix tests that depend on the in-memory animation so they use the in-m… Mar 17, 2019
static_files Make the default font Lato and include it in the app bundle Jan 5, 2019
ui Switch to using the version of flo_binding that now has its own repos… Apr 26, 2019
user_interfaces Switch to using the version of flo_binding that now has its own repos… Apr 26, 2019
xcode Use the -l flag to link to the flo_cocoa library instead so we stop u… Jun 12, 2019
.eslintrc.js Add a way to register events for when a viewmodel changes Oct 15, 2017
.gitignore Add the SVGKit framework so we can display SVG images Jan 17, 2019
Cargo.lock flo_curves is much updated now, so make sure all the dependencies are… Jun 12, 2019
Cargo.toml Switch to using the version of flo_binding that now has its own repos… Apr 26, 2019
LICENSE Initial checkin of a simple rust project Sep 16, 2017 Add some website links to the readme Mar 24, 2019 Can't make work because cargo doesn't seem to have a way to … May 1, 2018 http UI needs the http feature turned on Jun 21, 2018 Seperate out the curve 'factory' and 'description' traits Aug 26, 2018



FlowBetween is a tool for creating animations. It is also a vector editor designed to provide a 'painterly' workflow, differing from most other tools in that editing is more about painting using brushes than tweaking paths.

Running FlowBetween

Building FlowBetween

If you're using OS X you can download a pre-built binary from the website.

FlowBetween has a unique architecture which makes its user interface extremely portable. In this early release, the in-browser version is easiest to play with as it will work on all operating systems. Note that to use a tablet with FlowBetween, you'll ideally need a browser that fully supports either the pointer events or the touch API. On OS X, Chrome or Firefox are your best choices. On Windows, just Firefox. Safari on iOS will work with the Apple Pencil.

To build run FlowBetween, install Rust and download this repository. Type:

cargo run --features http --release

and connect to localhost:3000 in your browser of choice. Select the paint tool to start drawing.

On Linux, you can try out the Gtk port:

cargo run --features gtk --release

or you can show off one of the more interesting features of FlowBetween's architecture by combining the gtk and http UIs into one executable:

cargo run --features gtk --features http --release

While this is a bit of a gimmick right now, it shows a couple of things: FlowBetween has an extremely portable architecture (I'm aware of no other application in existence that can run two independent UI ports side by side in the same executable). More importantly, this is intended to evolve into a feature that allows for seamless editing on the desktop and on the move (and collaborative editing of a single canvas).

Some technical stuff

FlowBetween's architecture is based around streams in the same way most other applications are based around objects. Anybody who has programmed in SmallTalk would probably recognise the idea. There's also a strong principle of separating libraries that represent a concept from those that provide a concrete implementation. To pick an important example: the flo_canvas library provides all the primitives for vector drawing but no implementation at all. flo_gtk_ui and flo_http_ui both have the ability to take a stream of these updates and actualise them using their respective user interface languages.

The flo_binding library is well worth a look while you're here. It's re-usable in any UI framework due to FlowBetween's separation principle and will be familiar to anyone who has encountered libraries like Knockout or React. It's essentially a way of changing a stream of events into a representation of a state and vice-versa, which is one of the core problems of UI design.

There are several sister projects that have moved to their own repository. desync provides asynchronous functionality, using a concept of scheduling operations on data (the reverse of the usual concept of scheduling data on threads). flo_curves provides the library of algorithms needed for FlowBetween to generate vector graphics. flo_stream adds a 'pub-sub' mechanism to Rust's futures library, which is a great way to distribute events around a user interface using streams.


Snoozing Flo

You can’t perform that action at this time.