Please note:this document is a work in progress.

Concepts

Board

A board is a kind of executable program, expressed declaratively as a graph.

Nodes

A node is a step in a board that performs some action. This might be calling an external API, or executing some local computation. Nodes are similar to functions in traditional programs.

Ports

A port is a named input or output of a node. Nodes can have any number of ports. Ports can be source ports (data flows out), or destination ports (data flows in). Source ports are analogous to the parameters of a function. Destination ports are analogous to the results returned by a function.

Edges

An edge is a connection between two ports through which data flows.

Optional edges

Edges can be optional, which means that the execution of a node will not wait for data to be present before proceeding with execution.

Constant edges

Edges can be constant, which means the most recent object that flowed through the edge will remain available indefinitely, instead of being destructively consumed.

Kits

A kit is a library that provides graphs.

Slots

Boards can have slots, which is Breadboard's way of expressing inversion of control. When a board exposes a slot, it means that users of that board are expected to provide an implementation for some portion of the graph themselves.

Breadboard Graph Language (BGL)

Breadboard Graph Language (BGL) is a graph serialization format described by this JSON schema.

Runtimes

A runtime is a system that executes boards. Current runtimes include: Node and Web.

Frontends

A frontend is a system that generates boards. Current frontends include the @google-labs/breadboard API for Node, a Python library (coming soon!), and the Breadboard Visual Playground. Boards can also be written by hand directly as JSON, but using a frontend is typically easier.

Note that frontends are never coupled to a specific runtime. Boards generated by the Node API can be executed by any runtime.