You’re looking for a high-end carbon e-road bike that's super light, super discreet and super quiet. Versatility is important, and you want the ability to roll on everything from tarmac to gravel. You also want the advantage of a quick and precise SRAM Force XPLR AXS D2 wireless electronic drivetrain.
The tech you getBook a ServiceSeat Posts & Clamps
Our best and lightest 800 Series OCLV Carbon frame with rear IsoSpeed. A powerful 50 Nm TQ harmonic pin ring motor that assists up to 25 km/h, a 360 Wh integrated battery, an integrated smart LED display and discreet top-mounted controls for toggling through assist modes. Aeolus Pro 3V OCLV Carbon wheels, SRAM Force XPLR AXS D2 1x12 wireless electronic drivetrain, carbon cranks, a vibration-absorbing Bontrager Pro IsoCore handlebar and a RCS Pro stem that fully integrates your cables for a sleek look.
How tall are you?Cycle To Work SchemesTubeless
Tools & MaintenanceTo measure your height, stand up straight, barefoot, with your back, heels, shoulders and head all touching a wall. While looking straight ahead, place a book or straight edge on your head and slowly push it against the wall. Your straight edge should be parallel with the floor. Mark the spot where the bottom of the book is touching the wall. The distance from the marked spot to the floor is your height.
How to measure: Stand barefoot with your back straight and against a wall. Tuck a ruler or something that extends to the floor between your legs. Using both hands, and keeping it level, pull the ruler up into your crotch as if you were sitting on the saddle. Measure the distance from the top edge of the ruler to the ground to find your inside leg measurement. Your inside leg is very important to your final bike size so please measure carefully.Parts & Components
Clothing
Socks
Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Extra Small","offers":{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211127996799#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"3799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211127996799"}},{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128029567#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtturq_1.webp?v=1742310750\u0026width=1920","name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Small","offers":{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128029567#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"3799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128029567"}},{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128062335#variant"
Georgia (GBP£)
,"@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtturq_1.webp?v=1742310750\u0026width=1920","name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Medium","offers":{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128062335#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"3799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128062335"}},{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128095103#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtturq_1.webp?v=1742310750\u0026width=1920","name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Large","offers":{"@id":"\/products\/yeti-cycles-asr-t-series-29-frame?variant=55211128095103#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"3799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-asr-
","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];(function() {
const cach
Size
reorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","pAngola (GBP£)
bled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentag
erences (+00:00 vs .000Z)
const cachedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null;
const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate));
if (useCached) {
if (Array.isArray(cachedData.plans)) {
window._RestockRocketConfig.sellingPlans = cachedData.plans;
// Only use disabled_plan_ids when using cached plans
window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || [];
console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')');
}
} else {
// When using old format (stale cache), don't trust disabled_plan_ids
window._RestockRocketConfig.disabledSellingPlanIds = [];
console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')');
}
}
})();windo
i-Text_Overview-Box_Inner\"\u003e\n\u003cp\u003eTHE NEW ASR MARKS THE MOST EXTENSIVE CARBON PROJECT WE’VE EVER TACKLED. YIELDING THE LIGHTEST FULL SUSPENSION BIKE IN OUR HISTORY, CONTEMPORISING OUR FLEX STAY DESIGN TO CHECK TODAY’S KINEMATICS STANDARDS, KILLER SMALL - BUMP SENSITIVITY, INSANE TRACTION AND 100% USABLE TRAVEL.\u003c\/p\u003e\n\u003cp\u003eTHE ASR IS BACK. WE’VE NEVER MADE A LIGHTER FULL - SUSPENSION BIKE, BUT THAT’S JUST HALF THE STORY. IT BRINGS PROPER SUSPENSION TO PROPER MOUNTAIN BIKE RACING. THE KIND THAT TAKES SKILL, NOT JUST LUNGS.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_WHT\"\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_WHT_Inner\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eMADE FOR WINNING THE WORLD.\u003c\/p\u003e\n\u003cp\u003eThe ASR is back to win at today’s world cup level. Super light and radically responsive with all the pedaling efficiency? Check.\u003c\/p\u003e\n\u003cp\u003eBut that’s just XC table stakes. The bike fo
dens, but low enough to sit below the axles for rail-like cornering thanks to that coveted, “in bike” feel.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_BLK\"\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_BLK_Inner\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eSIZE SPECIFIC STIFFNESS.\u003cbr\u003eFINE-TUNED.\u003c\/p\u003e\n\u003cp\u003eAnother goal was to engineer each frame for the same ride\u003cbr\u003echaracteristics to give every rider the same feel, regardless of size.\u003cbr\u003eEvery ASR frame has size-specific carbon schedules tuning at a much more\u003cbr\u003esensitive level, and accurately matching torsional stiffness and\u003cbr\u003echassis-flex profiles too. Tedious? Yes. Worth it? Absolutely.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_WHT-2\"\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_WHT-2_Inner\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eA LEGACY OF FLEX.\u003c\/p\u003e\n\u003c
\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd id=\"sizechart\"\u003e\u003cstrong\u003eX-SMALL\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e4'10\" - 5'3\"\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"sizechart\"\u003e\u003cstrong\u003eSMALL\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e5'1\" - 5'7\"\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"sizechart\"\u003e\u003cstrong\u003eMEDIUM\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizec
003e\n\u003cdiv class=\"Yeti-Text_Team-BG_ASR\"\u003e\n\u003cdiv class=\"Yeti-Text_Team-BG\"\u003e\n\u003cdiv class=\"Yeti-Text_Team-Text_ASR\"\u003e\n\u003cp class=\"Yeti-Title_ASR\"\u003eTHE REINCARNATED ASR\u003c\/p\u003e\n\u003cp\u003eA LOT\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003elike\u003c\/span\u003e\u003cspan\u003e \u003c\/span\u003eNOTHING ELSE\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv data-decoded=\"true\" data-pb-style=\"SUW68GM\" data-element=\"main\" data-appearance=\"default\" data-content-type=\"html\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eSPECIFICATION\u003c\/p\u003e\n\u003cp class=\"Yeti-Spec_text\"\u003eTURQ Series carbon fibre frame, threaded bottom bracket, configurable cable ports, 148mm x 12mm BOOST dropouts, integrated derailleur hanger and axle.\u003c\/p\u003e\n\u003ctable class=\"YetiSpec\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"b\"\u003e\n\u003ctd\u003eSHOCK\u003c\/td\u003e\n\u003ctd\u003eROCKSHOX SID LUXE Ascension Island (SHP£)
"\u003e\n\u003ctd\u003eA\u003c\/td\u003e\n\u003ctd\u003eSEAT TUBE LENGTH\u003c\/td\u003e\n\u003ctd\u003e400\u003c\/td\u003e\n\u003ctd\u003e410\u003c\/td\u003e\n\u003ctd\u003e430\u003c\/td\u003e\n\u003ctd\u003e470\u003c\/td\u003e\n\u003ctd\u003e495\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"a\"\u003e\n\u003ctd\u003eB\u003c\/td\u003e\n\u003ctd\u003eEFF. TOP TUBE LENGTH\u003c\/td\u003e\n\u003ctd\u003e554\u003c\/td\u003e\n\u003ctd\u003e574\u003c\/td\u003e\n\u003ctd\u003e600\u003c\/td\u003e\n\u003ctd\u003e623\u003c\/td\u003e\n\u003ctd\u003e653\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"b\"\u003e\n\u003ctd\u003eC\u003c\/td\u003e\n\u003ctd\u003eHEAD TUBE ANGLE\u003c\/td\u003e\n\u003ctd\u003e66.5\u003c\/td\u003e\n\u003ctd\u003e66.5\u003c\/td\u003e\n\u003ctd\u003e66.5\u003c\/td\u003e\n\u003ctd\u003e66.5\u003c\/td\u003e\n\u003ctd\u003e66.5\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"a\"\u003e\n\u003ctd\u003eD\u003c\/td\u003e\n\u003ctd\u003eEFF. SEAT TUBE ANGLE\u003c\/td\u003e\n\u003ctd\u003e75
\u003c\/td\u003e\n\u003ctd\u003e1236\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"a\"\u003e\n\u003ctd\u003eH\u003c\/td\u003e\n\u003ctd\u003eESTIMATED BB HEIGHT\u003c\/td\u003e\n\u003ctd\u003e335\u003c\/td\u003e\n\u003ctd\u003e335\u003c\/td\u003e\n\u003ctd\u003e335\u003c\/td\u003e\n\u003ctd\u003e335\u003c\/td\u003e\n\u003ctd\u003e335\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"b\"\u003e\n\u003ctd\u003eI\u003c\/td\u003e\n\u003ctd\u003eSTANDOVER\u003c\/td\u003e\n\u003ctd\u003e768\u003c\/td\u003e\n\u003ctd\u003e768\u003c\/td\u003e\n\u003ctd\u003e771\u003c\/td\u003e\n\u003ctd\u003e771\u003c\/td\u003e\n\u003ctd\u003e776\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"a\"\u003e\n\u003ctd\u003eJ\u003c\/td\u003e\n\u003ctd\u003eHEAD TUBE LENGTH\u003c\/td\u003e\n\u003ctd\u003e92\u003c\/td\u003e\n\u003ctd\u003e92\u003c\/td\u003e\n\u003ctd\u003e101\u003c\/td\u003e\n\u003ctd\u003e111\u003c\/td\u003e\n\u003ctd\u003e133\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"b\"\u003e\n\u003ctd\u003eK\u003c\/t
Small
tions":["White","Extra Small"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55211127865727,"title":"White \/ Small","option1":"White","option2":"Small","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Yeti Cycles ASR T-Series 29\" Frame - White \/ Small","public_title":"White \/ Small","options":["White","Small"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55211127898495,"title":"White \/ Medium","option1":"White","option2":"Medium","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Yeti Cycles ASR T-Series 29\" Frame - White \/ Medium","public_ti
e - White \/ Extra Large","public_title":"White \/ Extra Large","options":["White","Extra Large"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55211127996799,"title":"Blue \/ Extra Small","option1":"Blue","option2":"Extra Small","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Extra Small","public_title":"Blue \/ Extra Small","options":["Blue","Extra Small"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55211128029567,"title":"Blue \/ Small","option1":"Blue","option2":"Small","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"av
e":null,"available":false,"name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Large","public_title":"Blue \/ Large","options":["Blue","Large"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55211128127871,"title":"Blue \/ Extra Large","option1":"Blue","option2":"Extra Large","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Yeti Cycles ASR T-Series 29\" Frame - Blue \/ Extra Large","public_title":"Blue \/ Extra Large","options":["Blue","Extra Large"],"price":379900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtturq_1.webp?v=1742310750","\/\/projektride.co.uk\/cdn\/shop\/f
ght":833,"width":697,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtgreyh_1.webp?v=1742310750"},"aspect_ratio":0.837,"height":833,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ycf25asrtgreyh_1.webp?v=1742310750","width":697}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cdiv data-decoded=\"true\" data-element=\"main\" data-appearance=\"default\" data-content-type=\"html\"\u003e\n\u003cdiv class=\"Yeti-Text_Intro-BG\"\u003e\n\u003cdiv class=\"Yeti-Text_Intro-Text\"\u003e\n\u003cp\u003eA decade ago we peaced out of the lycra game. While we were busy getting down, XC got a lot more X, calling for the comeback of a legend. Flashing a crazy-light, zero-redundant carbon layup that's far beyond the previously possible. Featuring 115mm of flex stay suspension for 100% usable travel, and energy saving small-bump compliance. Helping today's racers be faster where they have to be. On first blush it may appear to have peers, but don't get it twisted. The reincarnBelarus (GBP£)
Medium
v class=\"feature-box\"\u003e\n\u003cp class=\"feature-box_value\"\u003e75.5°\u003cspan\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"feature-box_value-type\"\u003eEFF. SEAT ANGLE\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Highlights-BG_ASR\"\u003e\n\u003cdiv class=\"Yeti-Text_Highlights-Text\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eHIGHLIGHTS\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eRockShox SID Ultimate 3-Position Flight Attendant and\u003cbr\u003eRockShox SIDLuxe Ultimate 3-Position Flight Attendant shock\u003c\/li\u003e\n\u003cli\u003eRockShox Reverb AXS dropper post\u003c\/li\u003e\n\u003cli\u003eSRAM XX SL Transmission drivetrain with power meter\u003c\/li\u003e\n\u003cli\u003eDT Swiss XRC1200 wheels\u003c\/li\u003e\n\u003cli\u003eESI Chunky grips\u003c\/li\u003e\n\u003cli\u003eWireless Only Frame\u003c\/li\u003e\n\u003cli\u003e1,448g (Frame No shock) 1813g (Frame and shock)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp class=\"Yeti-Title\"\u003eT3\u
003c\/li\u003e\n\u003cli\u003e28-36t Max (38t MD-XL) chainring compatability\u003c\/li\u003e\n\u003cli\u003eConfigurable cable routing ports\u003c\/li\u003e\n\u003cli\u003e2 main frame waterbottles\u003c\/li\u003e\n\u003cli\u003eIntegrated rear mud fender\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Overview-Box\"\u003e\n\u003cdiv class=\"Yeti-Text_Overview-Box_Inner\"\u003e\n\u003cp\u003eTHE NEW ASR MARKS THE MOST EXTENSIVE CARBON PROJECT WE’VE EVER TACKLED. YIELDING THE LIGHTEST FULL SUSPENSION BIKE IN OUR HISTORY, CONTEMPORISING OUR FLEX STAY DESIGN TO CHECK TODAY’S KINEMATICS STANDARDS, KILLER SMALL - BUMP SENSITIVITY, INSANE TRACTION AND 100% USABLE TRAVEL.\u003c\/p\u003e\n\u003cp\u003eTHE ASR IS BACK. WE’VE NEVER MADE A LIGHTER FULL - SUSPENSION BIKE, BUT THAT’S JUST HALF THE STORY. IT BRINGS PROPER SUSPENSION TO PROPER MOUNTAIN BIKE RACING. THE KIND THAT TAKES SKILL, NOT JUST LUNGS.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u0
003eModern XC rewards brilliant passing, which takes brilliant cornering. The ASR’s forward-bias geometry delivers responsive steering and predictable characteristics to slash fast.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cb\u003e“JUST RIGHT” BB HEIGHT\u003c\/b\u003e\u003cbr\u003eA bottom-bracket positioned high enough to pedal through rock gardens, but low enough to sit below the axles for rail-like cornering thanks to that coveted, “in bike” feel.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_BLK\"\u003e\n\u003cdiv class=\"Yeti-Text_Tech-Box_BLK_Inner\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eSIZE SPECIFIC STIFFNESS.\u003cbr\u003eFINE-TUNED.\u003c\/p\u003e\n\u003cp\u003eAnother goal was to engineer each frame for the same ride\u003cbr\u003echaracteristics to give every rider the same feel, regardless of size.\u003cbr\u003eEvery ASR frame has size-specific carbon schedules tuning at a mu
Belgium (EUR€)
\u003cp\u003eClearance for a 2.4 tyre with 30mm internal rims\u003cbr\u003eprovides maximum traction and ride quality.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"Yeti-Text_Size-Guide-BG\"\u003e\n\u003cdiv class=\"Yeti-Text_Size-Guide-Text\"\u003e\n\u003cp class=\"Yeti-Title\"\u003eSIZE GUIDE\u003c\/p\u003e\n\u003cdiv id=\"sizechart\"\u003e\n\u003ctable id=\"sizechart\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd id=\"sizechart\"\u003e\u003cstrong\u003eX-SMALL\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e4'10\" - 5'3\"\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd id=\"sizechart\"\u003e\u003cstrong\u003eSMALL\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e\u003c\/td\u003e\n\u003ctd id=\"sizechart\"\u003e5'1\" - 5'7\"\u003c\/t
Botswana (BWPP)
che age
if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) {
console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
window._RestockRocketConfig.liquidCacheAge = null;
} else {
const now = Math.floor(Date.now() / 1000); // Current time in seconds
const liquidCacheAge = now - liquidRenderedAt; // Age in seconds
// Surfaced into funnel events: a stale cache means the app rendered with
// outdated inventory/selling-plan data — a real "had the opportunity but
// failed" cause. Negative (client clock ahead) clamps to 0.
window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge);
// Handle client clock ahead of server
if (liquidCacheAge
0) {
console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else if (liquidCacheAge
= 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;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no
age = Date.now() - updatedAt.getTime();
if (age British Indian Ocean Territory (USD$)
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')
// Fire stoq_initialized once per page load so the funnel pipeline has a definitive
// "our code ran on this page" signal independent of any cus
ctedVariantId || '',
liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0,
app_version: _stoqInitConfig.appVersion || '',
liquid_cache_age: _stoqInitConfig.liquidCacheAge,
// Selected variant's stock posture as our app saw it at render — explains
// whether we *should* have treated it as a preorder candidate.
inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '',
inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId],
});
} catch (e) {
console.debug('STOQ - stoq_initialized publish failed:', e);
}
// STOQ-1595: publish stoq_accelerated_checkout_clicked for every accelerated-checkout
// click (Buy Now / dynamic checkout / Shop Pay installments) on ALL surfaces, before our
// bundle loads, via one delegated capture-phase listener (catches late-rendered buttons).
// Only on shops with preorders configured (shared `preordersConfigured` signal from the
// derivati
st('form');
var vidEl = form && form.querySelector('[name="id"]');
var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
// The enabled STOQ selling plan the clicked variant belongs to (if any), found once and
// reused for in_enabled_plan / enrolled_plan_id / enrolled_plan_provider below.
var _sqVidNum = Number(variantId);
var _sqPlan = null;
// Array.isArray guard (not `|| []`) so a truthy non-array sellingPlans can't throw and
// silently drop the whole publish.
var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : [];
_sqPlans.forEach(function (pl) {
if (!_sqPlan && pl && pl.enabled && Array.isArray(pl.variant_ids) &&
pl.variant_ids.indexOf(_sqVidNum) !== -1) { _sqPlan = pl; }
});
Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', {
variant_id: variantId,
product_id: (_sqTr a like-typed compare.
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);
})(),
// Narrow, authoritative preorder signal: enrolled in an ENABLED STOQ selling plan
// (is_preorder_variant above is the broad OOS+continue heuristic — non-STOQ too).
in_enabled_plan: !!_sqPlan,
// In-stock preorder signal: enrolled but currently IN STOCK (in the inStockVariantIds
// set, not the OOS preorderVariantIds set). Same live-OR-cached pattern as
// is_preorder_variant. is_preorder_variant OR is_instock_variant = "should sell via
// the plan" regardless of stock, so an in-stock preord
cceleratedGateArmed,
gate_active_at_click: !!(document.documentElement &&
document.documentElement.classList.contains('stoq-buy-now-pending')),
},
});
} catch (err) { /* never break checkout */ }
}, true);
}
} catch (e) { /* fail open */ }
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 || {})Bulgaria (EUR€)
tion 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);
});
}
});
}
// ---- Live settings via the Storefront API (ad
<
"settings") { value } } }';
fetch(
`https://${cfg.shop}/api/2025-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.status); }
return response.json();
})
.then(function(body) {
if (body && body.errors && body.errors.length) {
throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', '));
}
const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value;
if (!value) { throw new Error('Storefront API returned no settings metafield value'); }
cfg.sto
p'
};
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(cachedSettings);
} else {
console.error('SBurkina Faso (XOFFr)
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}`);
// Stale-Liquid resilience (default-on, per-shop opt-out via the
// `disable_refresh_on_stale_liquid` Toggle, surfaced as the negative
// `disable_refresh_on_stale_liquid` flag in settings.json so that
// `undefined` -- in CDN-cached metafield payloads that predate this
// key -- reads as `!undefined === true` and gets default-on behavior
// immediately, no metafield rewrite required).
// When the Liquid CDN cache is older than LIQUID_CACHE_MAX_AGE the in-page
// selling_plans / integrations metafields can be wrong; refresh both from
// the API before launching scr
}
}),
fetchEmbedConfig('integrations', function(data) {
if (Array.isArray(data)) {
window._RestockRocketConfig.integrations = data;
}
})
]),
new Promise(function(resolve) { setTimeout(resolve, 1000); })
]).then(function() { loadScripts(settings); });
return;
}
loadScripts(settings);
}
function loadScripts(settings) {
// 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);
})
// STOQ-1520: serve the lean back-in-stock-only build (no preorder/hijack code)
// only to shops with NO preorder plans. Use the full build if preorder is o
onPageTypes = ['collection', 'index', 'search', 'page'];
if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) {
createRestockRocketScript(collectionScriptUrl);
} else if(pageType === 'product') {
createRestockRocketScript(productScriptUrl);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(usePreorderBuild) {
// cart/article/blog/list-collections: full build so the cart sweep runs.
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${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._RestockR
Burundi (BIFFr)
Cameroon (XAFCFA)
Cape Verde (CVE$)