Ultra Trail Collective

A UK-wide community for trail and ultra runners. Find people to run with, discover brilliant routes and get out for more days in wild places.

Into the wild we run
UTC runners descending a rocky hillside together
Run Together  /  Ultra Trail Collective

For the miles
between races.

You meet someone halfway through an ultra, spend hours putting the world to rights and say, “We should go for a run sometime.” Then race weekend ends and everyone heads home.

UTC is for everything in between. A UK-wide community of trail, fell and ultra runners sharing plans, finding company and getting out for more days in wild places.

Runner heading through a green meadow on a summer day
Runners following a snowy trail into the hills
The idea

It starts with a simple question.

Heading out on Saturday? Put the idea in the group. Seen someone planning a route you’ve always fancied? Ask if you can come along. It can be a couple of hours on the local trails or a whole day crossing the fells.

“I’m heading out for a long one this weekend. Anyone fancy joining me?”

That’s it. No need for a grand expedition or a complicated plan. Just runners getting together to do more of what they love.

Three UTC runners crossing open green hills beneath a vast sky
Your run, your plans

Not another club to fit your life around.

Keep your local club. Keep your solo miles. UTC sits alongside them, connecting people who fancy the same kind of adventures. No weekly sessions to commit to and no club hierarchy.

Race recces, social ultras, big fell days, classic routes, fastpacking weekends, slow miles with good company. The plans come from the people who want to do them.

A group of runners and a dog smiling together at a summit
The best bit

A familiar face on the start line. A new mate on the trail.

Maybe you turn up knowing nobody. A few hours later you’ve shared a climb, got lost in conversation and made plans for the next one. The running brings people together. The connections carry on beyond it.

And you don’t have to be an elite runner or have a hundred-miler on the calendar. If you love getting out on trails and meeting people who understand why you do it, you’ll understand UTC.

Runners climbing a moorland slope beneath a bright break in the cloud
Runners crossing a stream together on a green valley trail
There’s always another day out

Some of the best days start with a post in the group.

A route you’ve been meaning to try. A recce before your next race. A few miles somewhere new because someone local knows the way. Or an overambitious idea that sounds considerably more sensible when a few others fancy it too.

There’s room for the big stuff and the ordinary stuff. You don’t have to organise anything to belong, but if you’ve got a plan, put it out there. Someone else might have been waiting for exactly that invitation.

Three runners heading towards a distant viaduct beneath low cloud
Come and be part of it

Into the wild
we run.

Most UTC runs, recces and meetups begin in the Facebook group. See what people are planning, join a day that takes your fancy, or put your own idea out there.

Join the UTC Facebook group Follow the adventures on Instagram ↗

UTC is a community for sharing informal running plans, not a guided running service. Check the route and conditions, bring what you need and look after yourself in the hills.

Ultra Trail Collective
Dales landscape used for the Dentdale Dash challenge

A UTC original  /  The train chase

Dentdale Dash

Take the train out. Run back before it does.

Dentdale Dash starts with the train from Settle to Dent. Get off at Dent Station, turn for home on foot and try to reach Settle before the next southbound train.

The current route drops from the station into Dentdale before working its way back across the Yorkshire Dales. One journey by rail. One on your own two feet.

24.00 milesDistance
3,496 ftAscent
4h 13mProposed window
UTC runners out on a trail with hills beyond

The challenge

Four hours and thirteen minutes. Can you beat the train?

The proposed train arrives at Dent at 12:16. The next southbound service reaches Settle at 16:29. That's the clock you're up against.

Train out

Settle → Dent

Run starts

12:16

Finish

Settle

Train arrives

16:29

These timings are the current challenge concept, not a confirmed timetable for your travel date. Check train services before setting off.

The route

From Dent, on foot.

Starting high above Dentdale, the route drops into the valley and heads back towards Settle. It's a point-to-point challenge with the train doing the work in one direction and you doing it in the other.

The route is still to be recce'd, so treat the GPX as a working version rather than a final course.

Plan your own navigation, check the current railway timetable and allow for the station's location above the valley.

The first recce · Still to come

There’s a route to run. And a train to catch.

We haven't run Dentdale Dash yet. Once we've been out to test the route, we'll come back with the photographs, the awkward bits and the story of how it went. For now, here's the idea and the working GPX.

Beat the train?

Let us know.

Share your run, photos or Strava activity in the UTC Facebook group and we’ll add you to the Dentdale Dash completers list.

Share your run ↗
Runners crossing open limestone moorland beneath a huge Yorkshire Dales sky

Malham Tarn Returns

A Yorkshire DIY Ultra

The challenge

Malham Tarn Returns is a self-supported ultra built around four loops from Malham Tarn.

Limestone scars, open moorland, big views and some cracking runnable trails. Four different loops take you through the Yorkshire Dales, each bringing you back to the Tarn before heading off somewhere new.

Run one, do two or keep going for the full 50-odd miles. It's a proper day out in the hills, with the freedom to make it as big as you fancy.

51.65 milesTotal distance
7,620 ftTotal ascent
SD 894 658Start / Map ↗
Malham Tarn shoreline beneath a dramatic sky

Four loops, and none of them feel quite the same.

There’s the limestone around Attermire Scar, the climb onto Fountains Fell with Pen-y-ghent across the valley, a long runnable drop into Littondale, the graft back up Yew Cogar Scar, then good runnable trails following the river towards Gordale Scar on the final loop.

Enough variety to make each loop feel like its own little day out, even though you keep coming back to the same car boot.

Two runners on a trail above a limestone valley
Cloud rolling across the fells above Malham

The format

One loop or all four

The idea is simple. Each loop starts and finishes at Malham Tarn, where your car boot becomes your own aid station.

Food, water, spare layers, dry socks, whatever you think you might need. Run a loop, come back, sort yourself out and go again.

Each loop is roughly half-marathon distance, so you can build towards the full 50 miles without arranging food drops or aid stations across the Dales.

No race number. No clock. No pressure. Just complete the loops in order if you're going for the full challenge.

Ready to give it a go?

The details

Complete Loops 1, 2, 3 and 4 in order to complete Malham Tarn Returns. Touch the big boulder in front of the information board at the start and end of each loop.

01

13.47 miles  •  2,293 ft

Pennine Bridleway, Attermire Scar and Malham Cove. Runnable early miles followed by classic limestone country and plenty of climbing.

GPX ↗
02

12.21 miles  •  1,517 ft

Malham Tarn, Fountains Fell and open peat moorland. A rougher, pathless section across open-access land leads onto Fountains Fell before a quicker Pennine Way return.

GPX ↗
03

13.78 miles  •  2,361 ft

Fast trails into Littondale, testing climbs and a return through dramatic Yew Cogar Scar. The biggest climbing loop of the four.

GPX ↗
04

12.23 miles  •  1,499 ft

Weets Top, Calton Moor, Janet’s Foss and Gordale Scar. Faster running overall, with one final climb before the finish.

GPX ↗

Full challenge

51.65 miles  •  7,620 ft

Full GPX ↗
Hef running beside drystone walls under a big Dales sky

The first go

Three loops, around 40 miles and a cracking day in the Dales.

Loop 1. Into limestone country

I met Stella and Thea at Malham Tarn car park on a crisp, bright morning in May.

We'd got to know each other through UTC and had already shared a few big days out together. We were there for the first running of Malham Tarn Returns, with another runner planning to join us for Loop 2 while he was in the area.

We touched the boulder beside the information board, started our watches and headed off for Loop 1, full of chat and excitement for the miles ahead.

The route starts with a long, runnable stretch along the Pennine Bridleway. Not the most exciting part by any stretch, but a good chance to wake the legs up and bank some easy miles, with views across the moors towards Pen-y-ghent. We'd be getting a much closer look at that on Loop 2.

Around halfway, we dropped towards Settle before turning sharply uphill into Attermire Scar.

This is where things get really good.

Huge limestone outcrops, grassy trails and some fantastic scenery. Proper limestone country, with caves all over the place.

The route passes a few smaller caves, with the magnificent Victoria Cave not far away. Prehistoric animal remains have been found there, including rhinoceros bones. Rhinos in Yorkshire. Who'd have thought it?

It's worth a little detour if you're not in a rush.

Stone building and trees in the Yorkshire Dales
Green path curving between drystone walls

We carried on, gradually climbing back across the moors until Malham Tarn came into view again in the distance.

But we weren't heading straight back just yet.

The route dropped steeply through fields and drystone wall country into Malham, where the steps beside the magnificent Cove were waiting.

That was a proper climb.

The reward was the view from the top, looking out across Malhamdale and the extraordinary limestone pavement. We were still early enough to have the place largely to ourselves, which made it even better.

From there, we had one final climb through the dry valley of Watlowes, winding our way back towards the Tarn.

Back at the car park, we touched the boulder again.

Loop 1 done.

The well-stocked car-boot aid station

The car boot aid station might be my favourite part of the whole thing.

I’d gone completely overboard. Olives, cheese, crackers, samosas, cake, fruit, apple pie, Babybels, chocolate, pop. It was less an aid station and more a picnic.

Refill the bottles, grab whatever suddenly looks appealing, change a layer, sit down for five minutes, then shut the boot and head back out.

I’d packed so much that I was still eating it the next day.

Loop 2. Up onto Fountains Fell.

Back at the car, we met Colin. He'd seen the event on the UTC Facebook group and happened to be in the area. He didn't fancy the full challenge this time, but was up for joining us for Loop 2. It was great to meet another runner through the group, and all four of us headed out in good spirits.

The route followed the shore of Malham Tarn and picked up the Pennine Way for a short stretch before turning sharply left towards the main climb onto Fountains Fell.

We crossed a few fields, watched by sheep who seemed entirely unimpressed by our plans. Through a gate, a sharp right, and we were following a very faint trod beside the remains of an old drystone wall. It ran almost straight up the flank of the fell, giving us a line to follow as we climbed.

By the time we reached the trig point on the ridge, the wind had picked up and cloud was beginning to roll over the tops.

From there, the route headed towards Fountains Fell South Top, past the little tarn and on towards the main summit, its trig point and cairns. The views across the valley to Pen-y-ghent were fantastic. We'd been looking towards it from the Pennine Bridleway on Loop 1. Now we were seeing it from a completely different angle.

Signpost and drystone wall overlooking the DalesOpen green Dales valley

The higher ground was probably the wildest-feeling part of the route so far. The paths became much fainter and we found ourselves weaving around peat bogs. Nothing especially technical, just rougher ground that made you pay a bit more attention to where you were putting your feet and which direction you actually needed to go.

I really enjoyed this section. It felt properly out in the hills.

Eventually we picked up the Pennine Way again and descended on faster trails towards Malham Tarn. After the slower going up top, it was lovely to get the legs turning over again. A final stretch along the shoreline brought us back to the car park.

Loop 2 done.

It was time to unleash the car-boot picnic again.

We said our goodbyes to Stella and Colin, who had decided to call it a day, while Thea and I stocked up on a few supplies, ready to head back out for Loop 3.

By the time we'd finished the third loop, the weather had properly started closing in and the evening was drawing on. It had already been a fantastic day, so we called it there and decided to save Loop 4, and the views that come with it, for another day.

Loop 4 can wait.

That's part of the point really. This isn't a race. If the weather turns, your legs have had enough or you've simply had a cracking day and decide that'll do, head back to the car and call it.

Runner on a sweeping hillside beneath a huge sky

It felt like a proper journey, even though we kept coming back to where we'd started.

I'd wondered whether running loops from the same car park might start to feel repetitive, but it hadn't. Each took us somewhere different. The terrain changed, the views changed, and every return to the Tarn felt like the end of another little adventure.

What I really liked was having our own base waiting. Food, water, dry kit and no worrying about food drops or carrying everything for an entire day. It made the distance feel a little more manageable, without taking away the challenge.

And that was probably the biggest thing I took away from the day. Every time we returned to the car, we had a choice. Eat something, sort ourselves out and head back into the hills, or call it a day.

We'd already had a fantastic 40 miles when we made that decision ourselves.

And that's the beauty of it. There's nobody pushing you to finish, no clock to beat and nothing to prove to anyone else.

How far will you go when the decision is entirely yours?

Malham Tarn and surrounding fells in low cloud

The return · Coming later

Loop 4. Return to Malham Tarn Returns.

I'd like to say I returned seven months later fitter and better prepared. But where would the fun be in that?

What I did have was a stubborn determination to run all four loops this time.

The days were shorter, the weather less forgiving, and winter darkness would be arriving considerably earlier.

But there was unfinished business at Malham Tarn.

And I was going back for another go.

Draft opening for the next chapter. The return trip is still to come.

Done the full four?

Let us know.

Share your Strava or photos in the UTC Facebook group and we’ll add you to the completers list.

Share your run ↗

The Route Library

Find a Route

Working our way around the UK, collecting classic rounds, old race routes, local challenges and paths worth pulling your shoes on for.

Yorkshire Dales landscape

01 / 30 routes

Yorkshire

Dales, moors, coast, limestone, gritstone, old trods, forgotten paths and a fair amount of bog.

Explore Yorkshire
Gritstone hills and moorland in the Peak District

02 / Coming next

Peak District

Gritstone edges, open moors, deep cloughs, old packhorse tracks and proper fell country.

Coming soon
(function(){ var slider=document.getElementById( "utcRouteSlider" ); var template=document.getElementById( "utcFirst10Routes" ); if(!slider||!template){ return; } slider.innerHTML=""; slider.appendChild( template.content.cloneNode(true) ); })();
(function(){ var slider=document.getElementById("utcRouteSlider"); var template=document.getElementById("utcRoutes6to10"); if(!slider||!template){return;} slider.appendChild(template.content.cloneNode(true)); })();
(function(){ var slider=document.getElementById("utcRouteSlider"); var template=document.getElementById("utcRoutes11to15"); if(!slider||!template){return;} slider.appendChild(template.content.cloneNode(true)); })();
(function(){ var slider=document.getElementById("utcRouteSlider"); var template=document.getElementById("utcRoutes16to20"); if(!slider||!template){return;} slider.appendChild(template.content.cloneNode(true)); })();
(function(){ var slider=document.getElementById("utcRouteSlider"); var template=document.getElementById("utcRoutes21to25"); if(!slider||!template){return;} slider.appendChild(template.content.cloneNode(true)); })();
(function(){ var slider=document.getElementById("utcRouteSlider"); var template=document.getElementById("utcRoutes26to30"); if(!slider||!template){return;} slider.appendChild(template.content.cloneNode(true)); })();
(function(){ 'use strict'; var attempts=0; var started=false; var storageKey='utc_routes_explored_v1'; function start(){ if(started){return;} var slider=document.getElementById('utcRouteSlider'); var tracker=document.getElementById('route-tracker'); if(!slider||!tracker||!slider.querySelector('.utc-card')){ attempts++; if(300>attempts){ setTimeout(start,100); } return; } started=true; var cards=[]; var explored=[]; var frame=0; var rebuildTimer=0; var observed=new WeakSet(); var resizeObserver=null; var settledSlide=null; var settleTimer=0; try{ explored=JSON.parse( localStorage.getItem(storageKey)||'[]' ); if(!Array.isArray(explored)){ explored=[]; } } catch(error){ explored=[]; } function distance(card){ var direct=parseFloat( card.getAttribute('data-distance') ); if(!isNaN(direct)){ return direct; } var stats=card.querySelector('.utc-stats'); var match=stats&& (stats.textContent||'').match( /(\d+(?:\.\d+)?)\s*(?:\+)?\s*miles?/i ); return match?parseFloat(match[1]):null; } function ascent(card){ var stats=card.querySelector('.utc-stats'); var match=stats&& (stats.textContent||'').match( /([\d,]+)\s*ft(?:\s*ascent)?/i ); return match ?parseInt(match[1].replace(/,/g,''),10) :0; } function write(id,value){ var node=document.getElementById(id); if(node){ node.textContent=value; } } function updateExplored(){ explored=Array.from(new Set(explored)); var selected=cards.filter(function(card){ return explored.indexOf(card.id)!==-1; }); var miles=selected.reduce(function(total,card){ return total+(distance(card)||0); },0); var climbed=selected.reduce(function(total,card){ return total+ascent(card); },0); write('utcExploredCount',selected.length); write('utcExploredTotal',cards.length); write( 'utcMilesTotal', Number.isInteger(miles)?miles:miles.toFixed(1) ); write( 'utcAscentTotal', climbed.toLocaleString('en-GB') ); var bar=document.getElementById('utcProgressBar'); if(bar){ bar.style.width=( cards.length ?100*selected.length/cards.length :0 )+'%'; } cards.forEach(function(card){ var button=card.querySelector('.utc-explored'); if(!button){ return; } var on=explored.indexOf(card.id)!==-1; button.classList.toggle('on',on); button.setAttribute( 'aria-pressed', on?'true':'false' ); button.textContent=( on?'✓ ':'□ ' )+'EXPLORED'; button.setAttribute( 'aria-label', on?'Mark as not explored':'Mark as explored' ); }); try{ localStorage.setItem( storageKey, JSON.stringify(explored) ); } catch(error){} } function addButton(card){ card.style.removeProperty('height'); var body=card.querySelector('.utc-body'); if(!body||body.querySelector('.utc-explored')){ return; } var footer=document.createElement('div'); footer.className='utc-route-footer'; var action=Array.from(body.children).find( function(el){ return el.classList.contains('utc-actions'); } ); if(!action){ action=Array.from(body.children).find( function(el){ return el.classList.contains('utc-gpx'); } ); } if(action){ footer.appendChild(action); } var button=document.createElement('button'); button.type='button'; button.className='utc-explored'; button.setAttribute('aria-pressed','false'); button.textContent='□ EXPLORED'; button.addEventListener('click',function(){ if(explored.indexOf(card.id)!==-1){ explored=explored.filter(function(id){ return id!==card.id; }); } else{ explored.push(card.id); } updateExplored(); scheduleHeight(); }); footer.appendChild(button); body.appendChild(footer); } /* Match the slider height to the visible card. */ function updateHeight(){ frame=0; var slides=Array.from( slider.querySelectorAll('.utc-tracker,.utc-card') ); if(!slides.length){ return; } var style=getComputedStyle(slider); var edge=slider.getBoundingClientRect().left+ (parseFloat(style.paddingLeft)||0); var active=slides[0]; var nearest=Infinity; slides.forEach(function(slide){ var delta=Math.abs( slide.getBoundingClientRect().left-edge ); if(nearest>delta){ nearest=delta; active=slide; } }); var padding=( parseFloat(style.paddingTop)||0 )+( parseFloat(style.paddingBottom)||0 ); var target=Math.ceil( active.getBoundingClientRect().height+ padding ); if(target>0){ slider.style.height=target+'px'; } } function scheduleHeight(){ if(frame){ return; } frame=requestAnimationFrame(updateHeight); } /* Find the card aligned with the slider's left edge. */ function currentSlide(){ var slides=Array.from( slider.querySelectorAll('.utc-tracker,.utc-card') ); if(!slides.length){ return null; } var style=getComputedStyle(slider); var edge=slider.getBoundingClientRect().left+ (parseFloat(style.paddingLeft)||0); var active=slides[0]; var nearest=Infinity; slides.forEach(function(slide){ var delta=Math.abs( slide.getBoundingClientRect().left-edge ); if(nearest>delta){ nearest=delta; active=slide; } }); return active; } /* Return to the distance ruler after changing cards. Don't jump during a swipe or when ticking Explored. */ function finishCardChange(){ if(settleTimer){ clearTimeout(settleTimer); settleTimer=0; } var active=currentSlide(); if(!active){ return; } if(!settledSlide){ settledSlide=active; return; } if(settledSlide===active){ return; } settledSlide=active; scheduleHeight(); var ruler=document.getElementById( 'utcDistanceBrowser' ); var anchor=ruler|| document.getElementById('utcCarouselTop'); if(!anchor||!anchor.getClientRects().length){ return; } var top=Math.max( 0, window.scrollY+ anchor.getBoundingClientRect().top-10 ); if(Math.abs(window.scrollY-top)>12){ window.scrollTo({ top:top, behavior:'instant' }); } } function onSliderScroll(){ scheduleHeight(); if(settleTimer){ clearTimeout(settleTimer); } settleTimer=setTimeout( finishCardChange, 180 ); } /* Sort routes and attach Explored controls. */ function rebuild(){ rebuildTimer=0; cards=Array.from( slider.querySelectorAll('.utc-card') ); if(!cards.length){ return; } var sorted=cards.map(function(card,index){ var miles=distance(card); return { card:card, index:index, miles:miles===null?Infinity:miles }; }); sorted.sort(function(a,b){ return a.miles===b.miles ?a.index-b.index :a.miles-b.miles; }); if(sorted.some(function(item,index){ return item.card!==cards[index]; })){ sorted.forEach(function(item){ slider.appendChild(item.card); }); cards=Array.from( slider.querySelectorAll('.utc-card') ); } cards.forEach(addButton); tracker.style.removeProperty('height'); if(resizeObserver){ Array.from( slider.querySelectorAll( '.utc-tracker,.utc-card' ) ).forEach(function(el){ if(!observed.has(el)){ observed.add(el); resizeObserver.observe(el); } }); } updateExplored(); scheduleHeight(); if(!settledSlide){ settledSlide=currentSlide(); } } function scheduleRebuild(){ if(!rebuildTimer){ rebuildTimer=setTimeout(rebuild,0); } } /* Keep height responsive during horizontal scrolling. */ slider.addEventListener( 'scroll', onSliderScroll, {passive:true} ); /* Jump to the ruler only once scrolling has finished. The timer in onSliderScroll covers older browsers. */ if('onscrollend' in slider){ slider.addEventListener( 'scrollend', finishCardChange, {passive:true} ); } window.addEventListener( 'resize', scheduleHeight ); window.addEventListener( 'load', scheduleHeight ); window.addEventListener( 'hashchange', scheduleHeight ); window.addEventListener( 'pageshow', scheduleHeight ); if(document.fonts&&document.fonts.ready){ document.fonts.ready.then(scheduleHeight); } if('ResizeObserver' in window){ resizeObserver=new ResizeObserver( scheduleHeight ); resizeObserver.observe(slider); } /* Recalculate when Carrd opens Yorkshire. */ var yorkshire=document.getElementById( 'york-section' ); if(yorkshire){ new MutationObserver( scheduleHeight ).observe(yorkshire,{ attributes:true, attributeFilter:['style','class'] }); } /* Pick up route batches loaded later. */ new MutationObserver( scheduleRebuild ).observe(slider,{ childList:true }); rebuild(); setTimeout(scheduleHeight,250); setTimeout(scheduleHeight,1000); } if(document.readyState==='loading'){ document.addEventListener( 'DOMContentLoaded', start, {once:true} ); } setTimeout(start,120); })();