Reference
A glossary, the keyboard shortcuts, where data lives, and fixes for common problems.
Glossary
| Term | Meaning |
|---|---|
| Workspace | Where a set of projects is stored — this browser, a folder on your computer, a Google Drive folder, or a folder on the server. You pick one on the first screen; everything you do targets the active workspace. |
| Project | A named collection of flows inside a workspace. |
| Flow | One test journey modelled as a graph: an entry point, cards, branches, and ends. |
| Card | A single screen or step. Holds a title, description, inputs, expected results, branches, and an optional background image. |
| Entry | The card a flow starts from, marked ENTRY on the canvas. |
| Branch | An outcome of a card, written as an action and an optional result — e.g. Sign in / Wrong password. Leave the result blank for a plain choice like Back. A branch normally owns one outgoing connection. |
| Stays on card | A branch marked ↩ that records its outcome without moving on — an inline error, a validation message, a toast. It has no connection. |
| Edge (connection) | The line joining a branch to the next card or end, labelled with the branch name. |
| End | A terminal outcome of the flow — e.g. Signed in, Order placed. |
| Scenario (value set) | One concrete run: a pinned path, input values, an expected outcome, and a background override per card. |
| Background override | A scenario setting that replaces a card's default image — how one flow shows Desktop vs. Mobile screens. |
| Suite | An ordered group of scenarios you run together as a regression pass. |
| Suite run (cycle) | One execution of a suite against an environment and build, with a status per scenario. |
| Pass-rate | Passing scenarios ÷ evaluated scenarios (pass + fail) in a cycle. blocked, skipped, retest, and untested are left out of both sides, so the demo's 4 pass / 1 fail / 1 blocked / 1 retest cycle reads 80%, not 57%. |
| Bug | A defect with severity, status, build, and expected-vs-actual, optionally linked to a scenario and run. |
| Player | The full-screen, step-by-step walk of a flow or scenario. |
| Table | The spreadsheet view of a flow. Opens on one scenario's path; Preview shows every card, one column per scenario. |
| Canvas mode | What a drag does on the canvas: Hand pans, Select draws a selection box, Lock protects the layout. Stamp and Connect are tools armed on top of a mode (01). |
| Note | A sticky note on the canvas, for whoever is building the flow. Drag it onto a card to pin it; a pinned note moves and is deleted with that card. Notes travel with exports and appear in no run, table, or report. |
| MCP server | The endpoint that lets an AI assistant drive the tool through its API — hosted at /mcp, or a local stdio process (06). Through a server it reaches Drive and server-folder workspaces; through the flowline-mcp helper it reaches folders on your own computer (09). |
| Move to durable storage | Copying a project out of browser storage into a Drive or server folder, from the Sync panel. |
| Sync | Moving a workspace's changes to and from its backend: Commit saves a revision, Pull brings in others' changes, Push publishes yours (08). |
| Activity | The log of a git workspace's commits, newest first (08). |
Views at a glance
| View | Where | Use it to |
|---|---|---|
| Workspace picker | First screen (/) |
Create or open a workspace. |
| Projects | After picking a workspace | Create, open, or delete projects. |
| Canvas | Editor → Canvas | Lay out cards and connections visually. |
| Table | Editor → Table | Edit inputs, expected, and scenario values in bulk. |
| Player | Player tab | Walk a scenario and file bugs. |
| Suites | Suites tab | Manage suites, run cycles, read the dashboard. |
| Sessions | Sessions tab | Record an exploratory session across every flow and export it. |
| Activity | Projects screen → History | Read a git workspace's commits, newest first (08). |
Keyboard shortcuts
| Key | Where | Action |
|---|---|---|
Backspace / Delete |
Canvas, node or edge selected | Delete the selected card or connection. |
Enter |
Any inline field (title, branch label) | Commit the edit. |
Shift + Enter |
Multi-line fields | Insert a line break instead of committing. |
Escape |
Any inline field | Cancel the edit and restore the previous value. |
? |
Canvas | Open the help panel listing every canvas mode, tool, and shortcut. |
The canvas shortcuts — modes (H, V, L), tools (C, X, Esc), Space to
pan, ⌘D to duplicate a selection, ⌘Z / ⌘⇧Z — are listed in that help panel,
which the editor generates from the same table it binds its keys from. They are
described in Flows and cards.
Deleting a card also removes the connections attached to it. Removing a branch removes the connection that left it. Renaming a branch keeps its connection. Marking a branch stays on card drops its connection, and asks first if it has one.
Where your projects are stored
The server keeps no projects (07). Each workspace kind stores them somewhere else:
| Workspace | Projects stored in | Survives clearing site data | Reachable by MCP |
|---|---|---|---|
| This browser | The browser's private storage (OPFS) | No | No |
| Folder | The folder you picked, via the browser | Yes | Through the flowline-mcp helper, not the server (09) |
| Drive | Your Google Drive folder | Yes | Yes, once the server is connected to Drive |
| Local | A folder on the server's disk, picked when the workspace is added | Yes | Yes |
| Helper | A folder on your computer, served by the Flowline helper (09) | Yes | Through the helper's own MCP server |
Local workspaces exist only when LOCAL_WORKSPACES_ENABLED is on — the default
when sign-in is off.
Project layout
Whichever kind you use, a project is a directory of plain JSON files — one per card, scenario, suite, note and test record — so two people editing different things never touch the same file, and git diffs show exactly what changed:
<workspace>/
<project-id>/
project-meta.json # name, settings (with the live key)
templates/<template-id>.json
sessions/<session-id>/ # session.json, bugs/, results/
flows/
<flow-id>/
flow-meta.json # name, entry card, owner
cards/<card-id>.json # a card and the connections leaving it
scenarios/<id>.json # (the type is ValueSet)
suites/<id>.json
notes/<id>.json
asset-meta/<id>.json # filename and type of an image
assets/<asset-id> # the image bytes
runs/<id>.json
bugs/<id>.json
suite-runs/<id>/run.json, results/<id>.json, assignments/<scenario-id>.json
settings.liveKeyinproject-meta.jsonopens the project's live room (08).- A suite result is never edited: recording one adds a file under
results/, and a scenario's status is its latest result. - People are stored as
{ "id": "<lowercased email>", "name": "…" };idis left out when only a name is known, and"agent": truemarks what an MCP client wrote (06). The fields areowneron flows, suites and scenarios;testeron runs;reportedByon bugs and session bugs;startedByandfinishedByon suite runs;recordedByon results. A field is left out when Flowline doesn't know who you are.assigneeinassignments/<scenario-id>.jsonis a person too; how an older plain-text file reads: 08. Who can read them: 08. - Projects saved by Flowline before this layout (one
project.jsonplus oneflow.jsonper flow) are converted by the first change saved to them, from the editor or an agent. Before converting, every workspace kind except Drive copies the old files to<project-id>/.backup/schema-6/. A Local or Helper folder that is a git repository keeps no copy; recover the old files from git. An older Flowline still writes the old layout (08). - Card background images are flow-scoped. Over HTTP they are served at
GET /api/projects/<projectId>/flows/<flowId>/assets/<assetId>. - On the server, the app's own config lives in
./.data/app. Override withAPP_CONFIG_DIR.
Don't point a second server at the default
./.data/app. Running another instance against the same app-config folder can overwrite the workspace registry. Use a differentAPP_CONFIG_DIRif you need a throwaway instance.
Troubleshooting
The page is blank or won't load.
Confirm both processes are up: curl -s -o /dev/null -w "%{http_code}" http://localhost:5174
and the same for http://localhost:8787/api/workspaces should each print 200.
If not, restart with npm run dev and watch for API listening on ….
I don't see the Bramble Toys demo project.
The demo is bundled with the server and appears automatically in the demo
workspace. Restart npm run dev, then reselect the demo workspace in the
browser.
My projects vanished. A browser workspace lives in that browser's private storage. Clearing site data, switching browsers, or opening a private window loses it. Nothing is recoverable from the server — it never had a copy. Move projects you care about to Drive or a folder with Move this project to a folder or Drive in the Sync panel.
"Open folder on my computer" is greyed out. The button needs the File System Access API — use Chrome or Edge. Firefox and Safari can still use browser workspaces and Drive.
A card shows no background image.
A card falls back to its own default image when the scenario overrides nothing.
Open the Table with that scenario picked — or switch to Preview if the
card isn't on its path — and check the card's row has an image chosen in the
scenario's column, or that the card carries a default in the Inspector's
Images section. An agent can set both: add_point_image and
set_point_background for the card's own, set_scenario_background for the
per-scenario override (06).
My AI assistant (MCP) edits the wrong project, or can't see a workspace. See 06 · MCP → Safety notes.
"This Flowline client is out of date — reload the page, or update flowline-mcp."
The server no longer accepts whole-project saves. Reload the web app tab; for an
assistant, update flowline-mcp (09).
Port already in use.
Another instance is running. Find it with
lsof -nP -iTCP:5174 -iTCP:8787 -sTCP:LISTEN and stop it with kill <PID>, or set
a different PORT for the API.
Rebuilding this wiki
The pages you are reading are generated from the Markdown chapters in docs/wiki/.
After editing a chapter, regenerate the HTML:
npm run build:wiki
Then serve the folder and open it:
cd docs/wiki && python3 -m http.server 4601 # http://localhost:4601