${ recipeTitle | truncate(45) }

The water in your recipe is less than the amount of lye. Your water/lye solution must be at least 50%/50%.

Beginner or new to soap making?
Try our beginner calculator instead.

Your recipe has been created using the recommended values for the soap type you specified. Please adjust the oil amounts below and add any custom ingredients.

Added Oils



There are no ingredients in your soap recipe yet. Click an oil in the list to the leftClick "Oil" from the menu above to add an oil to the recipe.

  ${ oil.name }

${ oil.name } Properties

${ totalPercent() | formatNumber }% (Total)

Total percent must equal 100%


Total weight: ${ oilWeights | formatNumber } ${ unit.name }(s)    Resize Batch

${ unit.name }(s) Rebatch

Custom Ingredients

Additives, etc



There are no additional ingredients in your soap recipe yet. Click the add button to add custom ingredients.




Needed Ingredients

Swipe on table to see all values

Ingredient Gram(s) G Ounce(s) Oz Pounds(s) Lb Oil % Oil %
${ oil.name } ${ ((usePercentage ? useOilWeight * oil.amount/100 : oil.amount) / units.gram.adjustment * unit.adjustment) | formatNumber } ${ ((usePercentage ? useOilWeight * oil.amount/100 : oil.amount) / units.ounce.adjustment * unit.adjustment) | formatNumber } ${ ((usePercentage ? useOilWeight * oil.amount/100 : oil.amount) / units.pound.adjustment * unit.adjustment) | formatNumber } ${ (usePercentage ? oil.amount : ((oil.amount / oilWeights) * 100)) | formatNumber }%
Ingredient Gram(s) G Ounce(s) Oz Pounds(s) Lb Batch % Batch %
Lye - ${ lye.sapName } ${ lyePercentage }% Purity (${ superfatPercentage }% Superfat) ${ (maxLye * (1-(superfatPercentage/100)) / (units.gram.adjustment / unit.adjustment)) | formatNumber } ${ (maxLye * (1-(superfatPercentage/100)) / (units.ounce.adjustment / unit.adjustment)) | formatNumber } ${ (maxLye * (1-(superfatPercentage/100)) / (units.pound.adjustment / unit.adjustment)) | formatNumber } ${ (maxLye * (1-(superfatPercentage/100))) / lyeWaterOilWeight * 100 | formatNumber }%
NaOH (${ superfatPercentage }% Superfat) ${ (naohMax * (1-(superfatPercentage/100)) / (units.gram.adjustment / unit.adjustment)) | formatNumber } ${ (naohMax * (1-(superfatPercentage/100)) / (units.ounce.adjustment / unit.adjustment)) | formatNumber } ${ (naohMax * (1-(superfatPercentage/100)) / (units.pound.adjustment / unit.adjustment)) | formatNumber } ${ (naohMax * (1-(superfatPercentage/100))) / lyeWaterOilWeight * 100 | formatNumber }%
KOH (${ superfatPercentage }% Superfat) ${ (kohMax * (1-(superfatPercentage/100)) / (units.gram.adjustment / unit.adjustment)) | formatNumber } ${ (kohMax * (1-(superfatPercentage/100)) / (units.ounce.adjustment / unit.adjustment)) | formatNumber } ${ (kohMax * (1-(superfatPercentage/100)) / (units.pound.adjustment / unit.adjustment)) | formatNumber } ${ (kohMax * (1-(superfatPercentage/100))) / lyeWaterOilWeight * 100 | formatNumber }%
Lye - ${ lye.sapName } (0% Superfat + 10% Excess Lye) ${ (maxLye / (units.gram.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (maxLye / (units.ounce.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (maxLye / (units.pound.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (maxLye) * 1.1 / lyeWaterOilWeight * 100 | formatNumber }%
NaOH (0% Superfat + 10% Excess Lye) ${ (naohMax / (units.gram.adjustment / unit.adjustment)) * 1.1| formatNumber } ${ (naohMax / (units.ounce.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (naohMax / (units.pound.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (naohMax) * 1.1 / lyeWaterOilWeight * 100 | formatNumber }%
KOH (0% Superfat + 10% Excess Lye) ${ (kohMax / (units.gram.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (kohMax / (units.ounce.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (kohMax / (units.pound.adjustment / unit.adjustment)) * 1.1 | formatNumber } ${ (kohMax) * 1.1 / lyeWaterOilWeight * 100 | formatNumber }%
Boric Acid (20% of Solution) Borax (33% of Solution) ${ (lyeWaterOilWeight * 0.046875 * boric.properties.concentrations[boric.type]) / units.gram.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * boric.properties.concentrations[boric.type]) / units.ounce.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * boric.properties.concentrations[boric.type]) / units.pound.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * boric.properties.concentrations[boric.type]) / lyeWaterOilWeight * 100 | formatNumber }%
Water for Boric Acid Solution (80% of Solution) Water for Borax Solution (67% of Solution) ${ (lyeWaterOilWeight * 0.046875 * (1 - boric.properties.concentrations[boric.type])) / units.gram.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * (1 - boric.properties.concentrations[boric.type])) / units.ounce.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * (1 - boric.properties.concentrations[boric.type])) / units.pound.adjustment * unit.adjustment | formatNumber } ${ (lyeWaterOilWeight * 0.046875 * (1 - boric.properties.concentrations[boric.type])) / lyeWaterOilWeight * 100 | formatNumber }%
Batch Water (At ${ waterOilPercent } % of Oil Weight)
Includes ${ waterDiscount }% Water Discount
${ ((oilWeights * (waterOilPercent/100)) / units.gram.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ ((oilWeights * (waterOilPercent/100)) / units.ounce.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ ((oilWeights * (waterOilPercent/100)) / units.pound.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ ((oilWeights * (waterOilPercent/100)) / (1-waterDiscount/100) / lyeWaterOilWeight) * 100 | formatNumber }%
Water (${ waterLyeRatio }:1 Ratio) ${ ((maxLye * waterLyeRatio) / units.gram.adjustment * unit.adjustment) * (1-waterDiscount/100) * (1-superfatPercentage/100) | formatNumber } ${ ((maxLye * waterLyeRatio) / units.ounce.adjustment * unit.adjustment) * (1-waterDiscount/100) * (1-superfatPercentage/100) | formatNumber } ${ ((maxLye * waterLyeRatio) / units.pound.adjustment * unit.adjustment) * (1-waterDiscount/100) * (1-superfatPercentage/100) | formatNumber } ${ ((maxLye * waterLyeRatio) / lyeWaterOilWeight) * 100 | formatNumber }
Water (${ lyeToSolutionPercent }% Lye + ${ 100 - lyeToSolutionPercent }% Water Solution) ${ ((maxLye * ((100 - lyeToSolutionPercent) / lyeToSolutionPercent)) * (1-superfatPercentage/100) / units.gram.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ ((maxLye * ((100 - lyeToSolutionPercent) / lyeToSolutionPercent)) * (1-superfatPercentage/100) / units.ounce.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ ((maxLye * ((100 - lyeToSolutionPercent) / lyeToSolutionPercent)) * (1-superfatPercentage/100) / units.pound.adjustment * unit.adjustment) * (1-waterDiscount/100) | formatNumber } ${ (((maxLye * ((100 - lyeToSolutionPercent) / lyeToSolutionPercent)) * (1-superfatPercentage/100)) * (1-waterDiscount/100) / lyeWaterOilWeight) * 100 | formatNumber }%
Total Oils ${ (oilWeights / units.gram.adjustment * unit.adjustment) | formatNumber } ${ (oilWeights / units.ounce.adjustment * unit.adjustment) | formatNumber } ${ (oilWeights / units.pound.adjustment * unit.adjustment) | formatNumber } ${ (oilWeights / lyeWaterOilWeight) * 100 | formatNumber }%
Soap Weight (Pre-Cook) ${ lyeWaterOilWeight / units.gram.adjustment * unit.adjustment | formatNumber } ${ lyeWaterOilWeight / units.ounce.adjustment * unit.adjustment | formatNumber } ${ lyeWaterOilWeight / units.pound.adjustment * unit.adjustment | formatNumber } 100%

Recommended Additive Amounts

Swipe on table to see all values

For Advanced Soapmakers

Soap Properties

Highlighted gray ranges represent recommended ranges for each property.


Fatty Acid Profile

Oleic ${ fattyAcids.oleic.total / oilWeights * 100 | formatNumber }%
Linoleic ${ fattyAcids.linoleic.total / oilWeights * 100 | formatNumber }%
Linoleic ${ fattyAcids.linoleic.total / oilWeights * 100 | formatNumber }%
Ricinoleic ${ fattyAcids.ricinoleic.total / oilWeights * 100 | formatNumber }%
Lauric ${ fattyAcids.lauric.total / oilWeights * 100 | formatNumber }%
Myristic ${ fattyAcids.myristic.total / oilWeights * 100 | formatNumber }%
Palmitic ${ fattyAcids.palmitic.total / oilWeights * 100 | formatNumber }%
Stearic ${ fattyAcids.stearic.total / oilWeights * 100 | formatNumber }%

Calculated Values for Oils and Preferences

Superfat % ${ superfatPercentage }%
Saturated ${ saturatedFats | formatNumber } ${ unit.name }(s)
Mono-Unsaturated ${ monoUnsaturatedFats | formatNumber } ${ unit.name }(s)
Poly-Unsaturated ${ polyUnsaturatedFats | formatNumber } ${ unit.name }(s)
Saturated:Unsaturated Ratio ${ ((monoUnsaturatedFats+polyUnsaturatedFats)/fattyAcidTotals*100) | formatNumber }:${ (saturatedFats/fattyAcidTotals*100) | formatNumber }
Lye concentration ${ lyePercentage | formatNumber }%
NaOH Purity ${ naohPurity }%
KOH Purity ${ kohPurity }%
Weight Unit ${ unit.name }(s)
Water Discount % ${ waterDiscount | formatNumber }%
Soap type ${ soapType }

Recipe Title, Instructions & Notes

 Save Recipe to Add Images