Choosing the correct spring rate for your mountain bike's rear shock is crucial for optimal performance, comfort, and control. The spring rate determines how much force is required to compress the shock by a certain amount. Too soft a spring will lead to excessive sag, bottoming out, and a lack of support, while too stiff a spring will result in a harsh ride, reduced traction, and inability to use full travel.
How This Calculator Works:
This calculator uses a common formula to estimate the ideal spring rate based on your total weight and desired sag percentage. The process involves the following steps:
Calculate Total Weight: It sums up your rider weight, your bike's weight, and the weight of any gear you typically carry (backpack, tools, water, etc.). This gives you the total dynamic weight the shock needs to support.
Determine Target Compression Force: It calculates the force needed to achieve your desired sag percentage. Sag is the amount the shock compresses under your static weight when you are seated on the bike. A common starting point for desired sag is 25-33% of the shock's total travel.
Calculate Spring Rate: Using the total weight (which acts as the force) and the target compression distance (derived from shock travel and sag percentage), the calculator determines the spring rate. The formula used is a simplified approximation often represented as:
Spring Rate (N/mm) = Total Weight (kg) * 9.81 / (Shock Travel (mm) * Sag Percentage)
Note: The 9.81 is the acceleration due to gravity (m/s²). The result is typically expressed in Newtons per millimeter (N/mm) or pounds per inch (lb/in). This calculator provides the result in N/mm.
Factors Influencing Spring Choice:
Riding Style: Aggressive riders who hit jumps and drops might prefer slightly firmer springs for more support, while cross-country riders might opt for lighter springs for better small-bump sensitivity.
Terrain: Riding predominantly on rough, technical terrain might benefit from a slightly softer spring to absorb impacts better.
Leverage Ratio: Different bike suspension designs have different leverage ratios, which affects how the force is applied to the shock. This calculator provides a good starting point, but suspension kinematics can influence the ideal feel.
Personal Preference: Ultimately, the "best" spring rate is subjective. This calculator provides a recommended range, but fine-tuning based on your personal feel on the trail is essential.
How to Use:
Enter your weight in kilograms.
Enter the approximate weight of your mountain bike in kilograms.
Estimate the weight of your gear (backpack, water, tools) in kilograms.
Input the total travel of your rear shock in millimeters.
Specify your desired sag percentage (e.g., 25% for aggressive riding, 30% for all-around).
Click "Calculate Spring Rate" to get a recommended value.
Consult your shock manufacturer's recommendations and consider consulting with a suspension tuning professional for the most precise setup.
.calculator-container {
font-family: sans-serif;
max-width: 700px;
margin: 20px auto;
padding: 20px;
border: 1px solid #e0e0e0;
border-radius: 8px;
background-color: #f9f9f9;
}
.calculator-title {
text-align: center;
color: #333;
margin-bottom: 20px;
}
.calculator-inputs {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
.input-group {
display: flex;
flex-direction: column;
}
.input-group label {
margin-bottom: 5px;
font-weight: bold;
color: #555;
}
.input-group input {
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
width: 100%;
box-sizing: border-box;
}
.calculate-button {
display: block;
width: 100%;
padding: 12px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
font-size: 18px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.calculate-button:hover {
background-color: #0056b3;
}
.calculator-result {
margin-top: 20px;
padding: 15px;
background-color: #e9ecef;
border: 1px solid #ced4da;
border-radius: 4px;
font-size: 18px;
text-align: center;
font-weight: bold;
color: #333;
}
.calculator-explanation {
margin-top: 30px;
padding: 20px;
border-top: 1px solid #e0e0e0;
background-color: #ffffff;
border-radius: 8px;
}
.calculator-explanation h3, .calculator-explanation h4 {
color: #007bff;
margin-bottom: 10px;
}
.calculator-explanation p, .calculator-explanation li {
line-height: 1.6;
margin-bottom: 10px;
color: #444;
}
.calculator-explanation ol, .calculator-explanation ul {
margin-left: 20px;
}
function calculateSpringRate() {
var riderWeightKg = parseFloat(document.getElementById("riderWeightKg").value);
var bikeWeightKg = parseFloat(document.getElementById("bikeWeightKg").value);
var gearWeightKg = parseFloat(document.getElementById("gearWeightKg").value);
var shockTravelMm = parseFloat(document.getElementById("shockTravelMm").value);
var sagPercentage = parseFloat(document.getElementById("sagPercentage").value);
var resultDiv = document.getElementById("result");
resultDiv.textContent = ""; // Clear previous result
if (isNaN(riderWeightKg) || isNaN(bikeWeightKg) || isNaN(gearWeightKg) || isNaN(shockTravelMm) || isNaN(sagPercentage)) {
resultDiv.textContent = "Please enter valid numbers for all fields.";
return;
}
if (riderWeightKg <= 0 || bikeWeightKg < 0 || gearWeightKg < 0 || shockTravelMm <= 0 || sagPercentage = 100) {
resultDiv.textContent = "Please enter realistic positive values for weights and travel, and a sag percentage between 1 and 99.";
return;
}
var totalWeightKg = riderWeightKg + bikeWeightKg + gearWeightKg;
var gravity = 9.81; // m/s^2
var sagMm = shockTravelMm * (sagPercentage / 100);
if (sagMm === 0) {
resultDiv.textContent = "Sag in millimeters cannot be zero. Please check shock travel and sag percentage.";
return;
}
// Formula: Spring Rate (N/mm) = Total Weight (kg) * gravity / sag in mm
var springRateN_mm = (totalWeightKg * gravity) / sagMm;
// Optional: Convert to lbs/in for comparison if desired, though N/mm is standard
// var N_to_lbs = 0.224809;
// var mm_to_in = 0.0393701;
// var springRateLbs_in = springRateN_mm * N_to_lbs / mm_to_in;
resultDiv.textContent = "Recommended Spring Rate: " + springRateN_mm.toFixed(1) + " N/mm";
// resultDiv.textContent += " (Approx. " + springRateLbs_in.toFixed(0) + " lb/in)"; // Uncomment to show lbs/in
}