Product
Everything between the door and the seat.
Usher checks the ticket at the door and shows people to their seat: authentication, then authorisation. Four pieces do the work.
The Lobby
The hosted sign-in page.
Where Continue with Usher lands. It always names the product the person is going to, and it looks the same whichever product sent them, so people learn what Usher looks like and notice when something isn’t it.
Every way in
Passkeys, emailed codes, magic links, social sign-in and, if you want them, passwords.
Second factors
Authenticator apps with backup codes, optional or required for everyone.
Who may join
Open sign-up, or a guest list of addresses and domains, with a block list for the rest.
Calm in both themes
Light and dark, every colour pair checked against WCAG 2.2 AA, and written to welcome rather than warn.
Usher account
One account. Every door.
An Usher account is what a person has. It signs them in to every product that uses Usher accounts, and gives them one place to look after it.
Their sign-in, their way
Add a passkey, turn on an authenticator app, change their email.
Devices they can see
Every signed-in device, and a way to sign any of them out.
Linked accounts
Social accounts they’ve connected, and a way to disconnect them.
Leaving is easy
People can delete their account themselves.
Usher Console
Where developers run it all.
Workspaces hold projects; projects hold environments. Each environment is its own issuer with its own users, applications, keys and Lobby.
Applications
Confidential and public clients, with exact redirect URIs, and machine-to-machine credentials.
Users and organisations
Find people, end their sessions, and manage organisations, teams and invitations.
Keys
See an environment’s signing keys and rotate them.
A live Lobby preview
See your Lobby as people will, from a preview host that never signs anybody in.
SDK and components
A button people recognise.
Continue with Usher looks the same in every product, like the sign-in buttons people already know. Its label takes your font; nothing else about it changes.
Live components from @usher/ui
<SignIn />and<UserButton />arrive with the SDK. Coming with the SDK- Until then, any OpenID Connect library signs people in today.
// app/layout.tsx
import { UsherProvider } from '@usher/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<UsherProvider>{children}</UsherProvider>
</body>
</html>
)
}
// app/page.tsx
import { SignIn, UserButton, currentUser } from '@usher/nextjs'
export default async function Page() {
const user = await currentUser()
return user ? <UserButton /> : <SignIn />
}Show your users in.
Create a workspace and a project, and your first environment comes with its own issuer, keys and Lobby.
Sign in once. Welcome everywhere.