Skip to content
View in the app

A better way to browse. Learn more.

ernestdefoe.online

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
ernestdefoe.online

Extensions, themes & support for Flarum and Invision Community

Vibe coding for the community web. Report a bug, request a feature, or dig into the source — this is where the tools you use get built, in the open.

We do custom Bespoke Invision Community apps. If you have an idea for something you want then use the contact form to get in touch with us.

OnAir+ — support and discussion

Featured Replies

  • Administrators
  • Community Expert

OnAir+ — Live Streaming for Flarum 2

License: MIT

Bring live video into your community. Members go live from YouTube or Twitch,

and a LIVE NOW badge follows their avatar everywhere it appears — posts, the

discussion list, mentions, the header, the sidebar.

OnAir — the LIVE badge follows a streamer's avatar everywhere, with a Live Now sidebar widget

Free / MIT. The optional premium add-on OnAir+

turns your forum into the whole platform — a built-in RTMP server (stream straight in

from OBS), in‑forum HLS playback, multistream, VOD, live chat, go‑live notifications and

scheduled streams. See the comparison below.

Features

  • 🔴 LIVE badge on every avatar — one Avatar override lights a streamer up everywhere.

  • ▶️ YouTube + Twitch embed viewer — paste a channel/video URL and go live.

  • 📡 Presence with graceful fallback — uses flarum/realtime for instant badge

    updates when installed, transparently falls back to lightweight polling when it isn't.

  • 🟥 Live Now widget + a /onair directory — see who's streaming at a glance.

  • 🔐 Permissions + admin settings — who can go live, default provider, poll interval.

  • ⏱️ Stale‑stream reaper — auto‑ends streams left running.

The Live directory

The /onair live directory listing everyone currently streaming

OnAir vs OnAir+

OnAir (this extension) is free and complete on its own for YouTube/Twitch streamers.

OnAir+ is a paid add‑on for communities that want to host streaming themselves.

| | OnAir (free) | OnAir+ |

|---|:---:|:---:|

| LIVE badge on avatar, everywhere | | |

| Live Now widget + /onair directory | | |

| YouTube embed viewer | | |

| Twitch embed viewer | | |

| Realtime presence + polling fallback | | |

| Permissions + admin settings | | |

| Auto‑end stale streams | | |

| Built‑in RTMP server → in‑forum HLS | — | |

| Stream keys + creator studio | — | |

| Multistream / restream to YouTube + Twitch | — | |

| VOD recordings | — | |

| Live chat overlay | — | |

| Go‑live notifications + follow a streamer | — | |

| Scheduled streams + reminders | — | |

| Concurrent viewer counts | — | |

OnAir+ — stream straight into the forum

Members broadcast from OBS to your own server; viewers watch an hls.js player inline,

with live chat beside it.

OnAir+ playing a live RTMP→HLS stream in the forum with the live chat panel

OnAir+ — creator studio

Each streamer gets an ingest URL, a secret stream key, multistream targets, and a one‑click

key reset.

OnAir+ streaming studio showing the ingest server, masked stream key and playback URL

Install

composer require ernestdefoe/onair

Then enable OnAir in the admin panel. Optionally install flarum/realtime for

instant (push) LIVE badges — OnAir detects it automatically. For self‑hosted streaming,

add OnAir+ (composer require ernestdefoe/onair-pro).

Development


npm install
npm run build      # or: npm run dev  (watch)```

A no‑backend concept render of the whole product lives in `preview/index.html`.

## Architecture notes

* **LIVE badge:** overrides the shared `Avatar` component (main‑bundle, safe to extend at

  init) and reads a serializer‑supplied `user.isLive()`.
* **Presence transport:** `app.onair.presence` picks `RealtimeTransport` when

  `flarum/realtime` is detected, else `PollingTransport`; both expose the same API.
* **Providers:** `app.onair.providers` (JS) + the `StreamProvider` interface (PHP) are the

  extension points **OnAir+** plugs its RTMP/HLS provider into.

## License

MIT © Ernestdefoe
  • Replies 7
  • Views 50
  • Created
  • Last Reply

Top Posters In This Topic

  • Administrators
  • Community Expert

onair-pro v0.1.0

First release of OnAir+ — the premium add-on for OnAir.

  • 📡 Built-in RTMP ingest → in-forum HLS playback (self-hosted MediaMTX or managed ingest)
  • 🔑 Per-user stream keys + creator studio
  • 🔁 Multistream / restream to YouTube + Twitch
  • 🎞️ VOD recordings
  • 💬 Live chat overlay
  • 🔔 Go-live notifications + follow a streamer
  • 🗓️ Scheduled streams + reminders
  • 👀 Concurrent viewer counts

Requires the free OnAir extension.

View OnAir on ernestdefoe.online

  • Administrators
  • Community Expert

onair-plus v0.1.1

Maintenance release — renamed the package from ernestdefoe/onair-pro to ernestdefoe/onair-plus to match the OnAir+ brand.

  • Package id, PSR-4 namespace, extension id, settings/locale keys, route names and CSS classes all moved to onair-plus.
  • API endpoint paths are unchanged (/api/onair/...), so existing RTMP server configs keep working.
  • No functional changes from v0.1.0.

Requires the free OnAir extension.

View OnAir on ernestdefoe.online

  • Administrators
  • Community Expert

onair-plus v0.1.2

Resolves all 8 findings from the Floxum code review — including 2 high-severity security/performance items (webhook secret moved out of the query string into an Authorization header; eliminated two per-user N+1 query patterns on the user serializer). Also queues go-live notifications, replaces raw DB calls with a model, and tidies DI. No functional/API-path changes for end users.

View OnAir on ernestdefoe.online

  • 4 weeks later...
  • Administrators
  • Community Expert

onair-plus v0.1.3

What's Changed

Public VOD directory

  • Past streams is now a public directory — a "Past streams" link appears in the index sidebar for everyone (guests included). It was previously only reachable from the logged-in avatar menu, which made recordings look private to their owner.
  • Filter by streamer — click a name in the list to see just that member's recordings.

Recording deletion

  • New DELETE /api/onair/recordings/{id} for the recording owner, admins, and onair.manage holders; the VOD page shows a trash button where allowed.
  • New admin setting Recordings directory (onair-plus.recordings_root): when set to the local path the RTMP server records into, deleting a VOD also removes its files (path-confined). Leave empty if recordings live on another host — deletion then only removes the listing.

Pairs with OnAir v0.1.4, which adds stream deletion on the stream page.

View OnAir on ernestdefoe.online

  • Administrators
  • Community Expert

onair-plus v0.1.3

What's Changed

Public VOD directory

  • Past streams is now a public directory — a "Past streams" link appears in the index sidebar for everyone (guests included). It was previously only reachable from the logged-in avatar menu, which made recordings look private to their owner.
  • Filter by streamer — click a name in the list to see just that member's recordings.

Recording deletion

  • New DELETE /api/onair/recordings/{id} for the recording owner, admins, and onair.manage holders; the VOD page shows a trash button where allowed.
  • New admin setting Recordings directory (onair-plus.recordings_root): when set to the local path the RTMP server records into, deleting a VOD also removes its files (path-confined). Leave empty if recordings live on another host — deletion then only removes the listing.

Pairs with OnAir v0.1.4, which adds stream deletion on the stream page.

View OnAir on ernestdefoe.online

  • 2 weeks later...
  • Administrators
  • Community Expert

onair-plus v0.1.5

Fixed

  • Past Streams / VOD recordings wouldn't play (infinite spinner). The player routed recording .mp4 URLs through hls.js, which only understands HLS .m3u8 playlists — it failed silently and never attached the video. Progressive files (.mp4) now play natively; live HLS streams are unaffected.

View OnAir on ernestdefoe.online

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.