how-to · reconstitution · formulas · code

How to reconstitute peptides: the math, step by step

To reconstitute a peptide, a measured volume of liquid is added to the freeze-dried powder, and the concentration is the vial mg divided by the mL added. A 5 mg vial with 2 mL is 2.5 mg/mL, or 25 mcg per unit on a U-100 syringe. Approved products name the liquid, the volume and how to mix.

Open Peptide Calculator editorial teamUpdated 8 sources

Arithmetic, not instructions for useThis page covers the numbers and what approved labels say. It does not teach injection technique. Sterile handling and whether a product should be used at all are questions for a pharmacist or prescriber; most peptides sold online have no approved label.

How to reconstitute peptides: the five numbers

Reconstituting a peptide comes down to five numbers, worked out in this order:

  1. Vial amount. The mg printed on the label, for example 5 mg.
  2. Diluent. The liquid the product's label names. Approved products specify it; the two current tesamorelin products use different ones.[3][4]
  3. Volume. How much liquid goes in, for example 2 mL. For an approved product the label sets this too.
  4. Concentration. Vial mg ÷ mL: 5 ÷ 2 = 2.5 mg/mL, which is 25 mcg in each U-100 unit.
  5. Units for an amount. Amount ÷ concentration × 100: 250 mcg is 0.25 ÷ 2.5 × 100 = 10 units.
Reconstitution math in four boxes A 5 mg vial plus 2 mL of liquid gives 2.5 mg per mL, which is 25 mcg per unit. An amount of 250 mcg is 0.1 mL, which is 10 units on a U-100 syringe. vial5 mg concentration2.5 mg/mL25 mcg per unit volume0.1 mL U-100 syringe10 units ÷ 2 mL 250 mcg ÷ × 100
The whole calculation for a 5 mg vial mixed with 2 mL and an amount of 250 mcg. Every tool on this site runs these same steps.

The reconstitution calculator runs steps 4 and 5 for any numbers, and the bac water page covers step 2 in detail.

How to mix peptides: what approved labels say

The only authoritative mixing instructions are those on approved labels, and they differ by product.

Mixing instructions on current FDA labels
ProductLiquid and volumeHow the label says to mixAfter mixing
Egrifta SV (tesamorelin 2 mg)[3]0.5 mL Sterile Water for InjectionRoll gently; do not shakeUse immediately
Egrifta WR (tesamorelin 11.6 mg)[4]1.3 mL Bacteriostatic Water for InjectionSwirl; do not shakeDiscard 7 days after mixing
Vyleesi (bremelanotide)[5]None: prefilled autoinjectorNo mixingSingle use

For peptides with no approved label, nobody has published tested instructions for diluent, mixing or stability. Bacteriostatic water's own label says it is only for dissolving drugs "according to instructions of the manufacturer of the drug".[6]

Peptide vial sizes on approved labels

Approved peptide products come in fixed vial sizes chosen with a fixed volume of liquid, so the concentration is known before anyone does any math.

Vial sizes of FDA-approved peptide products (current and historic)
ProductVial or containerLiquidConcentration
Egrifta (original, 2010)[7]1 mg vialSterile water1 mg/mL
Egrifta SV[3]2 mg vial0.5 mL sterile water4 mg/mL
Egrifta WR[4]11.6 mg vial1.3 mL bacteriostatic water8 mg/mL (label)
Geref (discontinued 2008)[8]0.05 mg ampule; 0.5 mg and 1.0 mg vialsNot available (label not online)—
Vyleesi[5]1.75 mg autoinjectorPrefilled, 0.3 mL5.83 mg/mL

Products sold as "research use only" come in whatever sizes the seller chooses, with no labeled liquid volume. The chart below covers the common round sizes, and the peptide dosage calculator handles any size.

Peptide reconstitution chart

This chart gives the concentration and the micrograms in 10 units for common vial sizes and liquid volumes.

mg/mL and mcg per 10 units (0.1 mL) after reconstitution
Vial1 mL2 mL2.5 mL3 mL
1 mg1 mg/mL · 100 mcg0.5 mg/mL · 50 mcg0.4 mg/mL · 40 mcg0.33 mg/mL · 33 mcg
2 mg2 mg/mL · 200 mcg1 mg/mL · 100 mcg0.8 mg/mL · 80 mcg0.67 mg/mL · 67 mcg
5 mg5 mg/mL · 500 mcg2.5 mg/mL · 250 mcg2 mg/mL · 200 mcg1.67 mg/mL · 167 mcg
10 mg10 mg/mL · 1,000 mcg5 mg/mL · 500 mcg4 mg/mL · 400 mcg3.33 mg/mL · 333 mcg
15 mg15 mg/mL · 1,500 mcg7.5 mg/mL · 750 mcg6 mg/mL · 600 mcg5 mg/mL · 500 mcg
20 mg20 mg/mL · 2,000 mcg10 mg/mL · 1,000 mcg8 mg/mL · 800 mcg6.67 mg/mL · 667 mcg

The four formulas

Every number on this site comes from four lines of arithmetic. Two facts make them work: one milligram is 1,000 micrograms,[2] and a U-100 insulin syringe holds 100 units per millilitre.[1]

# 1. concentration after reconstitutionC (mg/mL) = vial_mg ÷ diluent_mL# 2. volume that contains the amountV (mL) = amount_mg ÷ C# 3. syringe readingunits = V × 100# 4. how many times the vial covers that amountdoses_per_vial = vial_mg ÷ amount_mg

Two more lines are the same algebra solved for a different unknown. One gives the amount in a syringe reading, the other the liquid needed for a chosen reading:

amount_mg = units ÷ 100 × Cdiluent_mL = target_units × vial_mg ÷ (amount_mg × 100)

How to calculate peptide dosage: worked examples

Forward. 5 mg vial, 2 mL of liquid, 250 mcg wanted. C = 5 ÷ 2 = 2.5 mg/mL. V = 0.25 ÷ 2.5 = 0.1 mL. Units = 0.1 × 100 = 10 units. The vial covers 5 ÷ 0.25 = 20 such amounts.

Reverse. Same vial, 10 units drawn. 10 ÷ 100 × 2.5 = 0.25 mg (250 mcg).

Backwards for the liquid. To make 250 mcg read as 10 units from a 5 mg vial: 10 × 5 ÷ (0.25 × 100) = 2 mL.

The code that runs the calculator

This is the source of the calculator's math, read from the code file when the site is built, so it always matches what your browser runs. It has no dependencies and makes no network requests.

export const UNITS_PER_ML = 100;
 
export const SYRINGES = [
  { id: '30', ml: 0.3, units: 30, label: '0.3 mL · 30 units' },
  { id: '50', ml: 0.5, units: 50, label: '0.5 mL · 50 units' },
  { id: '100', ml: 1, units: 100, label: '1 mL · 100 units' },
];
function positive(n) {
  return typeof n === 'number' && Number.isFinite(n) && n > 0;
}
export function nearestMark(units, syringeUnits) {
  const step = syringeUnits >= 100 ? 2 : 1;
  return Math.round(units / step) * step;
}
/**
 * Reconstitution: powder vial (mg) + diluent (mL) -> how far to draw for a dose.
 * @returns {{ok:true, concMgPerMl:number, mcgPerUnit:number, volumeMl:number, units:number,
 *   dosesPerVial:number, syringeUnits:number, fitsSyringe:boolean, tooSmall:boolean, markUnits:number}
 *   | {ok:false, error:string}}
 */
export function reconstitute({ vialMg, waterMl, doseMg, syringeUnits = 100 }) {
  if (!positive(vialMg)) return { ok: false, error: 'vial' };
  if (!positive(waterMl)) return { ok: false, error: 'water' };
  if (!positive(doseMg)) return { ok: false, error: 'dose' };
  if (doseMg > vialMg) return { ok: false, error: 'dose-exceeds-vial' };
  const concMgPerMl = vialMg / waterMl;
  const volumeMl = doseMg / concMgPerMl;
  const units = volumeMl * UNITS_PER_ML;
  return {
    ok: true,
    concMgPerMl,
    mcgPerUnit: (concMgPerMl * 1000) / UNITS_PER_ML,
    volumeMl,
    units,
    dosesPerVial: vialMg / doseMg,
    syringeUnits,
    fitsSyringe: units <= syringeUnits + 1e-9,
    tooSmall: units < 2,
    markUnits: nearestMark(units, syringeUnits),
    marks: markBracket(units, syringeUnits),
  };
}
/** Reverse: units drawn on a U-100 syringe -> mg delivered. */
export function unitsToMg({ vialMg, waterMl, units }) {
  if (!positive(vialMg)) return { ok: false, error: 'vial' };
  if (!positive(waterMl)) return { ok: false, error: 'water' };
  if (!positive(units)) return { ok: false, error: 'units' };
  const concMgPerMl = vialMg / waterMl;
  const volumeMl = units / UNITS_PER_ML;
  return { ok: true, concMgPerMl, volumeMl, mg: volumeMl * concMgPerMl };
}
/** How much diluent makes a dose land on a chosen number of units. */
export function waterForTargetUnits({ vialMg, doseMg, targetUnits }) {
  if (!positive(vialMg)) return { ok: false, error: 'vial' };
  if (!positive(doseMg)) return { ok: false, error: 'dose' };
  if (!positive(targetUnits)) return { ok: false, error: 'units' };
  return { ok: true, waterMl: (targetUnits * vialMg) / (doseMg * UNITS_PER_ML) };
}

Known answers it is tested against

An automated test suite checks the functions above before every deploy. The table is generated by those same functions when the page is built, so you can check each row with a pocket calculator.

Test cases (U-100 syringe)
Vial + liquidAmountmg/mLmLUnits
5 mg + 2 mL100 mcg2.50.044
5 mg + 1 mL250 mcg50.055
10 mg + 2 mL2.5 mg50.550
2 mg + 0.5 mL1 mg40.2525
10 mg + 3 mL500 mcg3.3330.1515

Rounding and warnings

The calculator rounds only what it displays, and it warns about readings that are too small, too large or impossible.

  • Display rounding. Units show one decimal place, mL three, mg/mL three. The math itself is not rounded.
  • Nearest mark. When a result falls between marks, the calculator names the nearest one: 1-unit marks on 30- and 50-unit syringes, 2-unit marks on 100-unit syringes. Check your own syringe, because markings vary.
  • Too small to measure. Readings under 2 units trigger a warning, because a misread of one line is then a large share of the amount.
  • Too big for the syringe. Readings above the selected syringe's capacity are flagged.
  • Impossible inputs. Zero, negative or missing numbers, and amounts larger than the whole vial, return an error message instead of a number.

What the formulas cannot know

The formulas cannot know whether a vial holds what its label says.

Garbage in, garbage outThe math assumes the vial holds exactly what its label says and that the liquid volume is exact. Neither is checked by any regulator for products sold as "research use only". No formula can correct a mislabeled vial.

The calculator also cannot tell you whether an amount is safe or appropriate. It does not know what the substance is. See the safety page and the individual peptide pages for regulatory status and evidence.

Use the tools

Frequently asked questions

Is my data sent anywhere?

No. The calculator runs entirely in your browser. The only time numbers leave the page is if you copy the share link yourself, which puts them in the URL.

Why multiply by 100?

A U-100 syringe is marked with 100 units per millilitre, so millilitres × 100 = units. On a syringe marked U-40 the factor would be 40, and the numbers on this site would not apply.

Can I check the results without the website?

Yes. Every formula on this page works on paper or in any calculator. That is the point of publishing them.

Sources

  1. 510(k) clearance K233794, Insulin Syringe ("U-100 means there are 100 units of insulin in every mL") · U.S. Food and Drug Administration, March 6, 2024
  2. Metric (SI) prefixes · National Institute of Standards and Technology, updated August 13, 2025
  3. Egrifta SV (tesamorelin) prescribing information · FDA label via openFDA, effective July 29, 2026
  4. Egrifta WR (tesamorelin) prescribing information · DailyMed, U.S. National Library of Medicine, effective July 29, 2026
  5. Vyleesi (bremelanotide) prescribing information · FDA label via openFDA, effective November 5, 2026
  6. Bacteriostatic Water for Injection, USP (Hospira) label · DailyMed, U.S. National Library of Medicine, SPL effective May 22, 2026
  7. Egrifta (tesamorelin) prescribing information, original 2010 label · U.S. Food and Drug Administration, November 2010
  8. Drugs@FDA: Geref (sermorelin acetate), NDA 020443 · U.S. Food and Drug Administration, accessed November 13, 2026