HowlCastHowlCast

Welcome to HowlCast

Self-hosted single-tenant invite-only live streaming platform on Cloudflare Workers + GetStream.

TL;DR — HowlCast is one broadcaster, invite-only viewers, dark mode only. RTMPS via GetStream. Two Cloudflare Workers (web + api), one D1 database, two R2 buckets, one KV. Free tier covers it.

HowlCast is a self-hosted live streaming platform. One broadcaster — you. Viewers join only via emailed magic-link invites. No public mode, no signups, no subscriber tiers. The whole thing runs on Cloudflare's free tier; GetStream handles all media.

What you're getting

FeatureDetails
Single broadcasterOne profile, one channel page, one set of credentials
Invite-onlyViewers arrive via emailed magic-link → flips isInvited boolean
RTMPS inOBS pushes to GetStream. Viewers see HLS in browser
Chat with emotesGetStream Chat + 7TV / BTTV / FFZ / Twitch emotes (12h cron)
Two Discord hooksPublic + private webhooks fired on go-live + end
Streamer ModeMasks stream key, RTMPS URL, webhook URLs while screen-sharing
Per-session statsPeak viewers, chat msg count, viewer line + chat-msgs/min charts
White labelCustom logo, platform name, footer attribution
Tiptap legalWYSIWYG editor for /privacy + /terms pages

Stack

  • Cloudflare Workers — two of them, web (Next.js via OpenNext) + api (Hono + tRPC)
  • D1 — SQLite, single database, Drizzle ORM
  • R2 — two buckets: public assets + ISR cache
  • KV — emote metadata + analytics scratch + throttle keys
  • Better Auth 1.6+ — username, magic-link, passkey, 2FA
  • GetStream — RTMPS ingress + HLS + chat
  • Resend (or SMTP fallback) — magic-link + invite emails
  • Twitch Helix — emote sync + setup-wizard channel lookup

Status

HowlCast is Phase 6 polish at the time of writing — Phase 7 is this docs site. Track real progress in PROGRESS.md.

On this page