Skip to main content


The spawn keyword has various applications in graphs, nodes, and walkers, each with its own unique context. To gain a better understanding of its usage in each of these contexts, please refer to the following sections.

Graph Spawn

In the graphs , the spawn keyword is utilized to generate or create graphs.

node product {
has name;
has stock = 0;


edge category {
has name;

# Initial graph for the shop
graph shop {
has anchor catalog;
spawn {
catalog = spawn node::product_catalog;

apple = spawn node::product(name="apple");
catalog +[category(name="fruit")]+> apple;

banana = spawn node::product(name="banana");
catalog +[category(name="fruit")]+> banana;

notebook = spawn node::product(name="notebook");
catalog +[category(name="supplies")]+> notebook;

Node Spawn

To create a child node from a parent node, the spawn keyword is used in nodes.

Here is an example of spawn keyword inside jac program.

node person: has name;
edge family;
edge friend;

walker build_example {
spawn here +[friend]+> node::person(name="Joe");
spawn here +[friend]+> node::person(name="Susan");
spawn here +[family]+> node::person(name="Matt");
spawn here +[family]+> node::person(name="Dan");

Walker Spawn

To initiate traversing a walker from a node the spawn keyword is used in walkers.

walker init {
root {
spawn here walker::build_example;

Or to initiate a graph from a root node as following;

walker init {
root: spawn here ++> graph::shop;