Skip to content

Instantly share code, notes, and snippets.

@1d10t
Last active August 21, 2025 11:21
Show Gist options
  • Select an option

  • Save 1d10t/98603018295ee5bb2545392fc72420bf to your computer and use it in GitHub Desktop.

Select an option

Save 1d10t/98603018295ee5bb2545392fc72420bf to your computer and use it in GitHub Desktop.
bicycle spoke length calculator
Front wheel
Lacing pattern 3 cross
Spokes 32
ERD 606
Axle Width 100
Left/Right Flange Diameter 58
Lock Nut to left flange 27.5
Left Flange to center 22.5
Right Flange to center 35.5
Lock nut to right flange 14.5
Spoke Hole Diameter 2.6
https://www.prowheelbuilder.com/spokelengthcalculator
Left spoke length: 292.7
Right spoke length: 294
https://spokes-calculator.dtswiss.com/en/calculator
left 293
right 294
Rear wheel
Lacing pattern 3 cross
Spokes 32
ERD 606
Axle Width 135
Left/Right Flange Diameter 58
Lock Nut to left flange 33
Left Flange to center 34.5
Right Flange to center 19.5
Lock nut to right flange 48
Spoke Hole Diameter 2.6
https://www.prowheelbuilder.com/spokelengthcalculator
Left spoke length: 293.9
Right spoke length: 292.5
https://spokes-calculator.dtswiss.com/en/calculator
left 294
right 292
function calcSpokeLengths({
erd, // Effective Rim Diameter (mm)
flangeDiameter, // Flange diameter (mm)
spokeCount, // Total spokes
crosses, // Cross pattern (e.g. 3)
leftFlangeToCenter, // Distance from hub center to left flange (mm)
rightFlangeToCenter, // Distance from hub center to right flange (mm)
spokeHoleDiameter = 2.6 // default mm
}) {
const rimRadius = erd / 2;
const flangeRadius = flangeDiameter / 2 + spokeHoleDiameter / 2;
const spokesPerSide = spokeCount / 2;
const angle = 2 * Math.PI * (crosses / spokesPerSide);
function spokeLength(centerToFlange) {
return Math.sqrt(
rimRadius ** 2 +
flangeRadius ** 2 +
centerToFlange ** 2 -
2 * rimRadius * flangeRadius * Math.cos(angle)
);
}
return {
left: (spokeLength(leftFlangeToCenter)-0.9).toFixed(1),
right: (spokeLength(rightFlangeToCenter)-0.9).toFixed(1)
};
}
// Example with your numbers:
const front_lengths = calcSpokeLengths({
erd: 606,
flangeDiameter: 58,
spokeCount: 32,
crosses: 3,
leftFlangeToCenter: 22.5,
rightFlangeToCenter: 35.5,
spokeHoleDiameter: 2.6
});
// Example with your numbers:
const rear_lengths = calcSpokeLengths({
erd: 606,
flangeDiameter: 58,
spokeCount: 32,
crosses: 3,
leftFlangeToCenter: 34.5,
rightFlangeToCenter: 19.5,
spokeHoleDiameter: 2.6
});
console.log({front_lengths, rear_lengths});
// front_lengths: {left: '292.7', right: '294.0'}
// rear_lengths: {left: '293.9', right: '292.5'}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment