91³Ô¹ÏÍø

Watch CBS News

Bruins-Sabres NHL playoff schedule for 2026 Stanley Cup Playoffs released. When Boston and Buffalo will play.

After a year away, the Boston Bruins are back in the postseason. They'll take on the Buffalo Sabres in the first round, a team experiencing the playoffs for the first time since 2011.

The Bruins earned their spot in the postseason with 100 points and the No. 1 wild card. The Sabres, meanwhile, racked up 109 points to win the Atlantic Division.

Buffalo is ending a 14-year playoff drought, which was the longest in the NHL. Boston missed the postseason last year for the first time since 2016.

Bruins NHL playoff schedule

Here's a look at the schedule for the first round series.

Game 1: Bruins at Sabres, Sunday, April 19, 7:30 p.m, at KeyBank Center
Game 2: Bruins at Sabres, Tuesday, April 21,7:30 p.m. at KeyBank Center
Game 3: Sabres at Bruins, Thursday, April 23, 7 p.m. at TD Garden
Game 4: Sabres at Bruins, Sunday, April 26, 2 p.m. at TD Garden
Game 5: Bruins at Sabres, Tuesday, April 28, time TBD at KeyBank Center*
Game 6: Sabres at Bruins, Friday, May 1, time TBD at TD Garden*
Game 7: Bruins at Sabres, Sunday, May 3, time TBD at KeyBank Center*

*If necessary  

Bruins vs. Sabres

The Bruins found success against the Sabres this year, winning three of the four games the two teams played.

In October, Boston won games by scores of 3-1 and 4-3. The second game ended in overtime with Marat Khusnutdinov scoring in the extra session.

The teams didn't play again until December 27, when Buffalo earned a 4-1 win.

On March 25, the Bruins won the final matchup between the two teams as Pavel Zacha netted an overtime goal.

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(); } }); }); }); });