Wavecast Radio

Wavecast uses Hugo front matter to configure episodes for both the player and the podcast RSS feed.

Audio Player Front Matter

Add a podcast: key to any page’s YAML front matter to render a player:

---
title: "Episode 42: The Big One"
date: 2026-06-01
podcast:
  src: "https://example.com/audio/ep42.mp3"
  poster: "/images/ep42-cover.jpg"
  chapters: "00:00:00-Intro,00:05:30-News,00:15:00-Interview"
  description: "In this episode we discuss..."
---

Player Fields

FieldRequiredDescription
podcast.srcyesAudio URL or local file path
podcast.posternoCover image URL
podcast.chaptersnoComma-separated HH:MM:SS-Label pairs
podcast.descriptionnoMarkdown show notes rendered below player
podcast.sourcenoSource adapter: "local", "azuracast", "ivoox"
podcast.persistentnoSet to false to disable navigation persistence

You can also pass these directly as shortcode parameters:

{{< podcast-player
  src="https://example.com/audio.mp3"
  title="Episode 42"
  poster="/images/cover.jpg"
  chapters="00:00:00-Intro,00:05:30-Topic"
  description="Show notes here."
>}}

Podcast RSS Fields

For iTunes-compatible podcast RSS feeds, add additional fields to podcast: in your episode front matter:

---
title: "Episode 42: The Big One"
date: 2026-06-01
podcast:
  src: "https://example.com/audio/ep42.mp3"
  type: "audio/mpeg"              # MIME type (default: audio/mpeg)
  duration: "00:45:00"            # HH:MM:SS or seconds
  season: 2                       # Season number
  episode: 42                     # Episode number
  explicit: false                 # Overrides site-level explicit
  author: "Guest Host"            # Overrides site-level author
  guid: "unique-ep-42"            # Falls back to permalink
  episodeType: "full"             # "full", "trailer", or "bonus"
  subtitle: "A short teaser"      # ≤255 chars, appears in Description column
  summary: "Full episode summary" # Up to 4000 characters
---

RSS Fields Reference

FieldTypeDefaultDescription
podcast.srcstring:Enclosure URL (required for feed inclusion)
podcast.typestring"audio/mpeg"MIME type for the enclosure
podcast.durationstring:Duration as HH:MM:SS or integer seconds
podcast.seasonint:iTunes season number
podcast.episodeint:iTunes episode number
podcast.explicitbool:Overrides site-level explicit flag
podcast.authorstring:Overrides site-level podcast author
podcast.guidstringPermalinkUnique episode identifier
podcast.episodeTypestring"full""full", "trailer", or "bonus"
podcast.subtitlestring:Short teaser (max 255 chars)
podcast.summarystring:Full description (max 4000 chars)

Site-Level Podcast Config

Global podcast metadata goes in hugo.toml under [params.podcast]:

[params.podcast]
  description = "A weekly show about open-source and software engineering."
  author = "Your Name"
  summary  = "Longer show description (up to 4000 characters). Shown on the ⓘ info popup in podcast apps."
  image    = "/podcast-cover.jpg"     # ≥1400×1400 px recommended
  explicit = false                     # "true" or "false"
  type     = "episodic"                # "episodic" or "serial"
  owner_name  = "Your Name"
  owner_email = "you@example.com"
  language = "en-us"                   # Overrides site.languageCode
  copyright = "© 2026 Your Name"

  [[params.podcast.categories]]
    category = "Technology"
  [[params.podcast.categories]]
    category = "Education"
    subcategory = "Courses"

How RSS Detection Works

ScenarioRSS output
No [params.podcast] in configStandard RSS 2.0 (suitable for blogs)
[params.podcast] with author, image, or descriptionFull iTunes podcast RSS with itunes: namespace
Episode has podcast.src (local file)Enclosure with length auto-resolved from Hugo resources
Episode has podcast.src (remote URL)Enclosure with length="0"
Episode has NO podcast.srcOmitted from feed entirely

The feed is available at /index.xml. Validate at validator.w3.org/feed.

Next Steps