KiteLibassWeb
The web half's one setup step, and usually not even that.
On every other platform libass is linked in. In a browser it is a separate wasm module, kiteass.mjs beside kiteass.wasm, which the page hosts the way it hosts the codec module. The two files come as the web zip attached to this module's wasmJs artifact; unpack them beside the page. The first ASS track a player meets starts loading DEFAULT_URL on its own, so a page that serves the two files needs no code here. Until the module arrives the track draws nothing: the engine keeps what it was told and hands it over the moment the module lands, and typesetting begins there. A load that fails, or that has not finished after ten seconds, hands the track to the built-in styling, with a warning. A module that lands later still serves the next player. A page that wants no blank first seconds calls load (or attach with a module it instantiated itself) before it creates a player; a page that keeps the files elsewhere must.
There is no system font on the web. Fonts reach libass as container attachments, through SubtitleConfig.fonts, or from the script's own [Fonts] section; a track that names a font nobody supplied draws nothing, honestly, rather than guessing.