Services
 Réunion (EUR€)
Türkiye (GBP£)
BikesNew Bikes
Headsets
BrakesComplete Brakes
Gloves
Socks
Cleaners, Degreasers and Lubrication
- pect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Primary_78106728-7648-4122-8ec7-56aaa0c6e7e8.jpg?v=1787065571"},"aspect_ratio":1.333,"height":2250,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Primary_78106728-7648-4122-8ec7-56aaa0c6e7e8.jpg?v=1787065571","width":3000},{"alt":"Marlin 4 Gen 3","id":72254465081727,"position":14,"preview_image":{"aspect_ratio":1.499,"height":2668,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Portrait_d27eef6d-3c33-47ee-a35e-66b2d11ffdcc.jpg?v=1787065571"},"aspect_ratio":1.499,"height":2668,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Portrait_d27eef6d-3c33-47ee-a35e-66b2d11ffdcc.jpg?v=1787065571","width":4000},{"alt":"Marlin 4 Gen 3","id":72254465114495,"position":15,"preview_image":{"aspect_ratio":1.333,"height":3000,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Al3,"height":3000,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Alt4.jpg?v=1787065572"},"aspect_ratio":1.333,"height":3000,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Marlin4-26-57361-C-Alt4.jpg?v=1787065572","width":4000}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003eMarlin 4 is a trail-worthy daily rider that's perfectly suited for everyday adventures, on and off the trail. It features a trail-savvy frame with a suspension fork, 8-speed Shimano ESSA shifting and mounts for a rack and kickstand that make it an ideal choice for trail riders or anyone looking for a comfortable, stable commuter with the ruggedness of a real mountain bike.\u003c\/p\u003e\n\u003ch3\u003eTechnology\u003c\/h3\u003e\u003cp\u003eWill my bike have a curved top tube? - Smaller frames have a top tube that dips down as it approaches the seat tube. This design makes for a lower standover height, which is good for shorter riders because it allows the offset for 29'' wheel, 100mm QR, 100mm travel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eTires\u003c\/th\u003e\n\u003ctd\u003eBontrager Montrose Comp, wire bead, 30 tpi, 29x2.40\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHub Front\u003c\/th\u003e\n\u003ctd\u003eFormula DC-20, alloy, 6-bolt, 100x5 mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHub Rear\u003c\/th\u003e\n\u003ctd\u003eFormula DC-22, alloy, 6-bolt, Shimano 8\/9\/10 freehub, 135x5 mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRims\u003c\/th\u003e\n\u003ctd\u003eBontrager Connection, double-wall, 32-hole, 20 mm width, Schrader valve\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eShifter\u003c\/th\u003e\n\u003ctd\u003eShimano\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDerailleur Rear\u003c\/th\u003e\n\u003ctd\u003eShimano ESSA U2000\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCrank\u003c\/th\u003e\n\utd\u003eTektro, 6-bolt, 160mm \/\/ Tektro, 6-bolt, 180mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003ePedals\u003c\/th\u003e\n\u003ctd\u003eNylon platform\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSaddle\u003c\/th\u003e\n\u003ctd\u003eBontrager Verse Short, stainless steel rails\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSeatpost\u003c\/th\u003e\n\u003ctd\u003eBontrager alloy, 31.6 mm, 12 mm offset, 400 mm length\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHandlebar\u003c\/th\u003e\n\u003ctd\u003eBontrager alloy, 31.8 mm, 15 mm rise, 750 mm width\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eStem\u003c\/th\u003e\n\u003ctd\u003eBontrager Comp, 31.8 mm, Blendr compatible, 7-degree, 50 mm length\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHeadset\u003c\/th\u003e\n\u003ctd\u003eSemi-integrated, 1-1\/8''\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGrips\u003c\/th\u003e\
- 93759 : parseInt("18"),58205528326527 : parseInt("0"),58205528359295 : parseInt("4"),58205528392063 : parseInt("0"),58205528424831 : parseInt("0"),58205528457599 : parseInt("0"),58205528490367 : parseInt("13"),58205528523135 : parseInt("20"),58205528555903 : parseInt("18"),58205528588671 : parseInt("0"),58205528621439 : parseInt("0"),58205528654207 : parseInt("0"),58205528686975 : parseInt("0"),58205528719743 : parseInt("0"),58205528752511 : parseInt("0"),58205528785279 : parseInt("18"),58205528818047 : parseInt("0"),58205528850815 : parseInt("0"),58205528883583 : parseInt("18"),58205528916351 : parseInt("0"),58205528949119 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {58205528293759 : parseInt(""),58205528326527 : parseInt(""),58205528359295 : parseInt(""),58205528392063 : parseInt(""),58205528424831 : parseInt(""),58205528457599 : parseInt(""),58205528490367 : parseInt(""),58205528523135 : parseInt(""),58205528555903 : parseInt(""),58205528588671 : parseInt(""),58205528621439 :""),58205528424831 : parseInt(""),58205528457599 : parseInt(""),58205528490367 : parseInt(""),58205528523135 : parseInt(""),58205528555903 : parseInt(""),58205528588671 : parseInt(""),58205528621439 : parseInt(""),58205528654207 : parseInt(""),58205528686975 : parseInt(""),58205528719743 : parseInt(""),58205528752511 : parseInt(""),58205528785279 : parseInt(""),58205528818047 : parseInt(""),58205528850815 : parseInt(""),58205528883583 : parseInt(""),58205528916351 : parseInt(""),58205528949119 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {58205528293759 : null,58205528326527 : null,58205528359295 : null,58205528392063 : null,58205528424831 : null,58205528457599 : null,58205528490367 : null,58205528523135 : null,58205528555903 : null,58205528588671 : null,58205528621439 : null,58205528654207 : null,58205528686975 : null,58205528719743 : null,58205528752511 : null,58205528785279 : null,58205528818047 : null,58205528850815 : null,58205528883583 : null,58205528916351 : nul9 : null,};window._RestockRocketConfig.selected_variant_id = 58205528293759; window._RestockRocketConfig.selected_variant_available = (window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }) || {}).available; try { var _sqCfg = window._RestockRocketConfig; var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); } catch (e) { } try { var _sqc = window._RestockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersCns/01a08707-47f7-7cf2-90f7-be17daab017c/restockrocket-1-584/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a08707-47f7-7cf2-90f7-be17daab017c/restockrocket-1-584/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a08707-47f7-7cf2-90f7-be17daab017c/restockrocket-1-584/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e<
- <= LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } function checkSettingsExpiry(settings) { try { if (!settings || !settings.updated_at) { console.debug('STOQ - Invalid settings data structure'); return null; } if (!settings.cache) { console.debug('STOQ - settings caching disabled'); return null; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale & & !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } } const updatedAt = new Date(settings.updated_at); if (isNaN(updatedAt.getTime())) { console.debug('STOQ - Invalid updated_at date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (age Gears & Drivetrain7 SETTINGS_CACHE_DURATION) { console.debug('STOQ - settings changed recently, skipping cache'); return null; } return settings; } catch (error) { console.debug('STOQ - Error checking settings cache:', error); return null; } } function createRestockRocketContainer() { const restockRocketContainer = document.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scriptUrl) { const restockRocketScriptElement = document.createElement('script'); restockRocketScriptElement.setAttribute('defer', 'defer'); restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') try { const _stoqInitConfig = window._RestockRocketConfig; const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqI liquid_cache_age: _stoqInitConfig.liquidCacheAge, inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } try { var _sqTrack = window._RestockRocketConfig; if (_sqTrack.preordersConfigured) { document.addEventListener('click', function (e) { try { var t = e.target; if (!t || !t.closest) return; var host = t.closest('.shopify-payment-button, shopify-payment-terms'); if (!host) return; var channel = host.matches && host.matches('shopify-payment-terms') ? 'shop_pay_installments' : 'buy_now'; var form = host.closest('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; Components ck.product.id) || '', channel: channel, market_id: _sqTrack.marketId || '', country_code: _sqTrack.countryIsoCode || '', page_type: _sqTrack.pageType || '', cart_token: _sqTrack.cartToken || '', page_url: (window.location && window.location.href) || '', properties: { is_preorder_variant: (function () { var vid = Number(variantId); var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; }; return has(_sqTrack.preorderVariantIds) || has(_sqTrack.cachedPreorderVariantIds && _sqTrack.cachedPreorderVariantIds.preorder_variant_ids); })(), in_enabled_plan: !!_sqPlan, is_instock_variant: (function () { var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; return has(_sqTrack.inStockVariantIds) || h
- } catch (err) { } }, true); } } catch (e) { } function applyTranslations(settings) { try { if (!settings || !settings.multi_language_enabled) { return settings; } if (!settings.translations) { console.debug('STOQ - No translations found, skipping translation'); return settings; } const normalizedLocale = window._RestockRocketConfig.normalizedLocale; const translations = settings.translations; if (!normalizedLocale) { console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); delete settings.translations; return settings; } console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); const translatedFields = translations[normalizedLocale]; if (translatedFields && typeof translatedFields === 'object') { Object.keys(translatedFields).forEach( no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } (function loadStorefrontSettings() { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; function run() { const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2026-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.stE-bike Batteries and chargers 8 ngs; const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; if (validCachedSettings) { console.debug('STOQ - using cached settings'); initializeScripts(validCachedSettings); } else { console.debug('STOQ - fetching fresh settings'); const headers = { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.theme?.role === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } fetch( `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, { headers } ) .then(function(response) { if (!response.ok) { throw new Error('Network response was no onsole.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } if (data && data.read_fWheels ._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const collectionScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlCollection : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; const pageType = window._RestockRocketConfig.pageType; const collectionPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { createRestockRocketScript(collectio
- Complete Wheels Tubeless Tools & Maintenance Clothing and Protection
- ProjektRide Merchandise10 + Helmets







Rims
Shifter
Derailleur Rear
Shipping & taxes calculated at checkoutRwanda (RWFFRw)
.logo__image-link {
width: 100px;
height: 28px;
}
.has-scrolled .logo__image-link {
width: 100px;
height: 28px;
}
Seychelles (GBP£)
South Africa (GBP£)
Building Your Bike From the BoxSvalbard & Jan Mayen (GBP£)
Refund policy
Tristan da Cunha (GBP£)
Open cartTunisia (GBP£)
HireUkraine (UAH₴)
Shop All New Bikes
Road / Gravel / Touring Bikes
Hybrid / City Bikes






