Thomas Schiavone
December 11, 2025

Table of contents
1. GitHub killed toasts. Should you?
2. What GitHub is actually right about
3. You are not GitHub: when toasts still make sense
4. Toasts are not the problem. Treating them as “the truth” is.
5. What a “safe” toast looks like when you have a notification center
6. How this actually looks in real product flows
7. When you still should not use toasts
8. If you already have toasts everywhere, what now?
9. So, should you keep toasts?
Frequently Asked Questions (FAQs)
Most products need a way to talk back to the user.
You click something, work happens somewhere else, and the UI needs to say, “Here’s what happened.”
Toasts grew out of that problem. Short messages that say “this worked”, “this failed”, or “this finished” without freezing the rest of the interface.
Recently, that pattern has been under a spotlight. GitHub removed toasts from its design system, explained the accessibility concerns, and a lot of people read that as a broader rule: if GitHub won’t use toasts, no one should.
That skips an important detail: GitHub is operating with a huge surface area, a lot of independent teams, and a very high accessibility bar. In that world, pulling a sharp, easy-to-misuse pattern out of the shared system is one way to reduce risk.
Most apps are not in that world.
Most teams still need a simple way to:
For those cases, toasts are still on the table. The real issue is when a toast is the only place a message ever exists.
This article starts from a different assumption: toasts are fine, as long as they are not your source of truth. Important events should live in an in-app notification center, with toasts on top as a lightweight, optional hint rather than a single point of failure. That is the model behind Courier's Notification Center product.
Before arguing for keeping toasts, it’s worth being clear about what GitHub got right.
Traditional web toasts have a few real problems:
They disappear on a timer.
Five seconds is fine for a short success message if you’re staring right at it. It’s not fine if you read slowly, use zoom, are on another monitor, or are just thinking about something else. When the message contains anything important, the timeout is a bug, not a feature.
They sit in odd places in the DOM and focus order.
Most implementations mount a toast container at the top or bottom of the page, far away from the control that triggered it. Screen readers and keyboard users move through the document in order. Reaching a toast, reading it, and getting back to what you were doing can be awkward or impossible.
They get used for everything.
Once a toast component exists, it becomes the default answer to “we should probably tell the user about this.” Errors, confirmations, onboarding hints, billing issues, all routed into the same little box in the corner.
At GitHub’s scale, those problems are amplified.
You have many teams, each shipping their own flows, all pulling from the same design system. If one team relies on a disappearing toast for something important, that isn’t a small mistake. It affects a lot of people.
Seen through that lens, their move is pretty straightforward: remove a sharp, hard-to-govern pattern from the shared toolkit and lean on simpler, more persistent patterns like inline feedback, banners, and dialogs.
The accessibility concerns are real. The misuse is real. The part that deserves more scrutiny is the conclusion that follows for everyone else.
Given all of that, it’s tempting to put toasts in the “retired pattern” bucket and move on.
Reality is more boring. Most products don’t have GitHub’s scale, or their internal tooling, or their ability to rebuild every flow around custom inline states and banners. Most teams still reach for toasts because they solve real problems with very little code.
People often describe toasts as a tourniquet. They’re not the ideal long-term treatment, but they keep the product from bleeding out while you build something better.
In practice, toasts still do a few jobs very well:
Background completions
A long-running export finishes. A report is ready. A deployment completes. The user might be on a different part of the page when it happens. A small notification that says “this is done, here’s where to go” is useful.
Low-stakes confirmations
“Copied to clipboard.”
“Draft saved.”
“Filters applied.”
These are not worth a modal or a banner. They just need a short acknowledgment.
Async updates that are not critical
A secondary integration reconnects. A non-blocking sync finishes. Nice to know, not urgent.
For cases like these, removing toasts completely doesn’t magically produce a better pattern. It usually means more banners, more layout shifts, or no feedback at all.
The important distinction isn’t “GitHub is wrong” versus “GitHub is right.” The important distinction is context. GitHub chose to lower risk by banning a sharp tool in a very large system. Most apps can keep the tool, as long as they put tighter rules around where and how it’s used.
The next step is deciding what those rules should be, and where an in-app notification center changes the equation.
Most of the pain around toasts comes from asking them to do a job they’re not built for.
A toast is good at one thing:
“Something just happened. You don’t need to stop what you’re doing, but you might care.”
It is not good at:
That’s where accessibility and usability both fall apart. If a toast is the single source of truth, the timeout, placement, and timing suddenly matter a lot. Miss the message and you’re simply stuck.
The fix isn’t “no toasts.” The fix is to give messages a permanent home and treat toasts as a hint on top.
In a healthy setup:
The notification center is the source of truth.
A notification center inside your product holds the full story. What happened, when it happened, what the user can do next. In our case, that is Courier Inbox, an in app notification center your users can always come back to.
Toasts are optional accents.
Short summaries that point at that truth.
“Usage report is ready. Download CSV.”
“Build #214 passed.”
“You were mentioned in Issue #123.”
If someone sees the toast, great. If they miss it, nothing breaks. They can always open the notification center and catch up.
Courier is built around this model. Events go into a central notification system and render in an in-app notification center. Toasts become a thin UI layer on top of that feed, not an ad hoc messaging system held together by timers.
Once that separation is in place, the conversation about toasts changes. The question is no longer “are toasts allowed,” it’s “which events deserve a quick heads up on top of the notification center item?”
Once you have an in-app notification center, you can be much stricter about how you use toasts.
Simple mental model:
Nothing is toast-only. That alone removes most of the risk.
A toast is allowed when all of these are true:
Concrete examples:
Export finished
Build succeeded
You were mentioned
The pattern is the same each time:
No destructive actions. No billing failures as toast-only. No “you lost access” messages.
Because the notification center holds the details, the toast can stay very simple:
All the context and explanation live where they should: in the notification and the UI it links to.
Since the toast is not the source of truth, timing is a convenience, not a cliff:
If someone misses it, nothing breaks. They still have the notification center.
At this point the model is:
Here’s what that looks like across a few common flows.
Example: a user kicks off an export.
What you do:
What the user sees:
If the user clicks the toast, great.
If they miss it, they open notifications and click the same download action there.
No modals, no guessing, no dependency on a five-second timer.
Example: a background sync job fails.
What you do:
Two versions:
If it’s noisy but not urgent:
If it needs attention:
Again, the toast is a pointer, not the only place recovery lives.
Example: a teammate mentions you in a comment.
What you do:
What the user sees:
Users who like real-time nudges get them.
Users who miss it, or prefer to batch notifications, just check the center.
Example: a deploy finishes and you also send an email or push notification.
What you do with Courier:
The important part is that everything runs off the same event.
The message in the toast, the notification center, and the email all come from the same source, not three different one-off implementations.
This is where the “toasts are fine for you” story really lands.
You’re not betting your product on a transient UI pattern. You’re building around events and a notification center, then using toasts where they actually add value.
Even with a notification center, there are cases where a toast is the wrong tool.
Think of toasts as “nice to know.”
These cases are “you have to deal with this.”
If something is gone, or about to be gone, it shouldn’t be introduced in a little bubble in the corner.
Examples:
Patterns that fit better:
A toast can echo “Project deleted” if you want, but it shouldn’t be the first or only place that shows up.
Security and billing problems need clear, persistent treatment.
Examples:
Better patterns:
You can add a toast if it helps in the moment, but the primary surfaces should be obvious and durable.
Anything that needs more than a sentence to explain doesn’t belong in a toast.
Examples:
Use:
Here, toasts, if used at all, should read like a short nudge:
Then hand off to a screen that can actually explain what to do.
Rough rule:
If ignoring it is dangerous or expensive, don’t put the responsibility on a transient toast. Use the UI and the notification center as the primary surfaces, and treat toasts as a bonus, not a requirement.
Most teams are not starting from a blank slate.
You probably already have a toast component wired into half the product.
You don’t need a rewrite. You need a cleanup.
Take a quick inventory:
You’ll usually find a mix of:
Just seeing that list is useful.
For each toast, make a call:
Delete it
Promote it
Pair it with the notification center
Keep it lightweight
You don’t need perfect sorting. You just need to stop treating all messages as equal.
Next step is giving those events a home.
If you are rolling your own, this is where you build a simple notification center and start writing events into it instead of only firing toasts.
If you are using Courier, most of this is already there:
Once that is in place:
You have moved from “ad hoc toasts” to “event-driven notifications with optional toasts.”
Once the basics are in place, write down a few simple rules for new work:
You don’t need a huge governance process. A short checklist is usually enough to keep new toasts from slipping back into “single source of truth” territory.
At that point, you have the shape you want:
GitHub looked at toasts, looked at their scale and constraints, and decided the safest option was to get rid of them. That works for them.
Most products are in a different spot.
You still need quick feedback when something finishes, fails, or fires in the background. You still need a way to talk to users without freezing the UI every time. For that, toasts are not the villain. Using them as the only place a message ever lives is.
The model that holds up is simple:
If you have that notification center in place, toasts stop being scary. Missing one is annoying at worst, never fatal. The real message, with context and actions, is always there in notifications.
You don’t have to copy GitHub’s decision to care about accessibility.
You just have to stop treating toasts like a system of record and start treating them like what they actually are: a small, fast, optional way to say “this just happened” on top of something more solid.
Toast notifications are small, temporary UI messages that appear over the interface to confirm something happened, such as “Saved”, “Copied to clipboard”, or “Report ready”. They usually auto-dismiss after a few seconds and do not block the user’s interaction with the page.
GitHub removed toast notifications because they are difficult to make consistently accessible at scale. Auto-dismiss timers, focus management issues for keyboard and screen reader users, and inconsistent usage across many teams led GitHub to favor more persistent patterns like inline states, banners, and dialogs instead of toasts.
Toast notifications are not automatically bad for accessibility, but they are easy to misuse. Accessibility problems arise when toasts:
Using toasts only for low-stakes updates and backing them with a notification center greatly reduces the accessibility risk.
Use toast notifications for non-blocking, low-risk updates, for example:
If missing the toast would break the experience or hide critical information, it is not a good use case.
For important or blocking messages, use more persistent, accessible patterns:
Then record the event in an in-app notification center so users can review it later.
An in-app notification center is a feed of messages inside your product that shows what happened, when it happened, and what the user can do next. It acts as the source of truth for events like exports, errors, mentions, and alerts. A notification center makes it safe to use toast notifications as optional hints, because the full message always lives somewhere permanent.
A notification center makes toast notifications safer because important events are stored in a durable, reviewable place. The toast becomes a real-time hint, not the only channel. If the user misses or ignores the toast, they can still find the same message, context, and actions in the notification center later.
Courier Inbox is Courier’s in-app notification center. Your app sends events to Courier, they appear in Courier Inbox as structured notifications, and your UI can optionally trigger toast notifications from the same data. This keeps toasts and the notification center in sync and prevents “toast-only” messages that disappear forever.
To migrate from toast-only notifications:
Using a platform like Courier with Courier Inbox makes this easier, because events, in-app notifications, and toasts all share a single source of truth.
To make toast notifications more accessible:
Combined with a notification center, these steps help toast notifications work for more users without compromising on accessibility.

How Top Notification Platforms Handle Quiet Hours & Delivery Windows in 2026
No platform offers per-template delivery windows in 2026—it's either per-workflow (Customer.io, Knock), per-campaign (Braze), or global settings. This comparison shows exactly how six platforms handle quiet hours and send time controls based on their documentation and API specs. Braze leads on AI timing (23% open rate lift from Intelligent Timing across their customer base). Novu is the only platform letting subscribers set their own delivery windows. Customer.io and Knock require manual workflow configuration. OneSignal's strength is push-specific optimization across 300K+ apps. Courier combines per-node flexibility with API control. Includes feature matrix, timezone handling, and frequency capping differences.
By Kyle Seyler
January 16, 2026

Multichannel Notification Template Management: Version Control, Migration, and Cross-Channel Previews
AI agents are reshaping how products communicate with users. By 2026, 40% of enterprise applications will embed agents that need to send notifications across email, SMS, push, Slack, Teams, and in-app channels autonomously. Managing templates across all these channels with Git-based workflows doesn't scale. This guide covers how teams handle version control and rollback for multichannel templates, which platforms enable designer collaboration without deploys, whether Figma design systems can connect to notification builders, how to migrate templates using APIs and MCP-assisted workflows, how to preview messages across channels side-by-side, open-source options that integrate with SendGrid, Twilio, Firebase, and Slack, and how to localize content from one dashboard. Platforms covered include Courier, Novu, Knock, SuprSend, Dyspatch, Email Love, and React Email, with honest assessments of limitations for each.
By Kyle Seyler
January 14, 2026

SMS Opt-Out Rules in 2026
TCPA consent rules changed in April 2025. Consumers can now revoke consent using any reasonable method, including keywords like "stop," "quit," "end," "revoke," "opt out," "cancel," or "unsubscribe." Businesses must honor opt-out requests within 10 business days, down from 30. The controversial "revoke all" provision, which would require opt-outs to apply across all automated messaging channels, has been delayed until January 2027 and may be eliminated entirely. SMS providers like Twilio handle delivery infrastructure and STOP keyword responses at the number level. They don't sync opt-outs to your email provider, push notification service, or in-app messaging. That cross-channel gap is your responsibility. Courier provides unified preference management that enforces user choices across SMS, email, push, and chat automatically.
By Kyle Seyler
January 13, 2026
© 2026 Courier. All rights reserved.