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.

Top Platforms for Preference Management in 2025
73% of users unsubscribe from poorly targeted notifications. The problem: preference logic is scattered across marketing platforms, product notification systems, and multiple providers that don't talk to each other. Most preference tools handle marketing OR product notifications, not both. This guide compares 9 platforms for 2025, evaluating integration depth, compliance support (GDPR, CAN-SPAM, TCPA), and multi-channel capabilities across email, SMS, push, chat, and in-app. Includes SDK references, implementation examples, and MCP setup for AI-assisted configuration. Best for teams planning Q1 notification infrastructure improvements.
By Kyle Seyler
December 15, 2025

Customer Messaging Platforms to Watch in 2026
Customer messaging platforms are shifting from campaign-first tools to real-time, behavior-driven infrastructure. Heading into 2026, the platforms gaining ground prioritize API-first architecture, visual journey orchestration, and intelligent channel routing. Leaders include Courier (developer-first with visual Journeys and embedded components), Knock (workflow-first batching), Customer.io (behavioral automation), and Novu (open-source). Key trends to watch: AI-assisted content, cross-channel preference intelligence, and tighter CDP integration.
By Kyle Seyler
December 08, 2025

Stripo vs Unlayer vs Courier Create: Embedded Email Editor Comparison for SaaS Platforms
SaaS platforms often embed Stripo or Unlayer to let customers design emails, but those tools stop at content. If you need customer-owned notifications across email, SMS, push, and in-app with delivery built in, Courier Create is designed for the full job.
By Thomas Schiavone
December 05, 2025
© 2025 Courier. All rights reserved.