HUBS IN DANDY HORSE WHEELS

In most of the wheels available in our offer, you have the option to choose the hubs on which they can be assembled for you.

We often receive questions about which hubs are better, more durable, and more reliable. The answer to this question is not easy, because all models of hubs on which we build our wheels are of the highest quality. Our priorities are reliability, durability, and ease of maintenance. To meet them, it is necessary to use the highest quality materials, uncompromising precision of workmanship, well-thought-out design, and availability of spare parts. Before introducing them to our offer, we conduct intensive tests on them, so we have full confidence in them. In addition, before leaving our factory, each piece is subjected to a thorough quality control.

We do not offer hubs with ceramic bearings, which we have explained in detail in the article “Ball bearings in bicycle hubs: ceramic or steel?” However, we can offer to assemble wheels on DT Swiss 180 ceramic hubs on an individual basis. In addition, we can assemble any model of wheels from our offer on hubs from other manufacturers, including Chris King, Onyx, Hope, Erase, and others.

Dandy Horse TCN

Weight: 380 g (with XDR freehub)
Engagement mechanism: 6 pawls
POE (points of engagement): 72
Available axles: 12×100 and 12×142
Available freehubs: Shimano 11s, XDR, Campagnolo N3W
Number of spoke holes: 24 or 28
Disc brake mount: Center lock
Bearing size: hubs 4x 6902, freehhub 2x 15267

Dandy Horse TCN is a model of road and gravel hubs designed for straight-pull spokes. They are manufactured for us by a Taiwanese company that supplies components to the largest bicycle companies in the world, such as Reynolds, Yeti, and Hunt. Dandy Horse TCN hubs have bodies made of 6061 aluminium and axles made of 7075 aluminium. They are equipped with high-quality machined bearings: 2 in the front hub and 4 in the rear hub (2 in the body and 2 in the freehub), which are standard, widely available sizes.

The engagement mechanism is realized using pawls that operate in two alternatingly meshing triplets with a ring with 36 teeth. This means that there are 72 clicks per full rotation of the freehub, which means one click every 5 degrees. This minimizes the “dead zone” after starting pedaling.

DT Swiss 350 black

DT Swiss 350

Weight: 351 g (with XDR freehub)
Engagement mechanism: ratchet
POE (points of engagement): 36
Available axles: 12×100 i 12×142 lub 5×100 i 5×135 (QR)
Available freehubs: Shimano 11s, XDR
Number of spoke holes: 24
Disc brake mount: Center lock

DT Swiss 350 black

DT Swiss 350 hubs are some of the most popular choices for high-end bicycle wheels. We build our wheels on hubs with 24 holes for straight-pull spokes or 28 holes for traditional spokes with bent heads. DT Swiss is a renowned Swiss manufacturer of high-end bicycle components. A significant part of DT Swiss production takes place in Poland, in a factory located near Poznań.

DT 350 hubs have the same TPI brand bearings with contact seals as the RTC. The engagement mechanism is also very similar, based on a 36-tooth ratchet system.

DT Swiss 350 Classic

For building wheels with a 130 kg weight limit, we use DT 350 Classic hubs in the factory finish. They are equipped with the same 36t ratchet, with the difference lying in the shape of the flanges. For these hubs, we use J-Bend spokes with a bent head. You can find more information in our article about types of spokes.

DT Swiss 240 black

DT Swiss 240 EXP

Weight: 300 g (with XDR freehub)
Engagement mechanism: ratchet
POE (points of engagement): 36
Available axles: 12×100 i 12×142 
Available freehubs: Shimano 11s, XDR
Number of spoke holes: 24
Disc brake mount: Center lock

DT Swiss 240 black

DT Swiss 240 EXP is the flagship hub model from the Swiss manufacturer. We build our wheels on hubs with 24 holes for straight-pull spokes. Technically, the 240 EXP model is very similar to the 350s, but it differs in the design of the engagement mechanism.

Ratchet EXP is made up of fewer parts, making it lighter than the version used in the 350s. Therefore, DT Swiss 240 EXP is the lightest hub available in our offer.

Grab an extra 5% off

Sign up for our newsletter to receive exclusive offers

(function() { const popupID = 4091; // <- Twoje ID popupu const requiredMs = 60000; // 60 sekund const startKey = "popupTimerStart_" + popupID; const closedKey = "popupClosed_" + popupID; const shownSessionKey = "popupShownSession_" + popupID; const maxWaitForElementorMs = 10000; // ile maksymalnie czekamy na elementorProFrontend // Jeśli zamknięto już popup (localStorage) — nie pokazuj więcej if (localStorage.getItem(closedKey)) return; // Ustal moment rozpoczęcia liczenia (persistuje między podstronami) let start = localStorage.getItem(startKey); if (!start) { start = Date.now(); localStorage.setItem(startKey, start); } else { start = parseInt(start, 10); } // Oblicz ile jeszcze brakuje do wymaganych 60s function msRemaining() { return Math.max(0, requiredMs - (Date.now() - start)); } // Funkcja pokazująca popup (gdy elementorProFrontend już gotowy) function tryShowPopup() { // jeśli użytkownik zamknął popup w międzyczasie — przerwij if (localStorage.getItem(closedKey)) return; // jeśli już pokazano w tej sesji — nie pokazuj ponownie if (sessionStorage.getItem(shownSessionKey)) return; // upewnij się, że obiekt elementora jest dostępny if (typeof elementorProFrontend !== "undefined" && elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup) { elementorProFrontend.modules.popup.showPopup({ id: popupID }); sessionStorage.setItem(shownSessionKey, "1"); } else { // jeśli elementor jeszcze nie załadowany — nic nie robimy tutaj console.warn("Elementor Pro popup module not ready yet."); } } // Czekaj na elementorProFrontend (polling), ale nie dłużej niż maxWaitForElementorMs function waitForElementorReady(cb) { const interval = 200; let waited = 0; const t = setInterval(function() { if (typeof elementorProFrontend !== "undefined" && elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup) { clearInterval(t); cb(true); } else { waited += interval; if (waited >= maxWaitForElementorMs) { clearInterval(t); cb(false); } } }, interval); } // Gdy popup zostanie zamknięty — zapisz to na stałe w localStorage (function bindCloseListener() { if (window.jQuery) { jQuery(document).on('elementor/popup/hide', function(event, id) { if (id === popupID) { localStorage.setItem(closedKey, "1"); } }); } else { // jeśli jQuery jeszcze nie dostępne, spróbuj za chwilę let tries = 0; const t = setInterval(function() { tries++; if (window.jQuery) { clearInterval(t); jQuery(document).on('elementor/popup/hide', function(event, id) { if (id === popupID) { localStorage.setItem(closedKey, "1"); } }); } else if (tries > 50) { clearInterval(t); } }, 200); } })(); // Teraz ustaw timeout — jeśli pozostały czas 0 => pokaż natychmiast (po upewnieniu się, że elementor jest gotowy) const remaining = msRemaining(); if (remaining <= 0) { waitForElementorReady(function(ready) { if (ready) tryShowPopup(); else { // jeśli elementor nie gotowy — spróbuj jeszcze raz po krótkim timeout setTimeout(tryShowPopup, 500); } }); } else { // ustaw timeout na pozostały czas; po upływie — spróbuj pokazać popup setTimeout(function() { waitForElementorReady(function(ready) { if (ready) tryShowPopup(); else { // jeśli elementor nie gotowy — spróbuj z małym opóźnieniem setTimeout(tryShowPopup, 500); } }); }, remaining); } // Dodatkowo: jeśli użytkownik zamknął popup w innej karcie/oknie, ten skrypt też to zauważy dzięki storage event window.addEventListener('storage', function(e) { if (e.key === closedKey && e.newValue) { // nic do zrobienia tutaj — warunki wyżej sprawią, że nic się nie pokaże } }); })();