Customizable sign-in UI that abstracts away all of the complexity associated with building secure authentication flows.
AuthKit’s Hosted UI is a pre-built, customizable authentication interface that runs outside your application code. Rather than building authentication screens from scratch, you redirect users to AuthKit where they complete sign-in before returning to your app. This approach handles every error state and edge case across identity providers, with automatic handling of:

AuthKit is conceptually similar to a Social Login (OAuth) experience, but with the added benefit of being able to authenticate users with any identity provider.
AuthKit sits outside of the application code. When a user initiates a sign-in request, the application redirects them to the AuthKit URL. The user then completes the authentication process with WorkOS before being returned to the application.
The application exchanges the resulting authorization code to retrieve an authenticated User object and handle the session.

The AuthKit flow abstracts away many of the UX and WorkOS API calling concerns automatically, for more guidance on integrating with AuthKit, see the Quick Start guide.
AuthKit also provides a signup flow for creating users. Available options are determined by the configured authentication methods. If a user’s email address is associated with an SSO connection, they will automatically be redirected to sign up via their IdP.
AuthKit’s hosted UI supports all available authentication methods and automatically adjusts the available options depending on the configured methods in the Authentication section of the WorkOS Dashboard.

Email + Password authentication is enabled by default, though setup may be required to enable additional methods. See the relevant feature section for more information:
By default, AuthKit’s hosted UI is automatically localized into many global languages. Users are served in the locale that closest matches their device’s OS preference. All user-facing text, including error messages and transactional emails, is translated into the user’s native tongue.
| Locale code | Language | Autonym |
|---|---|---|
af | Afrikaans | Afrikaans |
am | Amharic | አማርኛ |
ar | Arabic | العربية |
bg | Bulgarian | Български |
bn | Bengali (Bangla) | বাংলা |
bs | Bosnian | Bosanski |
ca | Catalan | Català |
cs | Czech | Čeština |
da | Danish | Dansk |
de | German | Deutsch |
de-DE | German (Germany) | Deutsch (Deutschland) |
el | Greek | Ελληνικά |
en | English | English |
en-AU | English (Australia) | English (Australia) |
en-CA | English (Canada) | English (Canada) |
en-GB | English (UK) | English (UK) |
en-US | English (US) | English (US) |
es | Spanish | Español |
es-419 | Spanish (Latin America) | Español (Latinoamérica) |
es-ES | Spanish (Spain) | Español (España) |
es-US | Spanish (US) | Español (EE.UU.) |
et | Estonian | Eesti |
fa | Farsi (Persian) | فارسی |
fi | Finnish | Suomi |
fil | Filipino (Tagalog) | Filipino |
fr | French | Français |
fr-BE | French (Belgium) | Français (Belgique) |
fr-CA | French (Canada) | Français (Canada) |
fr-FR | French (France) | Français (France) |
fy | Frisian | Frysk |
gl | Galician | Galego |
gu | Gujarati | ગુજરાતી |
ha | Hausa | هَرْشٜن هَوْس |
he | Hebrew | עברית |
hi | Hindi | हिन्दी |
hr | Croatian | Hrvatski |
hu | Hungarian | Magyar |
hy | Armenian | Հայերեն |
id | Indonesian | Bahasa Indonesia |
is | Icelandic | Íslenska |
it | Italian | Italiano |
it-IT | Italian (Italy) | Italiano (Italia) |
ja | Japanese | 日本語 |
jv | Javanese | ꦧꦱꦗꦮ |
ka | Georgian | ქართული |
kk | Kazakh | Қазақ тілі |
km | Khmer | ខេមរភាសា |
kn | Kannada | ಕನ್ನಡ |
ko | Korean | 한국어 |
lt | Lithuanian | Lietuvių |
lv | Latvian | Latviešu |
mk | Macedonian | Македонски |
ml | Malayalam | മലയാളം |
mn | Mongolian | Монгол |
mr | Marathi | मराठी |
ms | Malay | Bahasa Melayu |
my | Burmese | မြန်မာ |
nb | Norwegian Bokmål | Norsk Bokmål |
ne | Nepali | नेपाली भाषा |
nl | Dutch | Nederlands |
nl-BE | Flemish | Vlaams |
nl-NL | Dutch (Netherlands) | Nederlands (Nederland) |
nn | Norwegian Nynorsk | Norsk Nynorsk |
no | Norwegian | Norsk |
pa | Punjabi | ਪੰਜਾਬੀ |
pl | Polish | Polski |
pt | Portuguese | Português |
pt-BR | Portuguese (Brazil) | Português (Brasil) |
pt-PT | Portuguese (Portugal) | Português (Portugal) |
ro | Romanian | Română |
ru | Russian | Русский |
sk | Slovak | Slovenčina |
sl | Slovenian | Slovenščina |
sq | Albanian | Shqip |
sr | Serbian | Српски |
sv | Swedish | Svenska |
sw | Swahili | Kiswahili |
ta | Tamil | தமிழ் |
te | Telugu | తెలుగు |
th | Thai | ไทย |
tr | Turkish | Türkçe |
uk | Ukrainian | Українська |
ur | Urdu | اُردُو |
uz | Uzbek | Ózbekça |
vi | Vietnamese | Tiếng Việt |
zh | Chinese | 中文 |
zh-CN | Chinese (Simplified) | 中文 (中国) |
zh-HK | Chinese (Hong Kong) | 中文(香港) |
zh-TW | Chinese (Taiwan) | 中文(台灣) |
zu | Zulu | isiZulu |
In cases where a user’s browser does not send their preferred locale, or when AuthKit cannot identify a match, the user is served in the environment’s fallback language. The fallback language can be configured in the dashboard in the Authentication > Features > Localization section.

Integration into an app is quick, though the route varies depending on specific requirements:
Add AuthKit to an app and start authenticating users in just a few lines of code. See the quick start guide for more information.
While the hosted solution is the fastest way to get started, build and manage a custom authentication UI via the AuthKit API.
Examples of building custom UI are available on GitHub.