Universal Login Inspector tool to inspect Auth0 ACUL context data.
npm install @auth0/ul-context-inspector

Developer panel for inspecting and previewing the Universal Login JSON context (window.universal_login_context) for the Advanced Customizations for Universal Login (ACUL) feature.
---
sessionStorage between reloads.---
``bash`
npm install @auth0/ul-context-inspector
Peer dependencies (install if you donβt already have them):
`bash`
npm install react react-dom
---
When the panel runs in disconnected mode it attempts to fetch a local manifest at GET /manifest.json:
- If the request succeeds (HTTP 200), the data source switches to "Local development" automatically.
- If it fails, the panel defaults to the Auth0 CDN manifest.
Place your manifest and variant JSON under public/ so Vite (or your bundler) serves them from the root:
``
public/
manifest.json
screens/
login/
login/
default.json
with-errors.json
login-id/
login-id/
default.json
with-errors.json
contains an array screens with objects mapping prompt β screen β variant node:`jsonc
{
"screens": [
{
"login": {
"login": { "path": "/screens/login/login", "variants": ["default", "with-errors"] }
}
},
{
"login-id": {
"login-id": { "path": "/screens/login-id/login-id", "variants": ["default", "with-errors"] }
}
}
]
}
`Each variant file is loaded at:
(e.g. /screens/login/login/default.json).If a node omits
variants, the panel assumes a single default variant.---
π§ͺ 3. Mount the Panel
`tsx
import { UniversalLoginContextPanel } from '@auth0/ul-context-inspector';export function App() {
return ;
}
`defaultScreen uses prompt:screen format. If omitted and CDN mode is active, the panel may auto-select a common screen (e.g. login-id:login-id).---
οΏ½ 4. Subscribe to Context Updates (Optional)
Use the subscription hook if your host needs to re-render on context changes:
`tsx
import { useUniversalLoginContextSubscription } from '@auth0/ul-context-inspector';function Host() {
const context = useUniversalLoginContextSubscription();
return
{JSON.stringify(context?.screen, null, 2)};
}
`
οΏ½πΉ 5. Interactive Behavior
- Connected mode: If
window.universal_login_context existed at mount, selections do not override real tenant context screen/variant.
- Disconnected mode: Screen & variant selection reloads the page to simulate host SDK remount.
- Persistence: Values stored in sessionStorage with prefix ulci:.
- Local manifest auto-detection runs once at startup; if found, data source switches to Local.
- Editing JSON: Writes directly to window.universal_login_context (even in mock mode) and triggers a broadcast event.---
π§© Panel Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
|
defaultScreen | string | undefined | Initial preview screen (prompt:screen) if no prior session selection. |---
π¨ Styling Notes
Tailwind classes are prefixed with
uci-. If you purge CSS, safelist with a regex like /uci-/.---
π Development
`bash
npm install
npm run dev # Start dev server
npm run build # Produce dist (JS, types, CSS)
`---
π§Ύ License
Apache-2.0
---
β FAQ
Why is my local manifest ignored?
Ensure
public/manifest.json returns 200 and matches the shape above; check dev tools Network panel.How do I force CDN mode?
Delete/rename local
manifest.json` or manually switch data source in the panel.