Skip to content
Drybench Calc product page

Docs and methods

Drybench Calc.

How the calculators turn inputs into masses, volumes, concentrations, pKa values and extinction coefficients, what they let you take away, how each module is checked against a named oracle, and what leaves your browser (nothing).

Updated 17 October 2026 · v0.2.0

Methods

What the app shows, how it works and how it was built, in the words of its own write-up, followed by the parameter defaults and the data sources with their licences.

What it does

One live page, the bench sheet, holds the calculations a bench day needs: the mass to weigh for a molarity, the volume for a mass you actually weighed, a C1V1 dilution with units that convert as you change them, a serial-dilution plan with the volumes per tube and the DMSO carried from the stock, a protein concentration from an A280 reading with the extinction coefficient computed from the sequence, a buffer's pKa at the working temperature, and a multi-component recipe table. Every input has its unit beside it and the answer updates as you type, rounded once at display; the link keeps the inputs, never the results, so a bookmark reopens the same sheet and recomputes it.

Salt forms, hydrates and purity are handled where they bite. A compound that arrives from the molecule app carries the formula of the whole input and of its parent, so an imatinib mesylate stock is weighed on 589.72 g/mol, not the parent's 493.62, and the sheet says what the shortfall would have been. A formula weight typed from the vial label or a certificate of analysis overrides every computed value, and a purity below 100 percent scales the mass. A curated table of 75 common reagents with their hydrate forms, PubChem identifiers and formula weights fills the field with one pick.

How it works

Every calculation runs in your browser from three pure modules the suite shares: units (SI prefixes as exact powers of ten, one base unit per quantity, so chained conversions never accumulate error), dilution (C1V1, stocks with purity and the parent equivalent, serial plans and recipes, and the buffer table from Goldberg, Kishore and Lennen 2002 with the Clarke and Glew temperature equation) and seq (the average molecular weight and the Pace 1995 extinction coefficient of a protein sequence, shared with the protein app so both show the same number). Formula weights are exact sums of the IUPAC CIAAW 2021 standard atomic weights, using the conventional value for the elements given as an interval, and are rounded once when shown.

The scientific methods run locally: the app contacts no host, needs no account for scientific use; optional Bench sign-in uses session cookies. The reagent table is a static file served with the app. A stock, a dilution plan, a buffer or a recipe you pin, send or add to a study is kept in this browser as a recipe object, with its inputs and the method versions it was made with, so it recomputes when reopened.

How it is checked

Each module is compared with a named external oracle on a published fixture set, never with its own output: 28 dilution and molarity cases worked exactly in rational arithmetic, including unit chains and the pipetting-flag edges; 58 formula weights of salts, hydrates and their parents with the formula from RDKit 2026.03.6 and the weight as a CIAAW 2021 sum in a separate decimal implementation, with PubChem's identifiers recorded; 15 buffers at 4, 25 and 37 °C against Goldberg's equation in NumPy; and 22 protein sequences from UniProt against Biopython's ProtParam for ε280, which agrees with the ExPASy ProtParam outputs recorded for nine of them. The fixture files, their hashes and the script that wrote them are published on the verification page.

Equations and defaults

Units
SI prefixes as exact powers of ten with one base unit per quantity (mol/L, L, g, g/mol); the micro sign and the Greek mu are read as one character; a value is converted once and rounded once when shown, half away from zero.
Molarity and stocks
n = C·V and m = n·M / purity; the volume for a weighed mass is V = m·purity / (C·M); the parent-equivalent mass of a salt or hydrate is m·MW(parent) / FW(form).
C1V1
C1·V1 = C2·V2 with the diluent V2 − V1; a stock weaker than the final concentration is refused rather than solved.
Sample normalisation for gel loading
The Dilution calculator's second view (method sample-normalisation 1.0.0). For a load volume V per well and a loading-dye stock factor k (0 for no dye, otherwise above 1), the dye is D = V/k and A = V − D is left for sample and diluent; the sample volume is s = m/c for a target mass m, or C·V/c for a target concentration C, with each sample's concentration c in mg/mL as entered. A sample with s > A is withheld with no volumes, and the largest amount it can deliver (c·A µg, or c·A/V mg/mL) is shown; otherwise the diluent is A − s and the planned mass s·c on unrounded volumes. A positive transfer below 2 µL is flagged, never refused. A concentration that is not a positive number makes its row invalid; a load or target that is not above zero, or a dye factor that is neither 0 nor above 1, refuses the batch. The view opens empty unless concentrations arrive from a standard curve in Assay; its worked example of five illustrative lysates loads only when chosen, carries a banner until cleared, and never reaches a worklist. It does not check the assay, the protein or the well's capacity, and volumes are taken as additive.
Serial dilution
Each tube holds R·W·f/(f − 1) before it passes V/f to the next, the last tube is made the same way and keeps V/f over after its wells (2.0.0; 1.0.0 made it to R·W), and the top tube takes V·C(top)/C(stock) from the stock; the solvent fraction at a point is the stock's fraction scaled by C(point)/C(stock).
Plate preparation sheet
An optional section of the serial dilution (method plate-sheet 1.0.0) that plans the plate the series fills. Each tube keeps batch(R, W, p, D) = R·W·(1 + p/100) + D for R replicate wells of W with overage p and dead volume D (overage on the bulk, per well, or both); a tube is made to keep·f/(f − 1) and passes tube/f to the next, as the constant-transfer serial dilution does; the top tube is drawn from the stock, or from an optional intermediate at or above the top point's concentration and below the stock's. The vehicle is diluent at the top point's carrier fraction, made from neat carrier for its own wells. Dead volume is charged once per prepared source, never per well. Dose positions come from the same placement Assay reads, so the two apps cannot disagree; vehicle, blank and positive-control lines are typed well ranges, and a positive control is listed with no concentration because you supply it. A plan that cannot be made gives no sheet and names why: an overage outside 0 to 1,000 percent, a negative dead volume, a series that does not plan, a stock weaker than the top point, an intermediate outside that range, a well range or start well that does not read or lies off the plate, wells that overlap or do not fit, a transfer below the minimum, a carrier above the maximum, or not enough stock. Everything on it is planned, not measured; volumes are taken as additive, and repeated wells share a stock and are not independent replicates. Print plate plan shows the same plan on paper with its map and every row, and adds no arithmetic.
Master mix
B = N × M × (1 + extra% / 100) + dead volume. Each shared component scales by B / M; separate additions scale by N. Final concentration refers to the completed reaction, including separate additions. One common liquid formulation and one mix vessel; volumes are treated as additive. The planner does not assess reagent compatibility, enzyme activity or reaction conditions. Separate samples must use the same entered volume; make another plan for a different formulation. Overage and dead volume default to zero; a minimum transfer is optional and applies to actual handling volumes. Method version 1.0.0; primary references read 9 October 2026: Thermo Fisher MAN0025706 B pp. 12–13, INTEGRA dead-volume guidance and Eppendorf small-volume pipetting guidance.
Bench flags
A pipetting step below 2 µL and a solvent fraction above 0.5 percent are flagged; both are bench conventions adopted on 6 October 2026, not instrument specifications.
Liquid-handler worklists
The plate sheet and sample normalisation write Tecan worklists: A;RackLabel;;;Position;;Volume records, then D; and W;, with positions numbered rear to front, then left to right (A1 = 1, B1 = 2, A2 = 9 on 96 wells), volumes in µL at two decimals with a warning when rounding moves one by more than 0.1 percent, and comment lines that say the file is a plan. The plate sheet's file covers only the dispense, from a tube rack, Tubes, to the Plate in the Dispense table's order; the tubes are prepared by hand. Normalisation's file draws diluent, then dye, then sample for each row, from Diluent, Dye and Samples to a 96-well Prep plate, and leaves out a zero volume. It is refused for a batch with a withheld or invalid row, for the worked example, or for more than 96 samples. A refused file is never offered for download. Neither offers an Echo pick list: both draw from tubes, and an Echo draws only from source-plate wells.
Bench checklist
Opened from C1V1, serial dilution, master mix, sample normalisation and the printable protocol. It lists the plan's own steps and volumes, with no added procedure, beside large tick boxes, and carries the plan's own flags (the 2 µL convention, the master mix's minimum transfer). Ticks are kept while it is open and cleared when it closes: a tick is a reminder on the screen, not a record that a step was done. The optional timer counts down from a stored end time.
Formula weights
Exact sums of the IUPAC CIAAW 2021 standard atomic weights held as integers in units of 10⁻⁴ g/mol, conventional values for the interval elements, hydrates as the anhydrous formula plus n × 18.015; imatinib 493.615 and its mesylate 589.715, shown as 493.62 and 589.72.
pKa at temperature
Goldberg, Kishore and Lennen 2002, equation 12: pK(T) = pK(Tr) − (ΔrH°/(R ln 10))(1/Tr − 1/T) − (ΔrCp°/(R ln 10))(Tr/T − 1 + ln(T/Tr)), with R = 8.31451 J/(K mol) and Tr = 298.15 K, from the paper's recommended values at zero ionic strength; the linear slope −ΔrH°/(R ln 10 Tr²) is shown as the approximation it is.
ε280 and A280
Pace et al. 1995: 5,500 per Trp, 1,490 per Tyr and 125 per cystine, in both cysteine conventions; c = A/(ε·l) and mg/mL = c·MW, with the average molecular weight from the ExPASy ProtParam residue masses the protein app uses.
A260
50, 40 and 33 µg/mL per absorbance unit for double-stranded DNA, RNA and single-stranded DNA, labelled as rules of thumb; no nearest-neighbour ε260 in this version.
Reagent table
75 reagents hand-typed with their formulas and hydrate waters, each row's PubChem CID, InChIKey and formula read on 6 October 2026 and checked against the formula; pKa values are the Goldberg entries each buffer names, typed once.

Data sources, licences and versions

Sources and licences

  • IUPAC CIAAW standard atomic weights 2021Values cited from the published table

    Formula weights: the conventional value for each interval element (H, C, N, O, S and Cl among them) and the abridged value for the rest, as exact decimals held in one table under src/lib.

    Prohaska T, Irrgeher J, Benefield J, et al. Standard atomic weights of the elements 2021 (IUPAC Technical Report). Pure Appl Chem 2022;94:573-600. ciaaw.org read 6 October 2026.

  • Goldberg, Kishore and Lennen 2002, buffer ionisation thermodynamicsValues cited from the published table

    pK, ΔrH° and ΔrCp° at 298.15 K and zero ionic strength for 34 buffer reactions, and the paper's equation 12 for pK at another temperature.

    Goldberg RN, Kishore N, Lennen RM. Thermodynamic quantities for the ionization reactions of buffers. J Phys Chem Ref Data 2002;31:231-370. Section 8 read 6 October 2026.

  • Pace et al. 1995, molar absorption coefficientsMethod (cited)

    ε280 = 5,500 per Trp + 1,490 per Tyr + 125 per cystine, in both conventions (all cysteines paired, all reduced).

    Pace CN, Vajdos F, Fee L, Grimsley G, Gray T. How to measure and predict the molar absorption coefficient of a protein. Protein Sci 1995;4:2411-2423.

  • A260 conversion conventions (Thermo Fisher; Cavaluzzi and Borer 2004)Values cited from the published pages

    The A260 rules of thumb, in µg/mL per absorbance unit at 1 cm: 50 for dsDNA and 40 for RNA as Thermo Fisher prints them, and 33 for ssDNA, the convention NanoDrop instruments apply. Cavaluzzi and Borer measured 38 for non-repetitive ssDNA. These are conventions, not measurements, and not for oligonucleotides, which need a sequence-specific ε260.

    Thermo Fisher NanoDrop One FAQ; Thermo Fisher technical note MCS-TN1315-EN 2/25, Accurate Oligonucleotide Quantification with NanoDrop Spectrophotometers; Thermo Fisher, DNA and RNA Molecular Weights and Conversions; IDT, ‘Oligo quantification: Getting it right’ (modified 22 August 2025); Cavaluzzi MJ, Borer PN. Revised UV extinction coefficients for nucleoside-5′-monophosphates and unpaired DNA and RNA. Nucleic Acids Res 2004;32(1):e13, doi:10.1093/nar/gnh015 (Method 1: 33 µg per A260 unit). Read 17 October 2026.

  • ExPASy ProtParam residue masses and pK valuesValues cited from the documentation

    The average residue masses and the Bjellqvist pK values the protein app has always used, kept as the default so both apps give one number; a CIAAW-derived residue table sits behind a second id.

    Gasteiger E, Hoogland C, Gattiker A, et al. Protein identification and analysis tools on the ExPASy server. In: The Proteomics Protocols Handbook. Humana Press; 2005:571-607. Documentation read 5 October 2026.

  • PubChem (NCBI)No NCBI restrictions; depositor terms may apply

    The compound identifiers (CID and standard InChIKey) and formulas of the 75 reagents in the shipped table, read once when the table was curated and checked against the hand-typed formulas; nothing is fetched while you work.

    Kim S, Chen J, Cheng T, et al. PubChem 2025 update. Nucleic Acids Res 2025;53:D1516-D1525. Records read 6 October 2026.

  • uqr 0.1.3MIT

    The QR code on a stock label, drawn in your browser as inline SVG; it loads only with the label dialog.

    Copyright (c) 2023 Anthony Fu.

    Third-party notices

  • NIH Global Substance Registration SystemCited public substance identity facts

    The complete chemical definition explicitly linked to retatrutide's UNII record, including modified residues and stereochemistry. Shipped locally; the source identifiers and retrieval date accompany the structure.

    NCATS / FDA Global Substance Registration System, UNII NOP2Y096GV, alternate chemical definition 210e2d2c-6b8e-4b0d-b432-20057541f324, version 1, retrieved 8 October 2026.

Times on screen are local time with the UTC offset; times in exports are UTC. Dates with no time are shown at the precision the source gave them.

Exports

The Export menu offers the bench sheet as CSV (every input and answer, units in the headers, the method and constants table per row, with the provenance sidecar), the serial-dilution plan as TSV with units in the column headers (the table the assay analyser reads), the recipe as JSON (inputs, components, method versions and constants tables, never results), the bench sheet as a printed page with the method block, a stock label with a QR code of the calculation's link, the plate preparation sheet as CSV and as a printed plate plan with its map, and Tecan worklists for the plate sheet and for sample normalisation, whose plan also copies as a tab-separated or Markdown table. A worklist is a plan for the robot to follow, written only when every row is planned. Copy link puts your inputs after the # of the address; the method block copies as text.

Release gate: before the app leaves the preview, its exports and printed reports will carry the data versions, parameters, limits and a timestamp needed to reproduce a result, as the regulatory position says. This section will describe each format as it ships.

Verification

Each module below is a set of automated tests in the app's source code, with the expected results written into the tests. They check the app's logic against recorded inputs and stored reference records; none of them calls a live service.

src/lib/units/units.test.ts and formula-mass-fixtures.test.ts
Unit conversions and spellings; every formula weight in fixtures/formula-mass.json against the CIAAW sum, exactly, with RDKit's own weight recorded beside each organic.
src/lib/dilution/dilution.test.ts and fixtures.test.ts
C1V1, stocks, the parent equivalent, serial plans with their flags and recipes against fixtures/dilution.json to nine significant figures, and pK at three temperatures against fixtures/buffers.json within 0.01 and 0.0001.
src/lib/dilution/normalization.test.ts
Sample normalisation against pipeline/lab-calculators/fixtures/normalization-v1.json (12 cases, written in Python fractions by pipeline/lab-calculators/normalization/reference.py from the method, never from the engine): volumes, masses and limits at relative 1e−12; statuses, flags and refusals exactly.
src/lib/dilution/plate-sheet-oracle.test.ts
The plate preparation sheet against src/lib/dilution/fixtures/plate-sheet-2.json, written in Python fractions by pipeline/lab-calculators/plate_sheet_reference_2.py: values at relative 1e−9; wells, roles, sources and refusals exactly. The oracle places dose wells by its own reading of the placement rule and checks one 96-well and one 384-well layout against wells written out by hand; the engine's wells, from the shared placement, must match exactly.
src/lib/export/liquid-handlers/liquid-handlers.test.ts
The Tecan writer against the record layout, the position numbering and five example lines in liquid-handler-formats-v1.json, transcribed on 17 October 2026 from TeselaGen's Tecan worklist page and robotools' example worklists. The Echo writer against the column header, the nL unit and the droplet sizes recorded there from TeselaGen's Echo worklist page and two Beckman Coulter product sources. Both refusals return no file text.
src/components/tools/lab-calculators/plate-sheet-worklist.test.ts and normalization-worklist.test.ts
The plate sheet's worklist on its oracle's first planned case: every dispense row becomes one aspirate, dispense and wash triple at its numeric positions in µL. The normalisation worklist on every planned case of its oracle: each sample keeps its own source and destination position, a batch with a withheld or invalid row writes no file, and a 97th sample refuses the file.
src/lib/dilution/master-mix.test.ts and src/apps/lab-calculators/master-mix-workspace.test.ts
Independently hand-worked preparation quantities, volume/composition conservation, explicit shared and separate allowances, mixed units, impossible input refusal, exact complete/incomplete recipe resume and immutable result retention. This is arithmetic verification; it does not validate a laboratory protocol or pipette.
src/lib/seq/protein-mass.test.ts and extinction-fixtures.test.ts
ε280 and the molecular weight against the recorded ExPASy ProtParam outputs and Biopython's ProtParam on fixtures/extinction.json, exactly; a guard that the constants live in src/lib alone.
src/lib/fixture-hashes.test.ts and pipeline/lab-calculators/verify-reagents.test.ts
Every fixture file matches the SHA-256 the oracle script recorded and its published copy; every reagent's weight recomputes from its formula and agrees with PubChem's at the precision PubChem prints.
pipeline/lab-calculators/reference.py
The oracle script (Python 3.11 with the pinned requirements.txt): rational and decimal arithmetic, RDKit 2026.03.6, NumPy 2.4.6 and Biopython 1.85; it writes the fixtures and their hashes and copies them under public/verification.

Release gate: before the app leaves the preview, each release will publish a verification dataset with expected outputs on this page, so you can run your own checks.

Published verification sets

MethodsOracleFixturesToleranceDateFile
formula-mass, stock-salt-purityRDKit58exact (decimal sums of the same CIAAW 2021 table)2026-10-06formula-mass.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
stock-salt-purity, c1v1, recipe-table, pipette-minimum-2ul, dmso-carry-overPython fractions and decimal31nine significant figures; display values exact2026-10-06dilution.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
pka-temperature-goldbergNumPy15within 0.01 (and within 0.0001) at 4, 25 and 37 °C2026-10-06buffers.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
extinction-280-pace, a280-beer-lambertBiopython22exact2026-10-06extinction.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
master-mix-preparationPython fractions and decimal14nine significant figures; refusals exact2026-10-10master-mix.json
serial-dilution, pipette-minimum-2ul, dmso-carry-overPython fractions and decimal10relative 1e-9; each step exactly the fold; flags exact2026-10-10serial-2.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
plate-sheet, serial-dilutionPython fractions and decimal22relative 1e-9; wells, roles and refusals exact; compound, carrier and volume balance asserted2026-10-10plate-sheet-2.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
antibody-dilutionPython fractions and decimal10relative 1e-9; refusals exact2026-10-10antibody-batch.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
od600-cell-estimatePython fractions and decimal14relative 1e-9; refusals exact2026-10-10od600.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
buffer-recipe, pka-temperature-goldbergNumPy18mass relative 1e-9; setpoint within 0.01 pH, equal to 2 decimals; refusals exact2026-10-10buffer-recipe.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
unit-conversion, temperature-offsetPython fractions and decimal44prefix changes and temperature exact as decimal strings; molar bridges relative 1e-9; refusals exact2026-10-10unit-converter.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
cell-seeding, centrifuge-rcf-rpm, percent-solution, antibody-dilutionPython fractions and decimal41relative 1e-9; refusals, flags and text rows exact2026-10-10preparation-3.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
a280-beer-lambertPython fractions and decimal14relative 1e-9; refusals exact2026-10-17absorbance-a280.jsonRecorded for version 0.6.0; the test suite checks the current engine against it.
a260-a280-ratioPython fractions and decimal10relative 1e-9; refusals exact2026-10-17absorbance-ratio.jsonRecorded for version 0.6.0; the test suite checks the current engine against it.
a260-rules-of-thumbPython fractions and decimal19relative 1e-9; refusals exact2026-10-17a260-2.jsonRecorded for version 0.5.0; the test suite checks the current engine against it.
cell-counting-volumePython fractions and decimal28relative 1e-9; refusals and receipt integrity exact2026-10-18cell-counting-v3.jsonRecorded for version 0.7.0; the test suite checks the current engine against it.
dose-per-cell-arithmeticPython fractions and decimal35relative 1e-9; refusals and receipt integrity exact2026-10-18dose-plan-v3.jsonRecorded for version 0.7.0; the test suite checks the current engine against it.
cell-counting-volume, dose-per-cell-arithmeticPython fractions and decimal49each receipt reads or reads as null, exactly; density identities within float rounding2026-10-20receipt-integrity-v1.jsonRecorded for version 0.9.0; the test suite checks the current engine against it.
one-intermediate-dilutionPython fractions and decimal13feasibility exact; plan within one grid step2026-10-10intermediate-dilution.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 and decimal 3.11.15 (Python-2.0; Oracle; 2026-10-06). exact rational and decimal arithmetic for the dilution, molarity, formula-weight and preparation fixtures
  • Python fractions and decimal 3.13.16 (Python-2.0; Oracle; 2026-10-10). exact rational arithmetic for the everyday-preparation fixtures (cell seeding, RCF and RPM, percent solutions, antibody dilution)
  • RDKit 2026.03.6 (BSD-3-Clause; Oracle; 2026-10-06). the molecular formula of each organic compound from PubChem's SMILES, and its own weight for comparison
  • NumPy 2.4.6 (BSD-3-Clause; Oracle; 2026-10-06). Goldberg's equation 12 for pK at 4, 25 and 37 °C
  • NumPy 2.5.3 (BSD-3-Clause; Oracle; 2026-10-10). Goldberg's equation 12 for the buffer-recipe setpoints
  • Biopython 1.85 (Biopython License Agreement (BSD-3-Clause file by file); Oracle; 2026-10-06). ε280 by ProtParam for the extinction fixtures

Every row is one fixture compared with the engine when this page was built; the full sets are the published files, and pipeline/lab-calculators/reference.py wrote them.

Formula weights of salts, hydrates and parents

Expected values from CIAAW 2021 sum in Python decimal, formula from RDKit (Python 3.11.15; RDKit 2026.03.6), recorded 2026-10-06; tolerance exact; 12 of 58 shown, all passing. formula-mass.json sha256 b8319e3e0ef032e2…

InputExpectedOursDifferencePass
imatinib (C29H31N7O)493.615493.6150yes
imatinib mesylate (C30H35N7O4S)589.715589.7150yes
metformin (C4H11N5)129.167129.1670yes
metformin hydrochloride (C4H12ClN5)165.625165.6250yes
dabrafenib (C23H20F3N5O2S2)519.560519.560yes
dabrafenib mesylate (C24H24F3N5O5S3)615.660615.660yes
erlotinib hydrochloride (C22H24ClN3O4)429.901429.9010yes
erlotinib (C22H23N3O4)393.443393.4430yes
sorafenib tosylate (C28H24ClF3N4O6S)637.026637.0260yes
sorafenib (C21H16ClF3N4O3)464.828464.8280yes
doxorubicin hydrochloride (C27H30ClNO11)579.983579.9830yes
doxorubicin (C27H29NO11)543.525543.5250yes

Molarity, dilutions and the salt-form correction

Expected values from Python fractions and decimal (3.11.15), recorded 2026-10-06; tolerance nine significant figures; 12 of 15 shown, all passing. dilution.json sha256 c569983c9d1a2706…

InputExpectedOursDifferencePass
mass-nacl-150mm8.766 g8.766 g0yes
mass-imatinib-mesylate-10mm0.00589715 g0.00589715 g8.673617380e-19yes
mass-erlotinib-hydrochloride-5mm0.00429901 g0.00429901 g8.673617380e-19yes
mass-tris-1m60.5675 g60.5675 g0yes
mass-hepes-20mm1.191505 g1.191505 g0yes
mass-glucose-5um0.0000090078 g0.0000090078 g0yes
mass-edta-500mm18.6118 g18.6118 g0yes
volume-for-mass-imatinib-mesylate0.001928049990249527314041528534970282254988 L0.00192804999 L-4.336808690e-19yes
volume-for-mass-staurosporine0.002143434339104173052314801914515551687847 L0.002143434339 L0yes
volume-for-mass-small0.01428571428571428571428571428571428571429 L0.01428571429 L0yes
c1v1-10mm-to-50um0.000001 L0.000001 L0yes
c1v1-1m-to-150mm0.0075 L0.0075 L0yes

pK at 4, 25 and 37 °C

Expected values from Goldberg 2002 equation 12 in NumPy (NumPy 2.4.6; Python 3.11.15), recorded 2026-10-06; tolerance within 0.01; 12 of 45 shown, all passing. buffers.json sha256 18881ec180af861e…

InputExpectedOursDifferencePass
Tris at 4 °C8.71038.7103-0.00000yes
Tris at 25 °C8.07208.07200.00000yes
Tris at 37 °C7.75277.75270.00004yes
HEPES at 4 °C7.82817.8281-0.00001yes
HEPES at 25 °C7.56407.56400.00000yes
HEPES at 37 °C7.42387.42380.00004yes
MOPS at 4 °C7.46057.46050.00002yes
MOPS at 25 °C7.18407.18400.00000yes
MOPS at 37 °C7.04007.0400-0.00003yes
MES at 4 °C6.46576.46570.00005yes
MES at 25 °C6.27006.27000.00000yes
MES at 37 °C6.16956.1695-0.00002yes

ε280 (cystines / reduced)

Expected values from Biopython Bio.SeqUtils.ProtParam (Biopython 1.85; Python 3.11.15), recorded 2026-10-06; tolerance exact; 12 of 22 shown, all passing. extinction.json sha256 94e04f78b54b8d3a…

InputExpectedOursDifferencePass
Insulin (110 aa)17335 / 1696017335 / 169600yes
Hemoglobin subunit beta (147 aa)15595 / 1547015595 / 154700yes
Transthyretin (147 aa)18575 / 1845018575 / 184500yes
GTPase KRas (189 aa)13660 / 1341013660 / 134100yes
Cellular tumor antigen p53 (393 aa)36035 / 3541036035 / 354100yes
Epidermal growth factor receptor (1210 aa)128890 / 125140128890 / 1251400yes
Spike glycoprotein (1273 aa)148960 / 146460148960 / 1464600yes
Hemoglobin subunit alpha (142 aa)9970 / 99709970 / 99700yes
Tubulin beta chain (444 aa)46340 / 4584046340 / 458400yes
Lysozyme C (147 aa)37970 / 3747037970 / 374700yes
Albumin (607 aa)49915 / 4779049915 / 477900yes
Green fluorescent protein (238 aa)22015 / 2189022015 / 218900yes

Security overview

Scientific computation runs in your browser, and individual apps need no account. Optional Bench accounts and backups use the site server and configured providers. The privacy statement, the hosts it contacts and the headers its workspace is served with are generated from its registry entry, the same record that sets the browser's policy.

What leaves your browser

What leaves your device. Requests for Drybench Calc'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. The compound names you type into search go directly from your browser to the public services in the table below, exactly as if you used their websites; they see those identifiers and your IP address, under their own terms. 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. Anything you save in the app, 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 reagent, masses, volumes, sequence and dilution steps you entered); 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.

Hosts the app contacts

  • pubchem.ncbi.nlm.nih.gov

    Operator
    NCBI, U.S. National Library of Medicine
    What for
    Retrieves the selected compound's complete formula and structure through this site.
    What it receives
    the compound name searched or selected
    When
    on lookup

Headers the workspace is served with

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' https://pubchem.ncbi.nlm.nih.gov 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

Limits

  1. 1. For research and education only, and not medical advice: the stock, dilution and buffer calculations here are not for dosing or clinical preparation.
  2. 2. Formula weights use the IUPAC 2021 conventional atomic weights, so a vendor label may differ in the third decimal; a weight typed from the vial or a certificate of analysis overrides every computed value.
  3. 3. pKa values are thermodynamic values at zero ionic strength from Goldberg et al. 2002; ionic strength and buffer concentration shift the working pKa and are not applied here, so a buffer's final pH is for a meter to confirm.
  4. 4. ε280 is the Pace et al. 1995 estimate for a folded protein in water; the measured value can differ by several percent, and a tag changes it, so the sheet computes the tagged construct when you give it.
  5. 5. The A260 conversions (50 µg/mL per unit for double-stranded DNA, 40 for RNA, 33 for single-stranded DNA) are rules of thumb; an oligonucleotide's ε260 by nearest neighbour is not computed here.
  6. 6. The 2 µL pipetting flag and the 0.5 percent DMSO flag are bench rules of thumb, not instrument specifications.
  7. 7. The reagent table holds 75 common reagents as single compounds; mixtures such as kanamycin lots, polymers such as Triton X-100 and proteins such as albumin have no single formula weight and are not in it.
  8. 8. No offline use: the pages are served by the site, and nothing is installed.
  9. 9. A link keeps the inputs after the # of the address; it is not sent to a server, but it does stay in browser history and in any chat the link is pasted into.
  10. 10. A compound record that arrives from another app carries that app's formula weight as reported; the weight shown here is recomputed from its formula with the CIAAW 2021 table, and the two can differ in the second decimal.
  11. 11. The serial-dilution planner assumes each tube is made in one step from the tube before it and that the diluent carries no solvent of its own. Every tube, the last included, is made to the same volume with the same transfer, so the last keeps one transfer's volume over. Serial dilution 1.0.0: last point under-diluted by f/(f − 1); any plan printed from 1.0.0 is affected.
  12. 12. The plate preparation sheet gives planned volumes and concentrations, not measured ones; volumes are treated as additive, dead volume is charged once per source and the overage in bulk unless you choose otherwise. Repeated wells share a stock; they are not independent replicates.
  13. 13. RCF and RPM convert with the published rounded coefficient 1.118 × 10⁻⁵ and the radius you supply; no centrifugation time, rotor model or rotor limit is supplied or certified.
  14. 14. Percent solutions need an explicit basis (w/v, w/w or laboratory v/v); no density is assumed, so no basis converts to another or to molarity.
  15. 15. Cell seeding uses the density, viability and targets you supply; it recommends no density, predicts no growth or confluence, and a 1:n split predicts nothing.
  16. 16. Antibody dilutions use the stock and target, or the 1:n ratio, that you or your datasheet supply; no dilution is recommended and specificity is not predicted.
  17. 17. Buffer setpoints correct the pK for temperature only (Goldberg et al. 2002, zero ionic strength), for the 15 buffers transcribed twice, between 274 and 350 K; ionic strength, other solutes and titrant amounts are not modelled.
  18. 18. OD600 estimates use only the factor you supply with its basis, source and calibrated range; readings outside that range are refused, and an estimate is never a count or a viable count.
  19. 19. The unit converter scales within one quantity and converts molar to mass units only through the formula weight you supply for the exact form; it offers no conversion that needs a density, and reads Da as g/mol.

Where it runs and what it sends

  1. Type two numbersPick a calculator or open a task page, enter what you know with its unit, and the answer appears as you type, rounded once at display and announced once when it settles.
  2. Bring the compound or the proteinSend a molecule from the molecule app or a target from the protein app, or pick a reagent from the table: the formula weight or the sequence arrives with it, and a weight from the vial label overrides it.
  3. Keep it, label it, share itThe link keeps your inputs after the # of the address; a stock, plan or recipe you pin, send or add to a study becomes an object in this browser, and a label prints with a QR code of the link.
  4. Local calculations, broad compound lookupCalculations, the built-in reagent table and QR codes run in your browser. Searching beyond the table sends compound names through this site to PubChem; no account is needed for calculation.

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

Go to molarity and stocks
1
Go to the C1V1 dilution
2
Go to the serial-dilution planner
3
Go to A280 and A260
4
Go to buffer pKa at temperature
5
Go to the recipe table
6
Go to the master mix
7
Go to everyday preparation
8
Open the stock label
l
Pick a reagent
r

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

Why does the formula weight differ from the one on my vial?

The app sums the IUPAC CIAAW 2021 standard atomic weights, using the conventional value for elements given as an interval, so it can differ from a vendor's table in the third decimal. The weight on your vial or certificate of analysis is the one for your lot: type it into the formula-weight field and it overrides the computed value everywhere, with the chip saying so.

What does the salt-form correction do?

A compound sent from the molecule app arrives with the formula of the whole input and of its parent. Imatinib mesylate is 589.72 g/mol while imatinib is 493.62, so weighing the parent's mass for a mesylate stock falls short by about 16 percent. The sheet weighs on the form in the vial and shows the parent-equivalent mass and the shortfall.

How is the pKa at 4 °C worked out?

From the pK, enthalpy and heat capacity of ionisation that Goldberg, Kishore and Lennen published for each buffer in 2002, through their equation 12. For Tris that gives about 8.71 at 4 °C against 8.07 at 25 °C, so a buffer set to pH 8.0 at the bench reads about 8.6 on ice. The values are at zero ionic strength; your meter has the last word.

Where does the extinction coefficient come from?

From the sequence, by the Pace et al. 1995 method: 5,500 per tryptophan, 1,490 per tyrosine and 125 per cystine, shown both with all cysteines paired and all reduced. The protein app computes the same number from the same shared module. If your construct carries a tag, paste the tagged sequence or send the construct, and the sheet uses it.

Is anything sent to a server?

Compound-name suggestions use the bundled catalogues. A public compound lookup can send the selected name through this site to PubChem for its complete formula and structure. Calculation inputs stay after the # of the address, which the browser never sends, and saved stocks, plans and recipes are stored in this browser. Anyone with a shared link can read its inputs.

How are the numbers checked?

Each module is compared with an external oracle on a published fixture set: exact rational arithmetic for dilutions, RDKit formulas with a separate CIAAW sum for formula weights, NumPy for Goldberg's equation and Biopython's ProtParam for ε280. The fixture files, their hashes and the script that wrote them are on the verification page, and the badge on each method names the oracle, the count, the tolerance and the date.

Can I use it for dosing or clinical preparations?

No. It is research and education software and not medical advice; its stock and dilution arithmetic is for the bench, and nothing here has been validated for clinical or regulated use.

Next step

Want this tuned to your bench?

Email m.beale@icloud.com with what you need, or use the contact page.