A UKRDC Stats dashboard
It’s fairly easy to embed a link to a dashboard on our website, as is done in the following ticket:
https://renalregistry.atlassian.net/browse/OPS-8
Then it would be a case of finding the easiest way of serving up a link. Our AI overlords have
Tool | Embedding Support | Okta/SSO Support | Multi-User Handling | Production Readiness | UI Flexibility | Notes |
|---|---|---|---|---|---|---|
JupyterHub | Not designed for embedding (separate hub URL) | Yes (via OAuthenticator, Okta supported) | Per-user isolated kernels | Mature, scales via k8s/Docker | Limited (notebooks + widgets) | Heavyweight; best for multi-user notebook environments |
Dash (Python) |
| No native; add reverse proxy or | Shared app instance, session callbacks | Scales with Gunicorn/k8s; Enterprise adds features | High (React/HTML under hood) | Great for custom dashboards; enterprise features gated behind Dash Enterprise |
Streamlit (Python) | Easy iframe embedding ( | No native; SSO via proxy (e.g. Okta/NGINX/Auth0) | Each user has session state | Lightweight, moderate scaling | Low–Medium (simple layouts, limited theming) | Very fast to build but less enterprise-grade |
Panel (Python) | Embed via | Yes (built-in OAuth2, supports Okta) | Multiple processes ( | Production-ready (Bokeh server backend) | High (templates, layouts, multiple viz libs) | Flexible; strongest self-hosted Okta story besides JupyterHub |
Bokeh Server (Python) | Embed via script ( | No native; must wrap with proxy/auth layer | Each browser session = new Bokeh doc | Stable, can scale with multiple servers | High (low-level HTML/JS control) | More boilerplate; great for custom interactive plots |
Voilà (Python) | Embed via iframe | No native; usually via JupyterHub/OAuthenticator | Per-user notebook execution | Simple to run; scales under Hub | Medium (widgets, custom nbconvert templates) | Easiest if dashboards already exist as notebooks |
R Shiny (R) | Easy iframe embedding or Shiny Server Pro integration | Shiny Server Pro supports SAML/OIDC (Okta included) | Each user session runs separately | Mature; scales with Shiny Server Pro or Kubernetes | Medium–High (UI via R + HTML templates) | Best for R-centric teams; Pro adds enterprise auth and scaling |
Superset (Python/SQL) | Embeddable dashboards via iframes/JWT auth | Yes (OAuth2/OIDC including Okta) | Multi-user by design (role-based access) | Production-grade BI platform | Medium (prebuilt BI UI, not fully custom) | Good for SQL-driven analytics dashboards, less flexible than custom code |
Metabase (Java) | Embeddable dashboards (signed JWT for secure embed) | Yes (SAML/OIDC incl. Okta) | Multi-user, role-based access | Enterprise-ready | Low–Medium (limited customization) | Great for quick self-serve BI; more “BI tool” than app framework |
Grafana (Go) | Embeddable panels/iframes, signed URLs | Yes (SAML/OIDC incl. Okta) | Multi-user with fine-grained roles |
|
|
|