Radio Guaka is an Internet Radio player based on HTML5 and vanilla JavaScript. It's not Guaka's music, but radio stations that Guaka likes listening to, such as FIP and SomaFM.
Started in 2013 using meteorjs, completely revibed in 2025.
This is a static site that can be deployed on GitHub Pages. The current implementation uses:
- Alpine.js for reactivity
- Vanilla JavaScript
- Plain CSS
- History API for routing
Channels are defined in channels.js. You're welcome to add channels and metadata by editing (i.e. fork and send pull requests).
Active channels are in the main channels object. Broken/non-working channels are kept in comments for reference.
- Keyboard shortcuts:
- Arrow keys ← → : Change channels
- Arrow keys ↑ ↓ : Change volume
- Space : Stop/pause
- Letter key : Jump to channel starting with that letter (no modifier needed)
Radio Guaka includes a Nostr-based chat feature built with NDK (Nostr Dev Kit).
Protocol:
- Messages use kind 1 (short text notes) with
#radioguakahashtag (['t', 'radioguaka']) - Reactions use kind 7
- Delete requests use kind 5
- Messages expire after 30 days via NIP-40 (
['expiration', timestamp])
Relays:
wss://relay.nomadwiki.orgwss://relay.trustroots.org
These are community relays aligned with the nomad/travel community.
Authentication options:
- NIP-07 browser extension (nos2x, Alby, etc.) - Recommended, most secure. The website never accesses your private key - the extension handles signing securely.
- Manual key entry (nsec) - Fallback option. Stores key in localStorage (less secure).
- Generate anonymous keypair - Creates new keypair, stores in localStorage.
See NOSTR.md for detailed documentation on NIP-07 and security considerations.
Implementation:
chatiframe1.html- Standalone chat component (can be embedded as iframe)- Uses Alpine.js for reactivity
- Messages cached in localStorage for instant loading
- Current channel passed via postMessage from parent window
- Keys stored in localStorage (
radio_guaka_chat_private_key,radio_guaka_chat_pubkey)
Radio Guaka was inspired by somafm-popup and the need for a nice way to play Soma.fm streams, Radio Paradise, and more.