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

Cart

{{ it.product.title }}
p class="result__title">{{ it.item.text }}

{ "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" }
Header Image

Hire Evoc Bike Travel Bag - BlackAlphabetically, A-Z

£5.00

   Alphabetically, Z-A

Price, low to high
 
 

£

Product Details

Evoc Bike Travel Bag - Black

From

The Evoc Bike Travel Bag is the ultimate solution for safely transporting your bike, trusted by cyclists worldwide for its durability, versatility, and ease of use. Combining the best features of both a hard case and a soft travel bag, this hybrid bike travel bag is engineered to protect a wide range of bike types during flights, road trips, or long-distance transport.-

Perfect for mountain bikes (MTB), gravel bikes, road bikes, and triathlon bikes, this bike travel case fits most frame styles and wheel sizes, including 29” wheels and extended wheelbases up to 126cm. Whether you're heading to a race, training camp, or overseas adventure, the Evoc Bike Travel Bag offers unmatched bike protection in a compact, easy-to-store format.

£
  • Universal Fit for Most Bike Types – Compatible with cross-country, trail, enduro, freeride, downhill, 29er MTB, gravel, road, and triathlon bikes
  • To
  • Hybrid Construction – Offers the impact resistance of a hard case with the lightweight flexibility of a soft bag
  • Includes New Polycarbonate Bike Block – Enhances bike frame fixation and stability during transport
  • Compact & Collapsible Design – Folds down to just 136 x 39 x 25 cm for easy storage when not in use
  • Compatible with Add-On Accessories – Use with Road Bike Adapter Disc, Road Bike Aluminium Stand, or Bike Stand for extra support and secure fit (sold separately)
  • Large Capacity – Supports bikes with wheelbases up to 126 cmBrand

<
a class="product__media product__media--featured" href="/collections/enigma/products/enigma-etape-titanium-road-frameset" title="Enigma Etape Titanium Road Frameset" aria-label="Enigma Etape Titanium Road Frameset" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2024-06-21at20.36.35_600x.png?v=1718998626)"> <
  • span class="visually-hidden">Enigma Etape Titanium Road Frameset > I'm looking to find out more information about a product, where can I find this?
  • < <
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2024-06-21at20.31.54_600x.png?v=1718998395)">
© 2026,
ProjektRide 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') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled 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) { // 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.Sfig.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 led for ${window._RestockRocketConfig.pageType}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:inventory-data-loaded event const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings, preorderEnabled: settings.preorder_enabled } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } }