Planning a landscaping project with river rocks requires precision to avoid over-ordering or running short mid-project. River rock is typically sold by the cubic yard or by the ton. Our calculator uses the standard density for decorative stone to give you the most accurate estimate possible.
The Math Behind the Calculator
To calculate the amount of stone manually, you can follow these steps:
Calculate Area: Multiply the length by the width of your garden bed (Length x Width = Square Footage).
Convert Depth: Divide your desired depth in inches by 12 to get depth in feet.
Determine Volume (Cubic Feet): Multiply the Square Footage by the Depth in feet.
Convert to Cubic Yards: Divide the Cubic Feet by 27 (since there are 27 cubic feet in one cubic yard).
Calculate Tonnage: Multiply the cubic yards by 1.35. Standard river rock typically weighs between 2,600 and 2,800 lbs per yard (approx. 1.3 to 1.4 tons).
Recommended Depths for Different Rock Sizes
Rock Size
Recommended Depth
Best Use
1/2″ to 1″ (Small)
2 Inches
Walkways, small flower beds
1″ to 3″ (Medium)
3-4 Inches
General landscaping, drainage
3″ to 5″ (Large)
2 Layers Thick
Erosion control, dry creek beds
Example Calculation
If you have a decorative bed that is 30 feet long and 4 feet wide, and you want a 3-inch depth of 1-3″ river rock:
Area: 30 x 4 = 120 sq. ft.
Cubic Feet: 120 x (3/12) = 30 cubic feet.
Cubic Yards: 30 / 27 = 1.11 cubic yards.
Tons: 1.11 x 1.35 = 1.5 tons.
Tips for Professional Results
Always clear the area of weeds and debris before installation. We highly recommend using a commercial-grade landscape fabric beneath river rocks. This prevents the heavy stones from sinking into the soil over time and significantly reduces weed growth. When ordering, it is standard practice to add a 10% buffer to your total to account for settling and variations in the terrain.
function calculateRockCoverage() {
var length = parseFloat(document.getElementById("rockLength").value);
var width = parseFloat(document.getElementById("rockWidth").value);
var depthInches = parseFloat(document.getElementById("rockDepth").value);
var pricePerTon = parseFloat(document.getElementById("rockPrice").value);
if (isNaN(length) || isNaN(width) || length <= 0 || width 0) {
var totalCost = tons * pricePerTon;
document.getElementById("costRow").style.display = "flex";
document.getElementById("resCost").innerHTML = "$" + totalCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
} else {
document.getElementById("costRow").style.display = "none";
}
}