Thomas Schiavone
August 19, 2025

We’re excited to announce a major new version of Courier Inbox for web.
We originally built Inbox over four years ago to solve a simple problem: how do you add a real-time notification center to your app without building everything from scratch? Like most early-stage products, the first version was focused on getting to market fast.
Turns out, Inbox became one of our most popular products. And with that popularity came a lot of feedback. Developers wanted more flexibility, cleaner integration, and better performance. We knew we had a lot we could improve on.
So we took a step back and rebuilt it from the ground up.
We didn’t just patch a few things. We built a new foundation for scale and flexibility.
Our goal was to reimagine Inbox as something developers could drop into any app in minutes and rely on as their product evolves. Are three key objectives were
You can use the default UI, but you’re not locked into it. Theme it, extend it, or replace it entirely with your own components.
Real-time delivery, cross-device sync, and efficient data loading should just work without extra effort or complexity.
Developers should be able to add a real-time inbox to any app with minimal setup. No need to wire up sockets, state, or syncing logic by hand.
We rebuilt every layer of Courier Inbox from the integration surface to the real-time delivery infrastructure. Here’s what’s new:

You can install and render Courier Inbox with just a few lines of code. Here’s a basic React setup using the new @trycourier/courier-react package:
Copied!
And here's how easy it is to get standard inbox up and running:
Copied!
Courier handles authentication, sockets, and real-time syncing behind the scenes. You don’t have to worry about managing message state or delivery logic yourself.
The new version is a complete rebuild, but we’re not deprecating the old one. If you’re happy with your current integration, you don’t need to change anything. That said, if you’re ready for more flexibility, simpler integration, and better performance, upgrading is straightforward.
Here are a few important changes in this release:
The SDK is now a single package: @trycourier/courier-react
Authentication now requires JWTs (no more clientKey or HMAC)
Hooks have been updated — use useCourier() instead of useInbox()
Theming is handled via CourierInboxTheme, not styled-components
Custom components are passed using new render* props
The new Courier Inbox for web is ready to use today. Whether you’re starting from scratch or upgrading an existing integration, everything has been rebuilt to help you move faster with more control.
Choose the SDK that fits your stack:
📚 Using React? Start here:
🕹 Not using React? Use our web components:
🔄 Migrating from an older version?
Have questions or feedback? Just reach out. We’d love to hear from you
Courier Inbox isn’t just for web. We also offer native SDKs for iOS, Android, Flutter, and React Native. Each one is built with the same principles: real-time sync, flexible theming, and easy drop-in integration so your users stay in the loop across every platform.

Inbox SDKs for Vue and Angular: a native in-app notification center
Courier now ships first-class inbox SDKs for Angular and Vue. Drop in a real-time notification center, toasts, and a preferences center with native components, an injectable service, and a composable, all backed by the same in-app inbox that already powers React and JavaScript apps.
By Mike Miller
June 19, 2026

What we shipped this month: May 2026 Edition
Courier shipped five launches in May 2026: AI Agent in Journeys (GA), the new Journeys API for code-driven flows, Custom Environments, Design Studio styling controls, and Courier Console v3. Each one closes a gap between writing software and shipping the messages that go with it.
By Kyle Seyler
May 20, 2026

Introducing the AI Node in Courier Journeys
The AI node is a new step inside Courier Journeys that classifies users, branches on the result, and writes per-channel copy from a single prompt. Here's what it does, how to set one up, and when it's worth using over a regular condition node.
By Kyle Seyler
May 14, 2026
© 2026 Courier. All rights reserved.
npm install @trycourier/courier-react
import { useEffect } from 'react';import { CourierInbox, useCourier } from '@trycourier/courier-react';export default function App() {const courier = useCourier();useEffect(() => {// Generate a JWT for your user on your backend serverconst jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';// Authenticate the user with the inboxcourier.shared.signIn({userId: $YOUR_USER_ID,jwt: jwt,});}, []);return <CourierInbox />;}