Viewport Mode Detection API
TheclientViewportMode utility provides runtime detection of different viewport modes for conditional rendering and behavior.
Overview
Hyperscape supports three viewport modes:- Normal Mode - Standard gameplay (default)
- Stream Mode - Optimized for streaming capture (
/stream.htmlor?page=stream) - Embedded Spectator Mode - Embedded spectator view (
?embedded=true&mode=spectator)
API Reference
isStreamPageRoute(win?: Window): boolean
Detects if the current page is running in streaming capture mode.
Returns: true if:
- URL pathname ends with
/stream.html - URL query parameter
page=stream
isEmbeddedSpectatorViewport(win?: Window): boolean
Detects if running as an embedded spectator (e.g., in betting app iframe).
Returns: true if:
- URL query parameters:
embedded=trueANDmode=spectator - OR window config:
__HYPERSCAPE_EMBEDDED__=trueAND__HYPERSCAPE_CONFIG__.mode="spectator"
isStreamingLikeViewport(win?: Window): boolean
Detects any streaming-like viewport (stream OR embedded spectator).
Returns: true if either isStreamPageRoute() or isEmbeddedSpectatorViewport() returns true.
Example:
Usage Patterns
Conditional UI Rendering
Streaming Optimizations
Spectator Controls
URL Patterns
Stream Mode
Embedded Spectator Mode
Normal Mode
Vite Multi-Page Build
The client now builds separate entry points for different modes: vite.config.ts:dist/index.html- Main game bundledist/stream.html- Streaming capture bundle (minimal UI)
Integration with Streaming Pipeline
The streaming capture pipeline uses these URLs: ecosystem.config.cjs:- Stream page (
?page=stream) - Preferred for clean capture - Embedded spectator (
?embedded=true&mode=spectator) - Fallback if stream page fails - Normal game (
/) - Last resort
Testing
Migration Guide
Before (Manual URL Parsing)
After (Utility Functions)
Related Files
packages/shared/src/runtime/clientViewportMode.ts- Core implementationpackages/client/src/stream.html- Streaming entry pointpackages/client/src/stream.tsx- Streaming React entryecosystem.config.cjs- PM2 streaming configurationpackages/client/vite.config.ts- Multi-page build configuration