Skip to content

The Dependency Graph โ€‹

Every notebook is a directed acyclic graph of cells: the engine reads which variables each cell reads and writes, and draws an edge wherever one cell consumes another's value. That graph is what makes the notebook reactive โ€” change a value and only the downstream cells restale.

This page is about seeing and shaping that graph: the DAG pane, manual edges for effects no variable carries, and running part of a notebook on another kernel (regions).

The DAG pane โ€‹

Open the pane with the ๐Ÿ•ธ DAG button in the top bar, or โŒ˜โ‡งG. It's a live map of the notebook's dataflow โ€” one node per cell, an edge wherever a cell reads a value another cell writes โ€” laid out automatically and updated as you edit and run.

  • Node color mirrors each cell's state โ€” fresh / stale / running / errored โ€” so a wave of gold shows exactly what a change restaled.

  • โš™ display โ€” show setup cells (using/import and their edges) and show isolated cells (cells with no dataflow edges) are off by default, keeping the graph to the cells that actually pass data.

  • โ‡… direction โ€” layout orientation; auto follows the pane shape (a tall pane lays out top-down).

  • โ—จ dock and the grip re-side and resize the pane.

  • ๐Ÿ”ฅ heat map โ€” color cells by accumulated compute time (hotter = more expensive), to find the bottleneck in a pipeline.

  • ๐Ÿ–ง region map โ€” color cells by where they run (see Regions).

Manual edges โ€‹

The engine infers edges from the variables a cell reads and writes. Some dependencies aren't carried by any variable, though โ€” a cell that writes a file, seeds a database table, or mutates global state that a later cell reads back. Assert those yourself so the engine keeps the two in order:

  • needs=id1,id2 header tag โ€” set it with the ๐Ÿท tag editor or directly in the cell header. It names the earlier code cells this one depends on.

  • ๐Ÿ”— link mode in the DAG pane โ€” click it, then click two cells to draw a manual edge (shown dashed); click a dashed edge to remove it.

Manual edges are first-class: they drive staleness, run order, and cache keys exactly like inferred ones. A needs= that names no earlier code cell (deleted, moved below, or a markdown cell) is inert and flagged with a ๐Ÿ”—โš  badge on the cell.

Regions โ€” run cells on another kernel โ€‹

When a notebook is split into regions, some cells run on a second kernel (usually on another host) while the rest stay local. The DAG pane is where you see and steer that split; the region model itself โ€” defining regions, declaring destinations, how boundary values cross โ€” is in Regions.

Steering regions from the DAG โ€‹

Turn on the ๐Ÿ–ง region map and the graph reorganizes into side-by-side zones โ€” ๐Ÿ’ป local and one per region โ€” with each node tinted by where it runs and the cross-zone edges drawn as the boundary hand-offs (labeled by transport: direct / ssh-bridge / relay). Drag a node between zones to reassign it. A node wears a ๐Ÿ–ง badge when its last run executed on a region kernel, and the legend along the bottom names the hosts and hosts the region toolbar.

Click any node for its detail card. For a cell whose last run was remote it shows the provenance: a last ran ๐Ÿ–ง host chip, a moved โ‡„ N MB chip for the inputs that had to cross the boundary, a per-transfer breakdown (size ยท route ยท throughput), and a Run on picker to reassign the cell to a different kernel in place.

Each region zone header carries a live status dot โ€” hover it for the region's worker card: connection status, host, transport, and CPU / RSS / running-cell telemetry, with ๐Ÿชต Log and โœ• Reap actions.

The region toolbar โ€‹

The region-map legend hosts three tools for the cross-region plumbing.

โ‡„ peer routing plan โ€” how each region pair is wired: a resolved direct or ssh-bridge route worker-to-worker, or a relay through the hub, with per-host grants and host-key pins. โ†ป recalculate probes every pair live so throughput and route are measured now rather than on the next real transfer.

๐Ÿ“Š transfers โ€” a dashboard of every boundary move: total moved, throughput over time, a region-to-region grid, and the rate distribution โ€” to see where the data actually flows and how fast.

โ‡„ connect โ€” the first time two regions on different hosts need a direct worker-to-worker link, Slate asks before exchanging keys (decline and transfers still work โ€” they just relay through the hub). The dialog spells out exactly what it installs โ€” an on-host ed25519 key, a locked-down single-port grant, a host-key pin โ€” then arms the bridge with live progress.

While a value crosses the boundary, the consuming cell shows a live progress bar (โ‡„ <name>: N/M MB โ† host) โ€” driven on its own data channel, so a big move never looks like a hang.

See also โ€‹

  • Reactive Cells โ€” the reactive model the graph drives, and the ๐Ÿ”— upstream focus.

  • Regions โ€” running part of a notebook on a second kernel, steered from the DAG.

  • Remotes & Pools โ€” hosts, transports, and warm pools.

  • Cell Tags & Caching โ€” the needs= and region= tags in the header.