Documentation
Reference for the Yeast-GEM FBA Explorer: reading the maps, setting constraints, running solves, custom maps, gene-abundance overlays, and workspaces.
- Getting started
- Reading the maps
- Setting constraints
- Solving & multi-map sync
- Common experiments
- Gene, reaction & EC knockouts
- Run history & comparing solves
- Custom maps
- Pathway JSON schema
- Gene abundance overlay
- Workspaces & models
- Themes
- Keyboard shortcuts
- Troubleshooting
Getting started
- Sign in or register from the login screen. Each account has its own private workspace, model, and saved history.
- Use the tab bar (or the ▾ maps dropdown) to open a pathway: Central Carbon, Amino Acids, Lipid & Sterol, or Imports / Exports.
- Click a reaction node to open its details panel and set bounds.
- Press S or Enter, or click ▶ Solve, to run FBA — every open map updates together.
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)
| Visual | Meaning |
|---|---|
| Blue/white arrow | Indicates flux through reaction |
| Grey arrow | Zero flux / blocked reaction |
| Arrow width | Proportional to |flux|, capped at ~8px |
| Yellow outline | Currently 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.
| Group | Species |
|---|---|
| Energy | ATP ADP AMP |
| Redox | NAD⁺ NADH NADP⁺ NADPH FAD FADH₂ |
| Small molecules | CO₂ Pᵢ PPᵢ H⁺ |
| Coenzyme | CoA |
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
- Click a reaction arrow or node to open its details panel on the right (name, subsystem, equation, current flux, and default bounds).
- Enter new values in Lower bound / Upper bound.
- Click Apply & queue solve to stage the override, or Reset to default to remove it.
- Repeat for as many reactions as you like — the constraints panel in the main shell lists every active override with a one-click remove.
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
| Experiment | What to set |
|---|---|
| Anaerobic growth | O2 exchange (r_2111): lb=0, ub=0 |
| Carbon-limited | Glucose exchange (r_1714): lb=-1, ub=0 |
| Ethanol production | Add ethanol exchange (r_2100): lb=0, ub=1000 |
| Block NADH shuttle | Set 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 type | What actually happens on solve |
|---|---|
| Gene | Sent 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. |
| Reaction | Applied client-side as a (0, 0) bound override on that one reaction, merged into the same constraints payload as your manual bound overrides. |
| EC number | Expanded 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_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.
- Click a history entry to reload its bounds/knockouts and revisit that result.
- Check the box on two entries to visualise the difference between them directly on the map — useful for comparing, say, a wild-type run against a knockout run.
- The dropdown shows your most recent runs; older entries can still be deleted individually.
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:
- Selecting one or more subsystems by name, and/or
- Listing specific reaction IDs, and/or
- Listing specific metabolite IDs to pull in their connected reactions
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.
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:
| Option | What it does |
|---|---|
| 💾 Save workspace | Save a named snapshot of your current constraints, custom maps, and objective |
| 📂 Load workspace | Restore a previously saved snapshot |
| 🖨 Save map | Export the current map as a PNG or SVG |
| 🧬 Load experimental data | Upload gene abundance data for the split-screen overlay |
| 🔬 Load new model | Upload a different SBML model to explore instead of Yeast-GEM |
| ⊕ Change objective | Pick a different reaction (or combination) as the solver's objective |
| ✎ Edit model | Rename or annotate the currently loaded model |
| ⚙ Settings | App 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
| Key | Action |
|---|---|
| S or Enter | Run a solve (when focus isn't in a text field) |
| Esc | Close 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.