The Lab is the flowss studio for research figures whose numbers have to add up. You write a short, typed text document in FlowScript (the Lab's own language), and the Lab draws it as a figure: a CONSORT flow, a Kaplan–Meier curve, a forest plot, a Table 1, a Gantt chart, a cap table and dozens more. Because the document is typed, the Lab can check it while you type. A cohort that loses more people than its exclusions account for, two arms that do not sum to the number randomised, a rate that does not match its counts, a p-value that does not match its test, a reference to a block that does not exist: each one is underlined in the source and counted on the status badge before the figure reaches a manuscript. One document can carry several views of the same model, so a forest plot and a funnel plot can never be drawn from two different copies of the numbers. This page is a tour of the whole studio: the screen, documents, the source editor, the canvas, every menu and pane, AI help, sharing, exporting, shortcuts, limits and the messages you may see. The language itself is documented in The FlowScript language.
At a glance
| Topic | What you need to know |
|---|---|
| Where | /lab, or the studio switcher's Lab ("Typed research figures that reconcile") |
| Plan | Starter, Plus, Ultra or Enterprise. On Free, opening the Lab takes you to the pricing page with the note that Lab is part of Starter. See Plans and what they include |
| What you write | FlowScript: typed blocks such as study, cohort, arm, outcome, estimate, survival, plus one view line per figure |
| What you get | 36 figure renderers, checked arithmetic, units and uncertainty, live diagnostics, and exports to SVG, PNG, LaTeX (TikZ) and a journal submission bundle |
| Starting points | 60 templates in the Templates flyout, worked examples on the Figures bench, and reporting-standard starters on the Standards bench |
| Saving | Automatic, about 0.6 seconds after you stop typing. Every Lab document is a named figure in your library |
| Checking | The status badge next to the title counts errors, warnings and notes; its popover lists each one and jumps to its line |
| AI | Optional. The flowss Lab Agent, through the prompt at the bottom: Quick for a single rewrite, and Agent for multi-step work as the Lab methodologist. Changes from the flowss Lab Agent and from auto-fix wait for you to accept them. Needs AI points or your own key; see AI in flowss |
| Working with others | Comments on source lines, share links, and live sessions (Plus and above); see Live collaboration |
On Windows and Linux, read ⌘ as Ctrl, ⌥ as Alt and ⇧ as Shift.
What the Lab is for
Most diagram tools draw what you tell them to draw. The Lab also checks that what you have told it is consistent, and shows you every place where it is not, while it draws. Four ideas make that possible.
- Typed blocks. Every block has a kind, and each kind knows which attributes it takes. A
cohorthas ann, afromandexcludedcounts; anestimatehas ameasure, avaluewith its interval, and ascale. The Lab knows 125 block kinds across 22 fields, from clinical trials and evidence synthesis to project management, finance, security, reliability, supply chains, education and law. You can also invent your own kinds; the Lab treats them as plain data. - Numbers that reconcile. Counts flow from block to block (
from:), and the Lab checks the arithmetic: screened minus exclusions equals eligible, the arms sum to the randomised cohort, events divided by participants equals the stated rate. You can also derive a number instead of typing it (n: = randomised.n - excluded.withdrew), so it cannot go stale. - Units and uncertainty. A number can carry a unit (
5 mg/kg/day,14 months,3.2 per 100000) and an interval (0.68 [0.51, 0.90]). The Lab refuses to add milligrams to millilitres, keeps a risk ratio's interval on the log scale, and flags an interval that does not contain its own point estimate. - Many views, one model. A
viewline names a renderer and the blocks it draws. Every view of a document is drawn from the same model, so every figure agrees with every other.
The Lab is also where the platform's reporting-standards checks live (CONSORT, PRISMA, STROBE, TRIPOD, GRADE and 28 more), along with provenance tracking and journal-ready publishing. Those are covered on their own pages: Reporting standards, Lab views and renderers, The Data and Statistics benches and Publishing, provenance and compliance in Lab.
Opening the Lab
- Sign in. The Lab asks every visitor to sign in first; if you follow a Lab link while signed out, you come back to the same link afterwards.
- Go to /lab, or pick Lab in the studio switcher.
- The Lab opens the document you last had open. On your very first visit it opens the Clinical — RCT / CONSORT 2010 starter so you have something to explore.
If your plan does not include the Lab, you land on the pricing page instead, with a note at the top saying the Lab is part of Starter.
Links that open something specific
| Link | What happens |
|---|---|
/lab?template=<id> | Loads the named template, for example /lab?template=clinical-rct (the template gallery's form, lab-clinical-rct, works too). If you already have work open, the Lab offers the template in a message ("Load “…”? It replaces the open document — undo brings your work back.") with a Replace button rather than replacing your work silently. An unknown id loads nothing and says: "No Lab template called “…” — nothing was loaded." |
/lab?doc=<id> | Opens one of your library documents. If it no longer exists you see: "That library document isn’t available any more — opened your latest work instead." |
| A share link | Opens the shared figure as a new document in your Lab, and tells you where your own document went: "Opened the shared figure as a new document — “…” is still in the strip." with a button to go back to it |
The Lab removes these parameters from the address once it has acted on them, so reloading the page does not load the template again.
A tour of the screen
The Lab uses the same island layout as the other studios: the figure fills the page and every control floats over it in one of five places.
| Place | What is there |
|---|---|
| Top left | The document title (with the list of your Lab documents behind it), the status badge, and the ⋮ menu |
| Top right | Comments (with a count of threads) and Share |
| Left edge | The tool rail: Hand, the five workbench shelves (Source, Data, Statistics, Figures, Standards), then Insert a block or view, Advisor and Provenance |
| Bottom centre | The prompt: ask the flowss Lab Agent (Quick), or the flowss Lab Agent as the Lab methodologist (Agent) |
| Bottom right | The view controls: undo, redo, the view toggle (when the document has two or three views), zoom, and help |
Everything else appears when you need it: the workbench sheet slides out beside the rail when you open a shelf, a small toolbar floats over a selected block, the Block properties drawer opens on the right when you ask for it, and one side pane at a time can open on the right.
The tool rail
| Rail button | What it does |
|---|---|
Hand (H) | Turns on the Hand tool: every drag pans the canvas and nothing on the figure is selected or moved. Press H or Escape to turn it off |
Source (⌘\) | Opens the workbench on the FlowScript editor. Click again to close the sheet |
| Data | Opens the Data bench: read rows from a file, check and clean them, bind them to the document, and insert blocks counted from them. Shows a bound badge while rows are bound. See The Data and Statistics benches |
| Statistics | Opens the Statistics bench: calculators (power, contrasts, survival and more) that write their results into the document |
| Figures | Opens the gallery of view renderers, each with a worked example you can start from. See Lab views and renderers |
| Standards | Opens the Standards bench: start from a document shaped for CONSORT, PRISMA and the rest, and insert what an item needs. See Reporting standards |
| Insert a block or view | Opens the Insert flyout (below) |
| Advisor | Opens the Advisor pane: an offline, deterministic list of the next things to do for this document. See The Advisor |
| Provenance | Opens the Provenance pane: where every number came from, and which numbers have no source. See Publishing, provenance and compliance in Lab |
A shelf button toggles: clicking the shelf that is already open closes the workbench sheet.
The workbench sheet
The sheet holds the source editor and the four benches, with a tab strip across the top (Source, Data, Statistics, Figures, Standards). Use the arrow keys, Home and End to move between the tabs.
- Drag the sheet's edge to resize it, between 360 and 720 pixels wide. Double-click the edge to reset it. With the edge focused,
←and→resize it in small steps (holdShiftfor bigger ones), andHomeandEndjump to the narrowest and widest. The sheet always leaves room for the figure beside it, and the Lab remembers the width in this browser. - When the sheet is narrower than 560 pixels, the tabs that are not open fold to icons (their names stay in the tooltips).
- Close workbench (
⌘\) puts it away. On a phone the sheet closes any open side pane, because the screen has room for one. - On the Source tab a wide sheet's header shows the line count ("56 lines"); on a narrow one the count is in the status popover instead.
The Lab remembers, per browser, which shelf and bench you had open and which side pane was open, and puts them back next time.
The view controls
| Control | What it does |
|---|---|
| Undo, Redo | Step through the document's history (⌘Z, ⇧⌘Z) |
| Views in this document | A toggle that appears when the document declares two or three views; click a view's name to draw it |
| Zoom out, zoom %, Zoom in | Zoom the canvas (⌘-, ⌘=). The % opens the zoom menu |
| Zoom menu | Zoom to fit (⌘0), Zoom to 100%, then View rows when the document has four or more views, Dot grid (show or hide the dots behind the figure), and Full screen |
| Help | Keyboard shortcuts (?) and Help centre |
On a phone the view controls show undo and redo only; zoom and the view list move into the ⋮ menu under Zoom.
Documents
Every Lab document is a named figure in your library, alongside the work from the other studios. You can keep as many as you like on Starter and above.
The document list
Click the title at the top left to open the list of your Lab documents. The open one is checked.
| Action | How |
|---|---|
| Open another document | Click its row. Your pending edits are saved first |
| Step through documents | ⌥⌘← and ⌥⌘→ |
| Find a document | Type in Find a document (shown once you have more than seven) |
| Rename the open document | Double-click the title, or use the row's rename action. Enter saves, Escape cancels. An empty name is ignored |
| Duplicate | The row's duplicate action. The copy takes the original's name with "(copy)", then "(copy 2)" and so on, and the editor stays where it is; the message "Duplicated as “…”" has an Open button |
| Delete | The row's delete action asks "Delete “…”? This cannot be undone." You cannot delete your only document |
| New document | New document at the foot of the list, or the ⋮ menu. A new document starts blank |
How a document is named
Until you rename a document yourself, the Lab names it from its content and keeps the name in step as you edit: the first title: in the document, otherwise its leading comment, otherwise its first block, otherwise "Untitled figure". As soon as you rename it, the Lab never renames it again. Names are kept to one line of at most 80 characters; a longer name is shortened with "…".
Saving
The Lab saves the open document about 0.6 seconds after you stop typing, and again when you leave the page. While a save is pending the status badge shows a small spinner; once written it shows as saved. If a save fails, the badge turns red ("Not saved"), the popover's Save section shows the reason, and Retry the save tries again. The commonest reason is "Local storage is full — the document could not be saved." (see Troubleshooting).
Documents follow you to other devices through cloud sync; see Cloud sync, offline work and devices.
Revision history
The Lab keeps up to 50 snapshots of each document. Open them from the ⋮ menu (Revision history) or ⌘K. What changed on a snapshot lists the change as blocks (for example arm arm_b: n 240 → 235), or "No block changed — formatting or comments only." Restore asks "Replace the editor’s source with this snapshot?" with Restore and Cancel, and restoring goes through undo: the message "Snapshot restored" has an Undo button, and ⌘Z brings your current source back. Clear revision history (the button in the pane's header) asks "Delete all N saved snapshots for this document? This can’t be undone."; Delete history empties the history for this document only ("Revision history cleared for this document"), and Cancel keeps it. There is deliberately no keyboard shortcut for the timeline, because every sensible chord is taken by the browser. See Version history and undo.
Writing FlowScript in the Source editor
Open the Source shelf (⌘\) to edit the document as text. The editor is the same one used by code editors, set up for FlowScript.
| Feature | What it does |
|---|---|
| Diagnostics | Errors, warnings and notes are underlined, each in its own colour, on the exact characters at fault. Hover an underline to read the message |
| Completion | At the start of a line, every block kind, grouped by field. Inside a block, that kind's attributes (required ones first) with snippets that teach the notation, such as value: 0 [0, 0] for an estimate, then the child blocks that kind may contain, then every other kind. After view name:, every renderer, each inserted as renderer(); a renderer's other accepted names are listed in its description rather than as separate entries. Nothing is suggested inside an object value such as excluded: { … } |
| Hover | On a number, its resolved value, interval, unit in SI, and where it came from (a typed source, a dataset column or the expression that derived it). On a block id, the block and its numbers. On a kind name, the kind's description and attributes |
| Go to definition | F12 on a block id jumps to where it is declared |
| Find references | ⇧F12 lists every place a block id is used |
| Rename | F2 on a block id renames it everywhere it is referenced: in from: and other references, inside derived values, inside selectors and in view arguments. Text inside strings and comments is left alone, and the whole rename is one undo step. New ids must start with a letter or underscore and contain only letters, digits and underscores. With the caret anywhere other than a block id, the editor says "Only a block id can be renamed here — put the caret on a block's name." |
| Format | ⇧⌥F (or right-click, Format Document) re-indents blocks. It leaves strings, comments and alignment inside a line alone, and does nothing while braces are unbalanced |
| Outline and sticky scroll | The block outline (⇧⌘O in the editor) drives sticky scroll, so up to three lines of the blocks you are inside stay pinned at the top of the editor |
| Caret follows the figure | Moving the caret into a block selects that block on the canvas, and selecting a block on the canvas highlights its lines |
The editor keeps its own undo, find and other commands while your cursor is in it. The Lab compiles the document on every keystroke; the canvas redraws once you pause.
Tip: You never have to type a whole block. Insert a block or view writes a block with its required attributes filled with placeholders, and the Block properties drawer adds any attribute the kind accepts with one click.
The canvas
The canvas draws the current view.
| Action | How |
|---|---|
| Select a block | Click it. A purple outline marks it and its toolbar appears above it |
| Deselect | Click empty canvas, or press Escape |
| Pan | Drag empty canvas, or turn on the Hand tool (H) and drag anywhere |
| Zoom | ⌘ or Ctrl plus scroll zooms towards the pointer; ⌘= and ⌘- zoom in and out; ⌘0 fits the figure |
| Edit a label in place | Click an editable text on the figure (renderers mark the labels and numbers that can be edited this way). A small box opens with the value and its type: Enter to save, Esc to cancel. A number may keep its unit (for example 40%). The change is written straight into the source |
| Move a shape | In a free-form figure view, drag a shape. Its x: and y: in the source update when you let go |
| Block menu | Right-click a block: Duplicate block (⌘D), Jump to source, Rename block… (only for a block with an id) and Delete block (⌫) |
The figure re-fits itself when you switch view. The canvas follows the app's light or dark theme.
The block toolbar
When a block is selected, a toolbar floats above it with Edit source (jumps to the block's first line), Insert a block, Duplicate (⌘D), Delete (Del) and Block properties (⌘.). The toolbar steps out of the way while you pan or drag.
Deleting a block shows "Deleted cohort 'eligible'" (for example) with an Undo button. Duplicating gives the copy a fresh id and selects it. Renaming from the block menu updates every reference and tells you how many it changed: "Renamed to 'arm_c' — 3 references updated".
Block properties
Block properties (⌘., the toolbar button, or ⌘K) opens a drawer on the right titled with the block's kind and id, for example "Trial arm · arm_b". It edits the selected block as a form.
- Each attribute that can be safely edited in place (text, numbers, words) is a field. Your change is written into the source when you leave the field.
- Values that cannot be edited safely in a form are shown read-only with their real text and the reason: objects, lists,
true/false,null, intervals ("interval — edit in source") and derived values ("derived — edit in source"). - Available attributes lists every attribute the kind accepts. Ones already present are shown filled; missing ones are buttons (
+ key) that add the attribute with a placeholder. A*marks a required attribute. - If the block has no
{ }body (a one-lineviewdeclaration, for example), the buttons are disabled and the drawer says why and how to rewrite the block so they work. - When an edit cannot be made safely, an amber notice in the drawer says so, and the source is left unchanged.
The drawer can be pinned open and resized. With nothing selected it says "Select a block to edit its properties."
Adding blocks and views
The Insert flyout
Click Insert a block or view on the rail, Insert a block on the block toolbar, or ⌘K Insert block…. The flyout lists every block kind under its field (the fields your document already uses come first), then Add view with every renderer. Type in Search blocks & views… to filter.
- Clicking a block kind appends it to the end of the document with a unique id (the kind's name, then
cohort2,cohort3and so on), fills its required attributes and its title or label with placeholders, selects it, and says "Inserted cohort 'cohort2'". - A reference placeholder points at the newest block whose kind matches the attribute (an inserted
evalpoints itsmodel:at your latestmodel); afrom:points at the newest block of the same kind. Where there is no candidate the reference is left out, and the missing-attribute check tells you to add it. Other text placeholders read"TODO", numbers100and percentages50. - An inserted
checkcomes with a real condition to edit, neverthat: true. - Clicking a renderer under Add view appends
view <id>: <renderer>with a unique id, switches the canvas to it, and says "Added view '…'".
Templates
Open Browse templates… from the ⋮ menu or ⌘K. The flyout lists the Lab's 60 starters, each with its field and a one-line description; type in Search templates — CONSORT, roadmap, FMEA… to filter, and the starter you last loaded is ticked.
| Field | Starters include |
|---|---|
| Clinical and evidence | RCT / CONSORT 2010, systematic review / PRISMA 2020, Kaplan–Meier survival (PFS and OS), Table 1 baseline characteristics, ROC, calibration and decision curve, meta-analysis forest and funnel plots, RoB 2 risk of bias and GRADE summary of findings |
| Biology and figures | Experimental design, raincloud plot of single-cell measurements, four-panel results figure for a trial, physics free-body diagram, optics ray path |
| Machine learning | Ablation study, retrieval-augmented LLM ablation study |
| Engineering and operations | Service architecture, C4 container view, 2^k factorial design of experiments, change request flow, clinic capacity and queueing model, time study, energy balance |
| Quality and reliability | Process capability (Cp / Cpk), gauge R&R, FMEA, FMECA with computed criticality, Crow-AMSAA growth, Weibull life data, design FMEA for a medical device, availability of a redundant supply, field failure cohort |
| Business, finance and project work | Initiative and KPIs, OKR grid with acquisition funnel, incident response funnel, throughput accounting, seed cap table, Series A cap table with SAFE conversion, payment reconciliation, quarterly roadmap, release delivery pipeline, research grant work plan |
| Security, supply, education, legal, survey, health economics | STRIDE risk matrix and LLM-agent threat model, alert triage funnel, supply chains and inventory policy, essay and research-proposal rubrics, enrolment to graduation, SaaS MSA and GDPR DPA clause maps, matter intake, engagement instrument, panel response funnel, ICER and CE plane, patient pathway |
| 3D scenes | Crystal lattice, stacked blocks |
Loading a template replaces the open document's content. The message "Template loaded — …" has an Undo button, and ⌘Z works too. If rows were bound on the Data bench, they are released, because they described the study that was there before; the Data bench says so. For a full catalogue across all studios, see The template gallery.
Example data
Some starters use values from a fictional study: the research-figure templates and every reporting-standard starter open with a notice that begins "EXAMPLE text from a fictional…". While that notice is in the source:
- an amber banner at the bottom of the canvas reads "Example data — not real. This starter uses values from a fictional study — replace them with yours, then delete its “EXAMPLE text” notice to remove this mark from the figure and its exports." Got it folds it to a small Example data chip; click the chip to read it again;
- the figure, every export and the submission bundle are stamped Example data — not real.
Delete the notice once the numbers are yours and the stamp goes with it.
Views and figures
A view is one figure drawn from the document, declared with one line such as view flow: consort(trial). One document can declare as many as you like.
| Number of views | How you switch |
|---|---|
| One | It is simply drawn |
| Two or three | The Views in this document toggle in the view controls |
| Four or more | View rows in the zoom menu (and in the ⋮ menu's Zoom on a phone) |
| Any | ⌘K lists every view by name under Views, with its renderer |
The Lab remembers, per document, which view you were looking at and which block was selected. Full details of every renderer, its arguments and its messages are on Lab views and renderers.
When nothing is drawn
| What you see | Why, and what to do |
|---|---|
| "Fix 1 error to render" (or "Fix N errors…") with "The figure draws as soon as the source checks." | Nothing could be drawn and the document has errors, most often text the Lab cannot read at all, such as an unclosed quote. Go to the first error opens the editor at it. (While a document with errors can still be read, the Lab keeps drawing what it can.) |
| "Add a view to draw it" with "A view is how this document becomes a figure." | The document compiles but declares no view. Add a view opens the Insert flyout; Browse templates opens the templates |
| "The “…” view couldn’t be drawn" with a technical message | The document is fine; only the drawing failed. Switch to another view or undo the last change to this one. The rest of the studio keeps working |
Checking: the status badge
The badge beside the title answers two questions at once: is this document saved, and is anything wrong with it. It counts errors, warnings and notes. Click it for the popover.
| Section | What it shows |
|---|---|
| Save | Only after a failed save: the reason and Retry the save |
| Validation | "Checking…" while the compile catches up with your typing; "All checks passing" when there is nothing to report ("No issues. Numbers add up, references resolve, type contracts honoured."); otherwise every issue, errors first, each with its line number. Click an issue to jump to its line. With errors present, AI auto-fix sends them to the flowss Lab Agent and shows the proposed repair for review |
| flowss Lab Agent | Only when AI is off: "AI is off — no platform key is configured." with a link to the AI setup guide |
| Reporting standards | Score against CONSORT, PRISMA… opens the Reporting standards pane |
| Readiness | The document's readiness level (Empty, Draft, Sound, Reviewed, Publishable); see Core concepts and glossary |
The save line in the popover also shows the line and block counts ("42 lines · 9 blocks"), or "The last save failed". When the document binds to data the Lab has not been given, the column checks cannot run; the badge counts that as a warning and the Validation section says which checks did not run, so a figure nobody checked never wears a clean tick.
What exactly is checked, and every message, is documented in The FlowScript language.
The side panes
The right side holds one pane at a time; opening one closes whichever was there. Each pane has its own header and close button.
| Pane | Opened from | What it is for | Documented on |
|---|---|---|---|
| Advisor | Rail, ⌘K | Ranks the next moves for this document, offline | The Data and Statistics benches |
| Provenance | Rail, ⌘K Figure provenance… | Where each number came from | Publishing, provenance and compliance in Lab |
| Reporting standards | Status badge, ⌘K Reporting standards… | Scores the document against 33 checklists, item by item | Reporting standards |
| Publish | ⋮ Publish this figure…, ⌘K | Journal sizing, preflight, LaTeX and the submission bundle | Publishing, provenance and compliance in Lab |
| Comments | Comments at the top right, ⌘K Toggle comments | Threads anchored to source lines | Comments and review |
| Revision history | ⋮ Revision history, ⌘K | Snapshots of this document | Version history and undo |
| flowss Lab Agent — Lab methodologist | The prompt's Agent mode, ⌘K Open flowss Lab Agent — Lab methodologist | The flowss Lab Agent in its multi-step study-design role | The flowss Studio Agent and its modes |
The Lab remembers which pane was open and reopens it next time.
AI in the Lab
AI is optional. Writing, checking, every bench, every view, the Advisor, Provenance, Reporting standards and Publish all work without it. AI features use your plan's AI points (Plus and above) or your own key (Starter and above); see AI points and limits and Bring your own AI key.
The prompt
The prompt at the bottom of the canvas has two modes.
| Mode | Button | What it does |
|---|---|---|
| Quick | Ask the flowss Lab Agent | Sends your request to the flowss Lab Agent, which rewrites the FlowScript. The placeholder reads "Ask the flowss Lab Agent…"; with a block selected it reads "Ask the flowss Lab Agent about cohort eligible…" and the request asks for a change to that block only, leaving the rest as it is |
| Agent | Ask the flowss Lab Agent — multi-step | Opens the flowss Lab Agent pane in its Lab methodologist role and hands it your request. As the methodologist, the flowss Lab Agent builds typed FlowScript (cohorts, arms, outcomes, KPIs) with consistent denominators and a complete CONSORT flow |
Suggestion chips appear when the document is empty or the prompt has focus: "Add a second arm with placebo intervention", "Convert the cohort into a CONSORT view" and "Add a power calculation block". With a block selected, the chips are that block's refines instead: Add more detail, Rewrite labels and Sanity-check.
When neither the platform's AI nor a key of your own is available, the prompt says "AI is off — set up key" and links to the setup guide instead of taking a request.
Reviewing an AI change
Nothing the flowss Lab Agent (Quick or multi-step) or auto-fix produces lands in your document unseen. Each result waits in a review bar above the prompt.
- The bar names the source of the change ("flowss Lab Agent", "AI auto-fix", "flowss Lab Agent — Lab methodologist") and leads with what changed as blocks, for example
arm arm_b: n 240 → 235. If no block changed it says "No block changed — formatting or comments only." - Show text diff shows the line-by-line diff, with unchanged runs collapsed.
- Accept applies it (for example "flowss Lab Agent applied", with Undo). Reject, or
Escape, discards it ("AI change discarded"). - An AI result is pinned to the document it was asked about. If you have switched documents since, Accept refuses and tells you which document it belongs to; the result is kept so you can switch back and accept it there.
AI auto-fix
When the document has errors, AI auto-fix in the status popover (or ⌘K AI auto-fix validation errors) sends the errors to the flowss Lab Agent and returns a minimal repair for review. After one attempt the button is disabled, with the tooltip "Already tried — edit the source and try again", until you change the source.
Photo → FlowScript
Photo → FlowScript… in the ⋮ menu's Import (or ⌘K) turns a photo of a real-world artefact (a whiteboard flow, a printed diagram) into source. Take a picture with your camera or upload a PNG, JPEG, WebP or GIF (HEIC photos from an iPhone, and some AVIF and TIFF files, cannot be decoded by most browsers; convert them to PNG or JPEG first), then recognise it. A FlowScript result can be loaded straight into the open document ("Recognised FlowScript loaded", with Undo); unlike a change from the flowss Lab Agent, it does not wait in the review bar, so check it against the photo. See Importing and converting for how photo recognition works across the studios.
The ⋮ menu
The ⋮ beside the title holds the document's verbs. Every row except the Send to targets and Language: FlowScript is also a ⌘K command.
| Row | What it does |
|---|---|
| New document | A blank document in your library |
| Duplicate this document | A copy in the library; the editor stays where it is |
| Open in library | Your Lab figures in the library |
| Browse templates… | The Templates flyout |
| Import ▸ Import a diagram… | Paste code or a URL, upload an image, or snap a photo. See Importing and converting |
| Import ▸ Photo → FlowScript… | Turn a photo into FlowScript (above) |
| Export ▸ | The export formats (next section) |
| Send to ▸ | Send the document to Studio, Study, Weave, BPMN, Science or Evidence |
| Revision history | Snapshots of this document |
| Publish this figure… | The Publish pane |
| Language: FlowScript | Shows the line count and opens the source |
| Delete this document | Removes it from your library; the message "Deleted “…”" has an Undo button |
Send to another studio
A studio that renders FlowScript receives it as it is. Evidence extracts it into an evidence scaffold. A studio that needs a different engine converts it first; the message "Converted to … " has an Open button, so a conversion never navigates you away from your work before you have seen it. An empty document cannot be sent ("There is nothing to send yet — write or insert a block first"). See Moving work between studios.
Exporting
| Export | Where | File |
|---|---|---|
| Export SVG | ⋮ Export | glyphscript-<view>.svg, the vector source of the current view |
| Export PNG (2×) | ⋮ Export, ⇧⌘P | glyphscript-<view>@2x.png |
| Export PNG (4×, print) | ⋮ Export | glyphscript-<view>@4x.png |
| Export PNG at print size (300 dpi) | ⋮ Export | glyphscript-<view>-<width>mm-300dpi.png, at the figure's printed width |
| Export all views (ZIP) | ⋮ Export | <title>-views.zip, every view as SVG. Two exports of an unchanged document are byte-identical |
| Copy image to clipboard | ⋮ Export | A 2× PNG on the clipboard |
| LaTeX (TikZ), print PNG at a journal width, submission bundle | The Publish pane | See Publishing, provenance and compliance in Lab |
PNGs are drawn on white in the light theme and on the dark canvas colour in the dark theme. All exports are stamped Example data — not real while a fictional starter's notice is in the source. See Exporting your work for how these compare with the other studios.
Sharing and working together
Share at the top right opens the share menu.
| Row | What it does |
|---|---|
| Copy link | Copies a link that carries the whole document in the address ("Share link copied — the document travels in the URL"). Whoever opens it (signed in, on Starter or above) gets a copy as a new document in their own Lab |
| Start live session | Starts a live session and copies its invite link (Plus and above) |
| Copy live link, Leave session | While live. Leaving keeps your document as it is |
| Join voice | While live, on Ultra and Enterprise. Once you are in the call the rows become Mute microphone (or Unmute microphone), Share your screen (or Stop sharing your screen) and Leave voice |
| How live sessions work | A short explanation |
A share link has a size limit of about 8 KB, because the document travels inside the address. A larger document says "This document is too large for a share link (… KB — the limit is about 8 KB). Export it instead."
Live sessions
In a live session one person at a time holds the pen and edits while everyone else watches; their changes reach the others after a short pause in typing. A banner over the canvas says who has the pen. Take or request the pen in ⌘K asks for it. A session belongs to one document: if you switch to another document in the same tab, a banner says "The live session is on … — this document is not being shared, and live edits are not landing here." with Back to the session. Plus allows live sessions for up to three people; Ultra and Enterprise have no seat limit and add voice and screen sharing. See Live collaboration.
Comments
Comments in the Lab are threads anchored to a line of the source. Open Comments at the top right, click into the source to pick a line (the composer shows "line N"), and write. Click a thread's line to jump to it. Threads are kept in this browser, next to each document, stay out of the FlowScript source, and sync to everyone during a live session. Because the anchor is a line number, editing above a comment moves the text under it without moving the comment. See Comments and review.
The command palette
⌘K reaches every Lab command and every screen. Under Go to you will find Source, Data, Statistics, Figures, Standards, Block properties, flowss Lab Agent (puts the caret in the prompt), flowss Lab Agent — Lab methodologist, Advisor, Comments, Revision history, Reporting standards, Provenance, Publish, and one entry per view. The Lab's own commands are:
| Command | Shortcut |
|---|---|
| New document, Duplicate this document, Open in library, Delete this document | |
| Browse templates…, Insert block…, Import a diagram…, Photo → FlowScript… | |
| Export SVG, Export PNG (2×), Export PNG (4×, print), Export PNG at print size (300 dpi), Export all views (ZIP), Copy image to clipboard | ⇧⌘P for PNG (2×) |
| Revision history, Publish this figure…, Reporting standards…, Figure provenance… | |
| Copy share link | |
| Undo, Redo | ⌘Z, ⇧⌘Z |
| Fit diagram to view, Hand tool, Toggle code pane | ⌘0, H, ⌘\ |
| Open flowss Lab Agent — Lab methodologist, AI auto-fix validation errors | |
| Share live (collaborate), Copy live session link, Leave live session, Take or request the pen, Toggle comments | |
| Join voice (beta), Leave voice, Share your screen (voice) | |
| Keyboard shortcuts | ? |
Keyboard shortcuts
| Key | What it does |
|---|---|
⌘Z / ⇧⌘Z | Undo / redo (outside the editor; the editor keeps its own) |
⌘D | Duplicate the selected block |
Delete or Backspace | Delete the selected block |
⌘. | Open or close Block properties |
Escape | Close the topmost thing: a pending AI change, the photo recogniser, the shortcut sheet, the Insert flyout, the Templates flyout, then the side panes, the Hand tool, and finally the block selection |
⌘0 | Fit the figure to the view |
⌘= / ⌘- | Zoom in / out |
⌘ + scroll | Zoom towards the pointer |
⌘\ | Open or close the workbench sheet |
H | Hand tool on or off |
⇧⌘P | Export PNG (2×) |
⌥⌘← / ⌥⌘→ | Previous / next document |
? | Keyboard shortcuts |
In the editor: F2, F12, ⇧F12, ⇧⌥F | Rename a block id, go to its definition, find its references, format the document |
The shortcut sheet (?) is generated from the keys the Lab actually binds, so it always matches. See Keyboard shortcuts for every studio.
Tips
- Derive, do not retype. Write
n: = randomised.n - excluded.withdreworrate: = events / n * 100instead of a number you calculated by hand. A derived number cannot go stale when the counts change in revision three. - Write
source "…"beside numbers you copied (n: 1502 source "Screening log, May 2024"). The Provenance pane and the submission bundle then say where each number came from. - State your own rules with
check. A cap table that must total 100, an FMEA whose RPN must be S×O×D: onecheckblock turns the rule into an error or warning on the badge. - Let the badge be your to-do list. Click an issue to jump to its line; fix errors before warnings.
- Use one document, many views. Add a
forestand afunnel_plotview to the samemetarather than two documents. - Check the example stamp before you submit. If you started from a fictional starter, delete its "EXAMPLE text" notice once the values are yours.
- Rename with F2, not find-and-replace. It changes every reference and nothing inside strings or comments.
Limits and known constraints
- The Lab is part of Starter and above. Live sessions need Plus; voice and screen sharing need Ultra or Enterprise.
- Documents, comment threads and revision snapshots are stored in your browser first. Browser storage is finite, and a full store stops saves (see Troubleshooting). Comment threads stay in the browser they were written in.
- Revision history keeps up to 50 snapshots per document.
- Share links carry the whole document and stop at about 8 KB.
- Document names are at most 80 characters.
- Comment anchors are line numbers, not tracked ranges.
- Only one side pane is open at a time.
- The print-size PNG needs a view that declares a drawn size; otherwise you see "This view does not declare a drawn size, so it cannot be exported at a print width".
- Rows bound on the Data bench are kept in this browser, up to 400,000 characters per document; larger rows are kept for the session only. See The Data and Statistics benches.
- The flowss Lab Agent (Quick and multi-step), auto-fix and photo import need AI; nothing else does.
Troubleshooting
| Message or symptom | What it means | What to do |
|---|---|---|
| "Local storage is full — the document could not be saved." followed by how much the Lab is using and its largest item (for example "Largest: revision history (612 KB).") | The browser refused the write | Clear the revision history of documents you no longer need (Clear revision history in the Revision history pane), delete old documents, release bound rows on the Data bench, then Retry the save |
| "Local storage is unavailable in this browser — changes stay in this tab only." | The browser blocks storage (often private browsing) | Use a normal window, or export your work before closing the tab |
| "Fix N errors to render" | Nothing could be drawn, usually because of an unclosed quote or comment | Go to the first error, or open the status badge and click each issue |
| "Add a view to draw it" | No view line | Add a view, or type view main: consort (or another renderer) |
| "The “…” view couldn’t be drawn" | The renderer failed on this view | Switch view or undo the last change; report it if it persists |
| "Editor failed to load" | The editor did not arrive within 10 seconds | Retry; if it keeps failing, reload the page |
| "Render a view before exporting it" (also "… before copying it", "… before exporting it at a print width" and "… before assembling a bundle") | No figure is drawn yet | Add a view, or fix the error that stops the document being read. Export SVG gives no message in this state; it simply downloads nothing |
| "Nothing to export — this document declares no views" or "None of the views could be rendered" | Export all views (ZIP) found nothing it could draw | Add a view, or fix the views named in the message. When only some views fail, the ZIP is still made and the message names the ones left out |
| "This document is too large for a share link…" | Over the share-link size limit | Export it, or use a live session |
| "The clipboard is only available on a secure (https) page." | You copied a share link from a page that is not on https | Open flowss over https |
| "Clipboard images aren't supported in this browser" | The browser cannot copy images | Use Export PNG (2×) instead |
| "Full-screen unavailable — hid the side panels instead" | The browser refused full screen (common in embedded frames) | The panels are hidden instead; reopen them from the rail |
| "This is your only document — make another before deleting this one" | You tried to delete your last Lab document | Create another first |
| "That document isn’t in your library any more" | It was deleted elsewhere | Pick another document from the list |
| "Nothing to rename — the document does not compile yet" | Rename needs a compiling document | Fix the errors first |
"x is already declared in this document…" | Rename target id is taken | Choose an unused id |
| Accept refuses an AI change | The change belongs to another document | Switch back to that document and accept it there |
| "Saved rows released — that document's column checks are off" | You released a dataset | Load the file again on the Data bench to turn column checks back on |
| Prompt says "AI is off — set up key" | No platform AI key is configured and you have not added your own | Add your own key (Starter and above); see Bring your own AI key |
For every compiler message, see The FlowScript language. For general problems, see Troubleshooting and FAQ.
Related pages
- The FlowScript language
- Lab views and renderers
- Reporting standards
- The Data and Statistics benches
- Publishing, provenance and compliance in Lab
- Figure, for dataset-first journal figures
- Evidence, for evidence graphs from real papers
- Live collaboration and Comments and review
- AI in flowss
- Plans and what they include
- Keyboard shortcuts
