Flux Balance Explorer — Docs
← Back to app

Documentation

Reference for the Yeast-GEM FBA Explorer: reading the maps, setting constraints, running solves, custom maps, gene-abundance overlays, and workspaces.

Getting started

  1. Sign in or register from the login screen. Each account has its own private workspace, model, and saved history.
  2. Use the tab bar (or the maps dropdown) to open a pathway: Central Carbon, Amino Acids, Lipid & Sterol, or Imports / Exports.
  3. Click a reaction node to open its details panel and set bounds.
  4. Press S or Enter, or click ▶ Solve, to run FBA — every open map updates together.
All maps for a given account share one live model and one set of constraint overrides. Solving on any tab, or via the drawer, refreshes the flux coloring on every open map, including split-screen and custom map panes.

Reading the maps

Each pathway map is an interactive node-link diagram: rectangular reaction nodes connected by arrows to circular metabolite nodes.

Arrows (flux edges)

VisualMeaning
Blue/white arrowIndicates flux through reaction
Grey arrowZero flux / blocked reaction
Arrow widthProportional to |flux|, capped at ~8px
Yellow outlineCurrently selected reaction or metabolite

Metabolite nodes

Larger circles with a bold white label are major metabolites (central hub compounds that anchor the layout and never move). Smaller circles with a label pill below them are minor metabolites specific to that part of the pathway.

Cofactor pills

Ubiquitous cofactors (ATP, redox carriers, small inorganic species) are rendered as small colored pills directly on the reaction node rather than as separate nodes, to keep the graph readable. Substrates stack on the left of a reaction, products on the right. Water is hidden entirely.

GroupSpecies
Energy ATP ADP AMP
Redox NAD⁺ NADH NADP⁺ NADPH FAD FADH₂
Small molecules CO₂ Pᵢ PPᵢ H⁺
CoenzymeCoA

Each map's collapsible legend (top-left, click to expand/collapse) shows this same key.

Panning, zooming & layout

Drag to pan, scroll/pinch to zoom. Node positions are cached per-browser after the first layout pass, so reopening the same map is instant on later visits. In split-screen mode, zoom and pan on one pane are mirrored to the other automatically.

Setting constraints

  1. Click a reaction arrow or node to open its details panel on the right (name, subsystem, equation, current flux, and default bounds).
  2. Enter new values in Lower bound / Upper bound.
  3. Click Apply & queue solve to stage the override, or Reset to default to remove it.
  4. Repeat for as many reactions as you like — the constraints panel in the main shell lists every active override with a one-click remove.
Constraints are shared across maps: overriding a reaction's bounds on one tab is reflected immediately in the sidebar and constraints list everywhere else, even before you solve.
Reactions with default bounds, even when restricted to one direction, are not shown in the constraints list.
Lower bound must be ≤ upper bound. A solve will return infeasible if bounds are contradictory or too tight for the model to satisfy its objective.

Solving & multi-map sync

Click ▶ Solve, or press S / Enter anywhere outside a text field, to run FBA with the current constraint set. The status pill on each map shows optimal or infeasible. All open maps — including any split-screen or custom-map panes — update their flux coloring from the same solve in one pass.

Common constraint experiments

ExperimentWhat to set
Anaerobic growthO2 exchange (r_2111): lb=0, ub=0
Carbon-limitedGlucose exchange (r_1714): lb=-1, ub=0
Ethanol productionAdd ethanol exchange (r_2100): lb=0, ub=1000
Block NADH shuttleSet the relevant shuttle reaction's bounds to 0

You can also change what the solver optimizes for via the logo menu's Change objective option, rather than only the default biomass objective.

Gene, reaction & EC knockouts

Click ⌀ Knockouts in the topbar to open the knockout panel. Type into the search box to look up genes, reactions, or EC numbers (searched in parallel, 300ms debounce) and add any result to your knockout list.

Knockout typeWhat actually happens on solve
GeneSent to the backend as a gene ID. The solver knocks out every reaction associated with that gene's GPR rule by forcing its bounds to (0, 0) — this takes priority over any explicit bound you've set on those reactions.
ReactionApplied client-side as a (0, 0) bound override on that one reaction, merged into the same constraints payload as your manual bound overrides.
EC numberExpanded client-side to every reaction annotated with that EC number, each forced to (0, 0).

Each entry in the knockout list has its own checkbox, so you can temporarily disable a knockout without losing it or re-searching. The topbar button shows a live count of active knockouts.

Gene knockouts are resolved against the reaction's gene_reaction_rule (its GPR — gene-protein-reaction boolean rule), so a gene participating in an OR rule with another isoenzyme may not fully block a reaction on its own; check the reaction panel's gene rule if a knockout doesn't produce the flux change you expect.

Run history & comparing solves

Every solve is saved automatically to your account's history (visible from the dropdown next to Solve), each entry timestamped and labelled with its objective value.

Custom maps

You don't need to edit any files to add a new pathway view. Click the + button next to the tab bar (or + Create New Map in the maps dropdown) to open the map builder, then define a custom map by:

Custom maps render with the same shared engine as the built-in maps — same legend, constraint panel, solve behaviour, and theming — and are saved to your account so they reappear on your next visit. Manage them from the dropdown next to the + button, where they can be reopened or deleted.

Custom maps are per-account and private to your workspace, not shared with other users.

Gene abundance overlay

From the logo menu, choose Load experimental data and upload a CSV with two columns — gene name/ID and an abundance value — to open a split-screen comparison: your flux solution on the left, gene abundance coloring on the right, on the same pathway layout so the two are directly comparable.

In the abundance pane, the bottom-bar button reads Hide zero flux when viewing abundance data on its own, or Close split when comparing it side-by-side against a solved model.

Workspaces & models

The logo menu (top-left, click the hex logo) provides:

OptionWhat it does
💾 Save workspaceSave a named snapshot of your current constraints, custom maps, and objective
📂 Load workspaceRestore a previously saved snapshot
🖨 Save mapExport the current map as a PNG or SVG
🧬 Load experimental dataUpload gene abundance data for the split-screen overlay
🔬 Load new modelUpload a different SBML model to explore instead of Yeast-GEM
⊕ Change objectivePick a different reaction (or combination) as the solver's objective
✎ Edit modelRename or annotate the currently loaded model
⚙ SettingsApp preferences, including theming

Themes

Settings has an Appearance toggle at the top for quickly switching between 🌙 Dark and ☀️ Light mode. Light mode applies the built-in Daylight preset; switching back to Dark restores whichever dark preset you last had active, so you don't lose your preferred dark theme.

Below that, the Colour Scheme grid lists all built-in themes (including Daylight) plus a Custom theme with a full palette editor (backgrounds, borders, text, accent colors, flux arrow colors, node fills, and exchange-reaction fill) — this is also where you can set a custom background color directly if none of the presets fit. Theme changes apply instantly to the main shell and are broadcast live to every open map, including split-screen and custom-map panes, and persist across sessions.

Keyboard shortcuts

KeyAction
S or EnterRun a solve (when focus isn't in a text field)
EscClose the currently open dropdown or inline bounds editor

Troubleshooting

Maps show "Demo mode" or won't load — the API must be running before the app is opened; reload the page after starting the backend. If you're mid-session, check that you're still signed in — expired sessions can cause map iframes to fail their initial data fetch.

Solve returns infeasible — check that lb ≤ ub for every constrained reaction, and that glucose uptake (r_1714) has a negative lower bound (e.g. -10). Try resetting all constraints and solving the default model first to confirm the base model is feasible.

A constraint I set isn't reflected on another map — constraints are meant to sync live across all open maps; if one appears stale, switching tabs or re-solving will refresh it.

If you'd like to get in contact, please fill out this form.