91³Ô¹ÏÍø

Watch CBS News

The Philadelphia Phillies' 2026 Opening Day roster is set: See who's on the list

Philadelphia Phillies top prospects Andrew Painter and Justin Crawford have officially graduated to MLB.

Painter and Crawford are officially on the Phillies' initial Opening Day roster, released Wednesday afternoon.

According to the Phillies' website, Painter will wear No. 24 and Crawford, No. 2.

Some recent Phillies who wore No. 24: Darick Hall (2023), Roman Quinn (2016-22), Darnell Sweeney (2015), Grady Sizemore (2014-15) and Ty Wiggington (2012).

Some recent Phils who wore No. 2: Harrison Bader (2025), Kody Clemens (2024-25), Josh Harrison (2023), Jean Segura (2019-22), J.P. Crawford (2017-2018), Tyler Goeddel (2016), Chase d'Arnaud (2015) and Ben Revere (2013-15).

The Phils selected Crawford's contract, adding him to the 40-man roster. The club also selected infielder Christian Cairo's contract and optioned him to Triple-A Lehigh Valley. The team designated catcher Garrett Stubbs for assignment.

The Phillies open the season Thursday against the Texas Rangers, but had to submit their roster Wednesday since the MLB season begins tonight. The New York Yankees and San Francisco Giants open the campaign on Netflix.

Cristopher Sánchez, fresh off a new six-year contract, will make his first Opening Day start.  

Who is on the Phillies' Opening Day roster?

Here's what the Phillies' Opening Day roster will look like.

Catcher: J.T. Realmuto, Rafael Marchán

Infield: Alec Bohm, Bryce Harper, Dylan Moore, Edmundo Sosa, Bryson Stott, Trea Turner.

Outfield: Justin Crawford, Adolis García, Otto Kemp, Brandon Marsh

DH: Kyle Schwarber  

Starting pitchers: Jesús Luzardo, Aaron Nola, Andrew Painter, Cristopher Sánchez, Taijuan Walker

Relievers: José Alvarado, Kyle Backhus, Tanner Banks, Jonathan Bowlan, Jhoan Duran, Brad Keller, Tim Mayza, Zach Pop

Injured list: Orion Kerkering (right hamstring strain), Max Lazar (left oblique strain), Zack Wheeler (thoracic outlet syndrome), all retroactive to March 22.  

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=296763317a51cab90faa73f1bb146d5c'; 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(); } }); }); }); });