Grips & Bar-Tape

This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox. Headsets

Headsets
Enve
Enve
Cart
CockpitHandlebars

Grips & Bar-Tape Headsets
Headsets
1
3 4
Brand
5+
Precision Crafted using lightweight, breathable and stretchy materials for enhanced comfort on the bike. The Hydration Backpack uses technical materials and streamlined, ‘less is more’ design principles tailored to the rigours of backcountry riding.Capacity
L/XL = 14.5L total pack capacity (2.0L bladder)
Header ImageWeights
S/M =  460g
Materials<
a class="product__media product__media--featured" href="/collections/surly-accseories/products/surly-corner-bars-50mm" title="Surly Corner Bars - 50mm" aria-label="Surly Corner Bars - 50mm" style="background-image: url(//projektride.co.uk/cdn/shop/products/Screenshot2022-07-03at18.19.01_600x.png?v=1656869050)"> <span class="visually-hidden">Surly Corner Bars - 50mm > Lightweight, breathable 3D mesh construction
  • <
  • div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/products/Screenshot2022-07-03at18.19.06_600x.png?v=1656869050)">RIDE CONFIDENTStretch mesh rear side pockets
  • <
    a class="product__media product__media--featured" href="/collections/surly-accseories/products/surly-nice-rack-front" title="Surly Nice Rack - Front" aria-label="Surly Nice Rack - Front" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2023-10-23at12.18.37_600x.png?v=1698060064)"> <
    Surly Nice Rack - Front a class="product__media product__media--featured" href="/collections/essentials/products/hire-smith-convoy-helmet" title="Hire Lazer Compact Helmet" aria-label="Hire Lazer Compact Helmet" style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)"> <> span class="visually-hidden">Hire Lazer Compact Helmet
    a class="product__media product__media--featured" href="/collections/surly-accseories/products/surly-dinner-fork" title="Surly Dinner Fork 29"" aria-label="Surly Dinner Fork 29"" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2023-10-28at13.25.54_600x.png?v=1698496036)"> <
    !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) { // No matching locale has translations; drop payload to save memory 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(function(key) { const value = translatedFields[key ]; if (value !== null && value !== undefined && value !== '') { settings[key] = value; } }); } else { console.debug('STOQ - No translated fields found for locale:', normalizedLocale); } delete settings.translations; return settings; } catch (e) { console.debug('STOQ - error applying translations:', e); return settings; } } // Setup event listener for cart selling plan updates // This must be called before any scripts are loaded to avoid race conditions function setupCartSellingPlanUpdater(settings) { // Setup listener regardless - updateCartSellingPlans has its own guards // This ensures cleanup happens even when preorders are disabled globally // Listen for stoq:inventory-data-loaded event dispatched by api.js window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket
    && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ - no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } // First try to get settings from metafields with expiry check const cachedSettings = window._RestockRocketConfig.cachedSettings; 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.S hopify.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 not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cac

    hedSettings); } else { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions setupCartSellingPlanUpdater(settings); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketConFAQfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enab