Last active
August 21, 2025 11:21
-
-
Save 1d10t/98603018295ee5bb2545392fc72420bf to your computer and use it in GitHub Desktop.
bicycle spoke length calculator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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