Docs and methods
Drybench Virtual Wet Lab.
Rehearse a supported liquid-transfer plan with declared inventories and instrument limits. The three-dimensional view illustrates the same nominal ledger shown in the table.
Updated 26 October 2026 · v0.1.0
Methods and assumptions
Follow a liquid-transfer plan through a three-dimensional bench. Inspect each well's nominal volume, concentration and material origins; change an action and compare the result with the original. Open your own supported plan, or bring a prepared serial-dilution recipe from the calculators.
For each transfer, the model subtracts the withdrawn volume and proportional material amounts from a declared homogeneous source, then adds them to the destination. Every channel is checked before any part of a multichannel action changes the state. Unknown composition remains unknown. Mixing is a declaration made by the plan, not a fluid-dynamics prediction.
The original and edited preparations are retained separately. Save a private protocol in your research workspace or download its versioned project file. Reopening preserves the declared setup and synthetic-example status. The animation illustrates the same accepted states that appear in the table.
Material balance for an ideal homogeneous transfer: Δn = n_source × ΔV / V_source; C = n / V when V > 0. Exact rational reference: pipeline/virtual-wet-lab/reference.py, reference 1.0.0.
A transfer checks every source, destination, instrument and channel before updating any container. If a check fails, the previous accepted state remains. An empty destination inherits a homogeneous aliquot; adding to a nonempty destination records it as unmixed, and aspiration then waits for an explicit declaration of homogeneity. Known amounts follow the withdrawn fraction; unknown amounts remain unknown. Empty wells have no concentration.
Material history reports nominal source ancestry. Possible contact through reused tips is a separate graph, without a probability or contamination amount. No residual liquid is assigned by default.
- 1. Research planning and rehearsal, not medical advice. Calculations assume exact nominal liquid transfers and additive volumes; they do not establish that a preparation will work at the bench.
- 2. Supports a bounded 96-well plate, a twelve-position tube strip and declared reservoirs, with one- or eight-channel transfers. Unsupported layouts are refused.
- 3. Aspiration requires a declared homogeneous source. A mixing action records that assumption; the tool does not calculate mixing time, shear or dissolution.
- 4. Unknown material amounts stay unknown. An empty container has no defined concentration. Displayed concentrations are bulk averages, not spatial measurements.
- 5. Tip reuse shows possible contact paths only. Residual liquid, contamination amount, adsorption, evaporation, viscosity, pipette error and biological response are not predicted.
- 6. Capacity, reserve and instrument limits are the values you declare. Rendered geometry is illustrative and is not a calibrated labware definition or a robot instruction.
Sources and licences
Transfer reference and synthetic preparation
Transfer reference and synthetic preparationOur own contentDeclared ideal-transfer equations, a synthetic dilution example and a separately implemented exact-arithmetic reference.
Model 1.0.0; synthetic inputs are illustrative, not measured laboratory data.
Save and reopen
Save a private protocol to the research workspace, download a versioned project JSON file, or export a transfer list. The original and working plans, setup assumptions, model version and synthetic-example status stay attached. A project is a preparation plan, not evidence that work was performed.
Supported own-plan JSON uses schema virtual-wet-lab.plan, version 1. It declares materials, labware, containers, instruments and ordered transfer or mix commands. Volumes are litres and material amounts are moles. Every material amount must be supplied explicitly as a non-negative number or null for unknown. Unsupported versions or malformed input are refused without replacing the current plan.
For a prepared 96-well serial dilution in the calculators, Experimental opens a local setup handoff. Tube preparation and plate dispensing retain the calculator's sequence. Declare source inventories, capacities, reserves and instrument limits before accepting the preparation. A preparation allowance is not a withdrawal reserve and is not charged twice.
Reference calculations
- pipeline/virtual-wet-lab/reference.py
- Separately implemented exact rational SI reference and refusal cases, committed before production arithmetic.
- src/lib/wet-lab/engine.test.ts
- All applicable reference cases, conservation, explicit unknowns, atomic multichannel refusal and comparison.
- src/lib/wet-lab/calc-import.test.ts
- Native Calc preparation and control semantics, source consistency and refusal of unsupported inputs.
- src/apps/virtual-wet-lab/worker/client.test.ts
- Worker cancellation, stale-response fencing and bounded startup/computation.
The reference was committed before the production arithmetic. It uses Python Fraction for exact rational SI amounts, volumes and origins, plus hand-specified atomic refusal cases. Sixteen scenarios apply to the first transfer/mix model. A seventeenth records a future partial-tip primitive which this version does not support.
These are numerical reference checks on a stated ideal model. They do not measure a pipette, establish effective mixing or predict a biological outcome.
Published verification sets
| Methods | Oracle | Fixtures | Tolerance | Date | File |
|---|---|---|---|---|---|
| ideal-transfer-ledger | Python fractions.Fraction | 16 | 16 applicable v1 cases; relative 1e-12, absolute floors 1e-15 L, 1e-21 mol and 1e-15 mol/L; nulls, refusals and contact routes exact. The file also retains one unsupported future primitive reference. | 2026-10-26 | reference.json |
Oracles and build-time tools
Software the app's numbers were checked against, or its data built with. None of it ships with the app or is a dependency of it.
- Python fractions.Fraction 3.12.14 (PSF-2.0; Oracle; 2026-10-26). Separately implemented exact rational transfer, ancestry, conservation and refusal cases.
- Blender 4.3.2 (GPL-3.0-or-later; Build-time tool; 2026-10-26). Authored laboratory geometry exported as glTF; Blender code is not shipped.
Data and privacy
What leaves your device. Requests for Drybench Virtual Wet Lab's own files (pages, scripts, data files and images) go to the host that serves it. That host keeps standard web-server logs (IP address, user agent, requested address, time). Anything in the address bar before the # (a search, a SMILES, an accession or a step) is sent to this site's host when a page loads or a link is opened; anything after the # is not sent. No external scientific host is contacted for these operations. The app carries no analytics and no error reporting, and loads no font or script from any other origin. Optional Bench sign-in and billing contact the site server and its configured account providers; choosing an account backup uploads the selected Study.
What stays on your device. Your preparation plans, source inventories and saved protocols, your preferences, and anything you have not chosen to export, share or back up to your account. They live in this browser's storage on this device.
Where you choose to send data. A link you copy carries what you were looking at (the selected view, never your materials, quantities or transfer plan); anyone who receives it can read it, and mail and chat tools may fetch the link to show a preview. A file you export or share goes wherever you send it.
The app contacts no host but its own.
These are the exact header values, generated from the app's registry entry.
- Content-Security-Policy
- default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self' blob:; connect-src 'self' blob:; img-src 'self' data: blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'
- Referrer-Policy
- no-referrer
- Permissions-Policy
- camera=(), microphone=(), geolocation=(), payment=(), usb=()
- X-Content-Type-Options
- nosniff
- Cross-Origin-Opener-Policy
- same-origin
Where it runs and what it sends
- Open a preparationChoose the synthetic example, import a supported plan or bring a serial-dilution recipe from the calculators.
- Declare the setupReview source inventories, composition, capacities, reserves and instrument limits.
- Rehearse and compareStep through accepted transfers, inspect wells, change the plan and keep the version you intend to review.
Built for the keyboard and for screen readers
Everywhere in the app
- Show every keyboard shortcut
- ?
- Go to the search field
- /
- Open the command palette
- ControlK
- Open Settings
- Control,
- Close the innermost panel, menu or dialog
- Escape
In this app
Single-key shortcuts work outside text fields and can be turned off in Settings.
Commitments
- Controls work from the keyboard, with focus always visible.
- One polite live region announces what changes, for screen readers.
- Reduced motion is honoured, from your system setting or the app's own switch.
- Works at 375 px wide.
Questions buyers ask
Can I use my existing preparation?
Yes, within the supported operations. Bring a prepared 96-well serial-dilution recipe from the calculators, or import a versioned preparation JSON file. Review the physical setup before replaying it.
Does this predict the real experiment?
It checks an idealised transfer plan. It tracks nominal volume, material amount and origins, but does not predict pipetting error, mixing kinetics, contamination levels or biological response.
What does the three-dimensional animation calculate?
The animation illustrates accepted states from the transfer ledger. Camera movement and animation timing do not change the scientific results.
Can I return to an earlier version?
The original preparation stays unchanged while you edit a working copy. Save both as a private protocol or download the project file to reopen them later.
Does it calculate contamination or solvent limits?
Tip reuse shows possible contact paths without predicting contamination amounts. Calc solvent-carrier assumptions are retained as original context; carrier limits are not recalculated after rehearsal edits.
Next step
Want this tuned to your preparation?
Email m.beale@icloud.com with what you need, or use the contact page.