GUIDE / BUILD YOUR OWN CLIENT

Build guides — ship anywhere

Phaser is platform-agnostic. Payment + streaming live in the SDKs, so you can wrap them in any shell — browser, phone, desktop, or agent.

Web app

The fastest path. One npm install, drop a web component, done.

App.tsx
import "@jackmorgan/phaser-player";

export function Player({ trackId }) {
  return <phaser-player track-id={trackId} theme="dark" />;
}

Progressive web app

Phaser integrates with the Media Session API — lock-screen art and transport controls just work.

manifest.webmanifest
{
  "name": "My Phaser App",
  "display": "standalone",
  "theme_color": "#6bcff5"
}

iOS app

Wrap a WKWebView with AVAudioSession for background playback.

PhaserPlayerView.swift
struct PhaserPlayerView: UIViewRepresentable {
  let trackId: String
  func makeUIView(context: Context) -> WKWebView {
    try? AVAudioSession.sharedInstance().setCategory(.playback)
    let wv = WKWebView()
    wv.loadHTMLString("<phaser-player track-id=\"" + trackId + "\"></phaser-player>", baseURL: nil)
    return wv
  }
}

macOS app

Same WKWebView trick, plus a MenuBarExtra for a mini-player.