# nvidia-omniverse/ov-streaming-portal-sample architecture

> Architecture diagram of the GitHub repository nvidia-omniverse/ov-streaming-portal-sample, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nvidia-omniverse/ov-streaming-portal-sample
- Repository: https://github.com/nvidia-omniverse/ov-streaming-portal-sample

## Overview

Omniverse Streaming Portal Sample combines a user-facing application catalog and Kit streaming experience with an administrative panel for published apps and user sessions. The main user flow is portal authentication, app discovery, session launch, then interactive streaming; administrators separately manage deployments and inspect/control sessions. The graph includes documented MCP access and Storage API token exchange. Sampled excerpts confirm only selected wiring, so unsampled routes and subsystem internals are represented without speculative call edges.

Main entry points: [`web/src/router.tsx`](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/router.tsx) (Page routing), [`backend/app/main.py`](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/main.py) (API application), [`web/src/hooks/useStorageApiAuth.ts`](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStorageApiAuth.ts) (Storage auth), [`backend/app/routers/apps.py`](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/apps.py) (App management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Portal UI"]
  node_browser["Portal entry<br/>[main.tsx]"]
  node_routes["Page routing<br/>[router.tsx]"]
  node_auth_ui["User authentication<br/>[AuthProvider.tsx]"]
  node_catalog_ui["App catalog<br/>[Home.tsx]"]
  node_app_ui["App details<br/>[AppInfo.tsx]"]
  node_session_ui["Session admin"]
  node_app_state["Application state<br/>[Apps.ts]"]
end

subgraph group_streaming["Streaming"]
  node_stream_ui["Stream page<br/>[AppStream.tsx]"]
  node_stream_hook["Stream controller<br/>[useStream.ts]"]
  node_storage_auth["Storage auth"]
  node_storage_session["Token session"]
  node_stream_storage["Stream auth bridge"]
  node_storage_callback["OAuth callback"]
end

subgraph group_backend["Portal API"]
  node_api["API application<br/>[main.py]"]
  node_apps_api["App management<br/>[apps.py]"]
  node_session_api["Session operations<br/>[sessions.py]"]
  node_page_api["Page catalog API<br/>[pages.py]"]
  node_user_api["User operations<br/>[users.py]"]
  node_deployment_api["Deployment API<br/>[deployment.py]"]
  node_models[("Portal records<br/>[models.py]")]
  node_mcp["MCP tools<br/>[server.py]"]
end

subgraph group_integrations["Identity and compute"]
  node_nvcf["NVCF client<br/>[nvcf.py]"]
  node_identity["Identity providers"]
  node_nvcf_service["NVCF service"]
  node_kit["Kit streaming runtime"]
  node_storage_service["USD Storage API"]
end

node_user(("Portal user"))
node_admin(("Administrator"))

node_user -->|"opens"| node_browser
node_admin -->|"opens"| node_browser
node_browser -->|"renders"| node_routes
node_routes -->|"wraps pages"| node_auth_ui
node_auth_ui -.->|"authenticates"| node_identity
node_routes -->|"routes to"| node_catalog_ui
node_catalog_ui -->|"loads apps"| node_app_state
node_app_state -->|"requests"| node_apps_api
node_routes -->|"routes to"| node_app_ui
node_app_ui -->|"requests details"| node_apps_api
node_routes -->|"routes to"| node_stream_ui
node_stream_ui -->|"starts stream"| node_stream_hook
node_stream_hook -->|"checks session"| node_session_api
node_stream_hook -->|"connects"| node_kit
node_stream_hook -->|"handles events"| node_stream_storage
node_stream_storage -->|"authenticates"| node_storage_auth
node_storage_auth -.->|"uses OIDC"| node_identity
node_storage_auth -.->|"discovers auth"| node_storage_service
node_storage_auth -->|"manages session"| node_storage_session
node_storage_session -->|"refreshes token"| node_stream_storage
node_stream_storage -->|"sends auth message"| node_kit
node_routes -->|"routes to"| node_storage_callback
node_storage_callback -->|"completes sign-in"| node_storage_auth
node_routes -->|"routes to"| node_session_ui
node_session_ui -->|"requests sessions"| node_session_api
node_browser -->|"calls API"| node_api
node_api -->|"mounts"| node_apps_api
node_api -->|"mounts"| node_session_api
node_api -->|"mounts"| node_page_api
node_api -->|"mounts"| node_user_api
node_api -->|"mounts"| node_deployment_api
node_apps_api -->|"reads and writes"| node_models
node_apps_api -->|"gets status"| node_nvcf
node_nvcf -->|"queries deployments"| node_nvcf_service
node_session_api -->|"reads and writes"| node_models
node_page_api -->|"reads"| node_models
node_user_api -->|"reads and writes"| node_models
node_deployment_api -->|"manages deployment"| node_nvcf
node_mcp -->|"manages apps"| node_models
node_mcp -->|"gets deployment data"| node_nvcf
node_mcp -.->|"optional OAuth"| node_identity

click node_browser "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/main.tsx"
click node_routes "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/router.tsx"
click node_auth_ui "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/providers/AuthProvider.tsx"
click node_catalog_ui "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/Home.tsx"
click node_app_ui "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/AppInfo.tsx"
click node_session_ui "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/UserSessionList.tsx"
click node_stream_ui "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/AppStream.tsx"
click node_stream_hook "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStream.ts"
click node_storage_auth "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStorageApiAuth.ts"
click node_storage_session "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/storageApi/auth/StorageApiSession.ts"
click node_stream_storage "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStreamStorageApi.ts"
click node_storage_callback "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/StorageApiAuthenticate.tsx"
click node_app_state "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/state/Apps.ts"
click node_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/main.py"
click node_apps_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/apps.py"
click node_session_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/sessions.py"
click node_page_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/pages.py"
click node_user_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/users.py"
click node_deployment_api "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/deployment.py"
click node_models "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/models.py"
click node_nvcf "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/nvcf.py"
click node_mcp "https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/mcp/server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_browser,node_routes,node_auth_ui,node_catalog_ui,node_app_ui,node_session_ui,node_app_state,node_user toneBlue
class node_stream_ui,node_stream_hook,node_storage_auth,node_storage_session,node_stream_storage,node_storage_callback toneAmber
class node_api,node_apps_api,node_session_api,node_page_api,node_user_api,node_deployment_api,node_models,node_mcp toneMint
class node_nvcf,node_identity,node_nvcf_service,node_kit,node_storage_service toneRose
class node_admin toneIndigo
```

## Components

### Portal UI

- [Portal entry](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/main.tsx): `web/src/main.tsx`
- [Page routing](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/router.tsx): `web/src/router.tsx`
- [User authentication](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/providers/AuthProvider.tsx): `web/src/providers/AuthProvider.tsx`
- [App catalog](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/Home.tsx): `web/src/pages/Home.tsx`
- [App details](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/AppInfo.tsx): `web/src/pages/AppInfo.tsx`
- [Session admin](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/UserSessionList.tsx): `web/src/pages/UserSessionList.tsx`
- [Application state](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/state/Apps.ts): `web/src/state/Apps.ts`

### Streaming

- [Stream page](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/AppStream.tsx): `web/src/pages/AppStream.tsx`
- [Stream controller](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStream.ts): `web/src/hooks/useStream.ts`
- [Storage auth](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStorageApiAuth.ts): `web/src/hooks/useStorageApiAuth.ts`
- [Token session](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/storageApi/auth/StorageApiSession.ts): `web/src/storageApi/auth/StorageApiSession.ts`
- [Stream auth bridge](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/hooks/useStreamStorageApi.ts): `web/src/hooks/useStreamStorageApi.ts`
- [OAuth callback](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/web/src/pages/StorageApiAuthenticate.tsx): `web/src/pages/StorageApiAuthenticate.tsx`

### Portal API

- [API application](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/main.py): `backend/app/main.py`
- [App management](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/apps.py): `backend/app/routers/apps.py`
- [Session operations](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/sessions.py): `backend/app/routers/sessions.py`
- [Page catalog API](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/pages.py): `backend/app/routers/pages.py`
- [User operations](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/users.py): `backend/app/routers/users.py`
- [Deployment API](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/routers/deployment.py): `backend/app/routers/deployment.py`
- [Portal records](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/models.py): `backend/app/models.py`
- [MCP tools](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/mcp/server.py): `backend/app/mcp/server.py`

### Identity and compute

- [NVCF client](https://github.com/nvidia-omniverse/ov-streaming-portal-sample/blob/main/backend/app/nvcf.py): `backend/app/nvcf.py`
- **Identity providers**
- **NVCF service**
- **Kit streaming runtime**
- **USD Storage API**

### Other components

- **Portal user**
- **Administrator**

## Connections

- Portal user → Portal entry: opens
- Administrator → Portal entry: opens
- Portal entry → Page routing: renders
- Page routing → User authentication: wraps pages
- User authentication → Identity providers: authenticates
- Page routing → App catalog: routes to
- App catalog → Application state: loads apps
- Application state → App management: requests
- Page routing → App details: routes to
- App details → App management: requests details
- Page routing → Stream page: routes to
- Stream page → Stream controller: starts stream
- Stream controller → Session operations: checks session
- Stream controller → Kit streaming runtime: connects
- Stream controller → Stream auth bridge: handles events
- Stream auth bridge → Storage auth: authenticates
- Storage auth → Identity providers: uses OIDC
- Storage auth → USD Storage API: discovers auth
- Storage auth → Token session: manages session
- Token session → Stream auth bridge: refreshes token
- Stream auth bridge → Kit streaming runtime: sends auth message
- Page routing → OAuth callback: routes to
- OAuth callback → Storage auth: completes sign-in
- Page routing → Session admin: routes to
- Session admin → Session operations: requests sessions
- Portal entry → API application: calls API
- API application → App management: mounts
- API application → Session operations: mounts
- API application → Page catalog API: mounts
- API application → User operations: mounts
- API application → Deployment API: mounts
- App management → Portal records: reads and writes
- App management → NVCF client: gets status
- NVCF client → NVCF service: queries deployments
- Session operations → Portal records: reads and writes
- Page catalog API → Portal records: reads
- User operations → Portal records: reads and writes
- Deployment API → NVCF client: manages deployment
- MCP tools → Portal records: manages apps
- MCP tools → NVCF client: gets deployment data
- MCP tools → Identity providers: optional OAuth
