91³Ô¹ÏÍø

Watch CBS News

Colorado's Front Range Passenger Rail plans to make stops across Boulder County

The Colorado Connector will be joining the Union Station schedule in 2029 and as CBS Colorado's Sarah Horbacewicz commuted to Boulder on Wednesday, some riders were all aboard.

coco-train-graphic-2-front-range-passenger-rail-district.jpg
A graphic provided by the Front Range Passenger Rail District shows what the forthcoming Front Range Passenger Rail could look like, after voters decided on the winning name for the train, "CoCo," short for, "Colorado Connector." Front Range Passenger Rail District

One commuter to Boulder told CBS Colorado, "I think a train would be more predictable in terms of getting on the train, getting off the train. There's not as much traffic on train tracks as there is on the road… I think it would be great."

Front Range Passenger Rail leaders say the train will start with three runs a day, and for some riders, that's not enough.

Another commuter shared, "I think it probably needs more stops, more options. Right now, the bus works perfectly for me. It comes every 15 minutes."

Leaders of the FRPR project are seeking that feedback and sharing the latest information about the train through town halls across the region.

front-range-passenger-rail-map.jpg
FRPR

General Manager for the FRPR district, Sal Pace, said, "Three (runs a day) is a starting point, and then we're considering a ballot question in November to possibly tax ourselves. It would be up to the voters to do that, and then we could build up to 10 round-trip a day."

Wednesday's town hall in Boulder was a packed room as Mayor Aaron Brockett shared his support for this new transit option.

"As you all know, you've been waiting for train service in Boulder for many, many years," Brockett said.

And although the train may take just as long as a bus to Boulder, project leaders say there's more to it.

"They're sick of the traffic and congestion on I-25. The price of driving, especially with gas prices, is just way too high. We need to clean up our air, and this is an opportunity to do all of the above," Pace said.

sherrod-train-12pm-live-frame-24895.png
Colorado Gov. Jared Polis, center, announces the winning name of the Front Range Passenger Rail train at a news conference at Union Station in Denver, Colorado, on Monday, April 6, 2026. CBS

But for some, it might not be worth the wait.

One commuter told CBS Colorado, "I'm old enough that I won't be commuting by 2029."

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=50747257b890e014813016b79ece0fb2'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });