Generated from the tag registry in dk.simongray.podcast.feed.spec by dev/reference.clj,
so don't edit it by hand.
A feed is a map of the channel, with its items in a vector under :rss/items and its live
items under :podcast/live-items. The model follows a few rules:
:rss/pub-date,
:itunes/episode-type or :podcast/alternate-enclosures.:content, and each child under its own key.:feed/invalid-value.:xml/unknown, and emit
writes it back unchanged. An attribute that this page doesn't list stays in the map of
its element as a string.:feed/markup-in-text.Every element on this page is read into the model by parse, written back by emit and
checked by validate. The last two also accept a shorthand, a bare value for an element
with only text, such as {:rss/guid "x"}, and a single value for a vector, which
feed/normalize expands. It also reads a string where the model takes another type,
e.g. a date or a duration, as parse reads the text of XML, and reports each. The
identity of a feed and of an item comes from guid/feed-guid and guid/item-guid.
| Type | How podcast-clj reads and writes it |
|---|---|
| text | the text of the element, trimmed |
| html | text that can contain HTML, kept as written |
| url, email, mime, language | a string, whose form the validator checks |
| enum | a string, which the validator compares with the listed values, ignoring case |
| integer | a long, written back as digits |
| decimal | a number, a long if it's whole, written back without an exponent |
| boolean | true or false in the XML, a boolean in the model |
| yes-no | yes or no in the XML, a boolean in the model |
| presence | an empty element in the XML, true in the model when the element is there |
| rfc2822 | an RFC 2822 date, read leniently, an #inst in the model, written in GMT |
| iso8601 | an ISO 8601 date or date-time, an #inst in the model, written in UTC |
| duration | seconds as a number, read from seconds or from clock notation, written as seconds |
| rrule | an RFC 5545 recurrence rule, in the model a map of its parts as ical-clj parses it, e.g. {:freq "WEEKLY" :byday ["MO"]} |
| geo | a geo URI, in the model a map of :lat, :lon, and optionally :altitude and :uncertainty |
| osm | an OpenStreetMap reference such as R113314#4, in the model a map of :type, :id, and optionally :revision |
The core elements, as https://www.rssboard.org/rss-specification defines them.
<title>The name of the channel or item.
:rss/title<link>The URL of the website or web page.
:rss/link<description>Phrase or sentence describing the channel; the item synopsis or notes.
:rss/description<language>The language the channel is written in.
:rss/language<copyright>Copyright notice for content in the channel.
:rss/copyright<managingEditor>Email address for the person responsible for editorial content.
:rss/managing-editor<webMaster>Email address for the person responsible for technical issues.
:rss/web-master<pubDate>The publication date.
:rss/pub-date<lastBuildDate>The last time the content of the channel changed.
:rss/last-build-date<category>One or more categories that the channel or item belongs to.
:rss/categories| Attribute | Key | Type | |
|---|---|---|---|
domain | :domain | url |
<generator>A string indicating the program used to generate the channel.
:rss/generator<docs>A URL that points to the documentation for the format used.
:rss/docs<cloud>Allows processes to register with a cloud to be notified of updates.
:rss/cloud| Attribute | Key | Type | |
|---|---|---|---|
domain | :domain | text | |
path | :path | text | |
port | :port | integer | |
protocol | :protocol | text | |
registerProcedure | :register-procedure | text |
<ttl>Number of minutes the channel can be cached before refreshing.
:rss/ttl<image>A GIF, JPEG or PNG image that can be displayed with the channel.
:rss/image<url>The URL of the image.
:url<title>Describes the image; the ALT attribute when rendered in HTML.
:title<link>The URL of the site; the image links to it when rendered.
:link<width>Width of the image in pixels; at most 144.
:width<height>Height of the image in pixels; at most 400.
:height<description>Text for the TITLE attribute of the link formed around the image.
:description<rating>The PICS rating for the channel.
:rss/rating<skipHours>Hours (GMT) during which aggregators may skip reading the channel.
:rss/skip-hours<hour>An hour of the day, 0 to 23.
:hours<skipDays>Days during which aggregators may skip reading the channel.
:rss/skip-days<day>A day of the week, Monday to Sunday.
:days<author>Email address of the author of the item.
:rss/author<author>Not in RSS 2.0; read because so many feeds name their author here.
:rss/author<comments>URL of a page for comments relating to the item.
:rss/comments<enclosure>The media object attached to the item.
:rss/enclosure| Attribute | Key | Type | |
|---|---|---|---|
length | :length | integer | required |
type | :type | mime | required |
url | :url | url | required |
<guid>A string that uniquely identifies the item.
:rss/guid| Attribute | Key | Type | |
|---|---|---|---|
isPermaLink | :is-perma-link | boolean |
<source>The RSS channel that the item came from.
:rss/source| Attribute | Key | Type | |
|---|---|---|---|
url | :url | url | required |
<item>An episode.
:rss/itemsThe namespace of Apple, as https://podcasters.apple.com/support/823-podcast-requirements describes it.
<itunes:title>The title specific to Apple Podcasts.
:itunes/title<itunes:author>The group responsible for creating the show.
:itunes/author<itunes:subtitle>A short description; dropped from Apple's specification.
:itunes/subtitle<itunes:summary>A description; dropped from Apple's specification but widely read.
:itunes/summary<itunes:image>The artwork for the show or episode.
:itunes/image| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | required |
<itunes:category>The show category; may nest one subcategory.
:itunes/categories under channel, :categories under itunes:category| Attribute | Key | Type | |
|---|---|---|---|
text | :text | text | required |
<itunes:explicit>Parental advisory information: true or false.
:itunes/explicit<itunes:type>Whether episodes are meant to be consumed in order.
:itunes/typeepisodic, serial<itunes:owner>The podcast owner contact information, not displayed.
:itunes/owner<itunes:name>The owner's name.
:name<itunes:email>The owner's email address.
:email<itunes:new-feed-url>The new podcast RSS feed URL when the feed has moved.
:itunes/new-feed-url<itunes:block>Yes hides the show or episode from Apple Podcasts.
:itunes/block<itunes:complete>Yes means no more episodes will ever be published.
:itunes/complete<itunes:keywords>Deprecated.
Comma-separated keywords; no longer read by Apple.
:itunes/keywords<itunes:applepodcastsverify>The token Apple Podcasts Connect issues to prove ownership of the feed.
:itunes/applepodcastsverify<itunes:duration>The duration of the episode, in seconds.
:itunes/duration<itunes:episode>The episode number; required for serial shows.
:itunes/episode<itunes:season>The season number.
:itunes/season<itunes:episodeType>Whether the item is a full episode, a trailer or bonus content.
:itunes/episode-typebonus, full, trailer<itunes:isClosedCaptioned>Deprecated.
Yes when the video episode has closed captions; historical.
:itunes/closed-captioned?<itunes:order>Deprecated.
Overrides the default ordering of episodes; historical.
:itunes/orderAll the formalised tags of the podcast namespace, as https://github.com/Podcastindex-org/podcast-namespace defines them.
<podcast:guid>The global identifier of the podcast, a UUIDv5 of its original feed URL.
:podcast/guid<podcast:locked>Yes tells other platforms not to import this feed.
:podcast/locked| Attribute | Key | Type | |
|---|---|---|---|
owner | :owner |
<podcast:funding>A donation or funding link with its display text.
:podcast/funding| Attribute | Key | Type | |
|---|---|---|---|
url | :url | url | required |
<podcast:medium>What the content in the feed is: a podcast, music, an audiobook...
:podcast/mediumaudiobook, audiobookL, blog, blogL, course, courseL, film, filmL, mixed, music, musicL, newsletter, newsletterL, podcast, podcastL, publisher, publisherL, video, videoL<podcast:block>Which platforms may publicly display the feed.
:podcast/blocks| Attribute | Key | Type | |
|---|---|---|---|
id | :id | enum: acast, amazon, anchor, apple, audible, audioboom, backtracks, bitcoin, blubrry, buzzsprout, captivate, castopod, castos, facebook, fireside, fyyd, google, gpodder, hypercatcher, kasts, libsyn, mastodon, megafono, megaphone, omnystudio, overcast, paypal, pinecast, podbean, podcastaddict, podcastguru, podcastindex, podcasts, podchaser, podcloud, podfriend, podiant, podigee, podnews, podomatic, podserve, podverse, redcircle, relay, resonaterecordings, rss, shoutengine, simplecast, slack, soundcloud, spotify, spreaker, tiktok, transistor, twitter, whooshkaa, youtube, zencast |
<podcast:txt>Free-form text modelled on the DNS TXT record.
:podcast/txt| Attribute | Key | Type | |
|---|---|---|---|
purpose | :purpose | text |
<podcast:updateFrequency>The intended release schedule as text and an RFC 5545 rule.
:podcast/update-frequency| Attribute | Key | Type | |
|---|---|---|---|
complete | :complete | boolean | |
dtstart | :dtstart | iso8601 | |
rrule | :rrule | rrule |
<podcast:license>The license of the audio or video content.
:podcast/license| Attribute | Key | Type | |
|---|---|---|---|
url | :url | url |
<podcast:trailer>A trailer for the whole podcast or for a season.
:podcast/trailers| Attribute | Key | Type | |
|---|---|---|---|
length | :length | integer | |
pubdate | :pubdate | rfc2822 | required |
season | :season | integer | |
type | :type | mime | |
url | :url | url | required |
<podcast:person>A person of interest: host, guest or any Podcast Taxonomy role.
:podcast/people| Attribute | Key | Type | |
|---|---|---|---|
group | :group | text | |
href | :href | url | |
img | :img | url | |
role | :role | text |
<podcast:location>Where the content is about or where it was made.
:podcast/locations| Attribute | Key | Type | |
|---|---|---|---|
country | :country | text | |
geo | :geo | geo | |
osm | :osm | osm | |
rel | :rel | enum: creator, subject |
<podcast:image>An image of a given size, ratio and purpose.
:podcast/images| Attribute | Key | Type | |
|---|---|---|---|
alt | :alt | text | |
aspect-ratio | :aspect-ratio | text | |
height | :height | integer | |
href | :href | url | required |
purpose | :purpose | text | |
type | :type | mime | |
width | :width | integer |
<podcast:images>Deprecated, replaced by <podcast:image>.
Deprecated: image sizes as an HTML srcset.
:podcast/srcset-images| Attribute | Key | Type | |
|---|---|---|---|
srcset | :srcset | text | required |
<podcast:value>The payment layer, transport and suggested amount for streaming payments.
:podcast/values| Attribute | Key | Type | |
|---|---|---|---|
method | :method | enum: amp, default, keysend, lnaddress | required |
suggested | :suggested | decimal | |
type | :type | enum: bitcoin, lightning | required |
<podcast:valueRecipient>A destination for a share of each payment.
:recipients| Attribute | Key | Type | |
|---|---|---|---|
address | :address | text | required |
customKey | :custom-key | text | |
customValue | :custom-value | text | |
fee | :fee | boolean | |
name | :name | text | |
split | :split | integer | required |
type | :type | enum: lnaddress, node, wallet | required |
<podcast:valueTimeSplit>Alternative recipients for a period of the media.
:time-splits| Attribute | Key | Type | |
|---|---|---|---|
duration | :duration | decimal | required |
remotePercentage | :remote-percentage | decimal | |
remoteStartTime | :remote-start-time | decimal | |
startTime | :start-time | decimal | required |
<podcast:remoteItem>A pointer to another feed or to an item in it.
:podcast/remote-items under channel, :remote-items under podcast:podroll, :remote-item under podcast:publisher, :remote-item under podcast:valueTimeSplit| Attribute | Key | Type | |
|---|---|---|---|
feedGuid | :feed-guid | text | required |
feedUrl | :feed-url | url | |
itemGuid | :item-guid | text | |
medium | :medium | enum: audiobook, audiobookL, blog, blogL, course, courseL, film, filmL, mixed, music, musicL, newsletter, newsletterL, podcast, podcastL, publisher, publisherL, video, videoL | |
title | :title | text |
<podcast:podroll>Other podcasts the creator recommends.
:podcast/podroll<podcast:publisher>The publisher feed this podcast belongs to.
:podcast/publisher<podcast:podping>Signals that the feed sends Podping notifications.
:podcast/podping| Attribute | Key | Type | |
|---|---|---|---|
usesPodping | :uses-podping | boolean |
<podcast:chat>Where the official chat for the podcast or episode is.
:podcast/chat| Attribute | Key | Type | |
|---|---|---|---|
accountId | :account-id | text | |
protocol | :protocol | enum: irc, matrix, nostr, xmpp | required |
server | :server | text | required |
space | :space | text |
<podcast:socialInteract>The root post of the comment thread for the episode or podcast.
:podcast/social-interacts| Attribute | Key | Type | |
|---|---|---|---|
accountId | :account-id | text | |
accountUrl | :account-url | url | |
priority | :priority | integer | |
protocol | :protocol | enum: activitypub, atproto, disabled, hive, lightning, matrix, nostr, twitter | required |
uri | :uri | url |
<podcast:transcript>A transcript or closed-captions file.
:podcast/transcripts| Attribute | Key | Type | |
|---|---|---|---|
language | :language | language | |
rel | :rel | enum: captions | |
type | :type | mime: application/json, application/srt, application/x-subrip, text/html, text/plain, text/srt, text/vtt | required |
url | :url | url | required |
<podcast:chapters>An external JSON chapters file.
:podcast/chapters| Attribute | Key | Type | |
|---|---|---|---|
type | :type | mime | required |
url | :url | url | required |
<podcast:soundbite>A clip of the episode worth previewing or sharing.
:podcast/soundbites| Attribute | Key | Type | |
|---|---|---|---|
duration | :duration | decimal | required |
startTime | :start-time | decimal | required |
<podcast:season>The season number, with an optional name.
:podcast/season| Attribute | Key | Type | |
|---|---|---|---|
name | :name | text |
<podcast:episode>The episode number, decimal, with an optional display string.
:podcast/episode| Attribute | Key | Type | |
|---|---|---|---|
display | :display | text |
<podcast:alternateEnclosure>Another version of, or companion to, the enclosure.
:podcast/alternate-enclosures| Attribute | Key | Type | |
|---|---|---|---|
bitrate | :bitrate | decimal | |
codecs | :codecs | text | |
default | :default | boolean | |
height | :height | integer | |
lang | :lang | language | |
length | :length | integer | |
rel | :rel | text | |
title | :title | text | |
type | :type | mime | required |
<podcast:source>A URI where the alternate media can be fetched.
:sources| Attribute | Key | Type | |
|---|---|---|---|
contentType | :content-type | mime | |
uri | :uri | text | required |
<podcast:integrity>An SRI string or PGP signature for the alternate media.
:integrity| Attribute | Key | Type | |
|---|---|---|---|
type | :type | enum: pgp-signature, sri | required |
value | :value | text | required |
<podcast:contentLink>Where else the content can be found, e.g. a live stream on the web.
:podcast/content-links| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | required |
<podcast:liveItem>A live stream, described like an item plus its status and times.
:podcast/live-items| Attribute | Key | Type | |
|---|---|---|---|
end | :end | iso8601 | |
start | :start | iso8601 | required |
status | :status | enum: ended, live, pending | required |
Chapters in the feed, as https://podlove.org/simple-chapters/ defines them.
<psc:chapters>Chapters embedded in the feed, the pre-2.0 convention.
:psc/chapters| Attribute | Key | Type | |
|---|---|---|---|
version | :version | text |
<psc:chapter>One chapter: a start timestamp and a title.
:chapters| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | |
image | :image | url | |
start | :start | text | required |
title | :title | text |
The Media RSS module of Yahoo, as far as podcast hosts use it.
<media:group>Renditions of one media object, as media:content children.
:media/group<media:content>A media object; some hosts use it beside or instead of enclosure.
:media/contents under item (and liveItem), :contents under media:group| Attribute | Key | Type | |
|---|---|---|---|
bitrate | :bitrate | decimal | |
channels | :channels | integer | |
duration | :duration | integer | |
expression | :expression | text | |
fileSize | :file-size | integer | |
framerate | :framerate | decimal | |
height | :height | integer | |
isDefault | :is-default | boolean | |
lang | :lang | language | |
medium | :medium | text | |
samplingrate | :samplingrate | decimal | |
type | :type | mime | |
url | :url | url | |
width | :width | integer |
<media:title>The title of the media object.
:media/title under channel, :media/title under item (and liveItem), :title under media:content, :title under media:group| Attribute | Key | Type | |
|---|---|---|---|
type | :type | enum: html, plain |
<media:description>A short description of the media object.
:media/description under channel, :media/description under item (and liveItem), :description under media:content, :description under media:group| Attribute | Key | Type | |
|---|---|---|---|
type | :type | enum: html, plain |
<media:thumbnail>A representative image.
:media/thumbnails under channel, :media/thumbnails under item (and liveItem), :thumbnails under media:content, :thumbnails under media:group| Attribute | Key | Type | |
|---|---|---|---|
height | :height | integer | |
time | :time | text | |
url | :url | url | required |
width | :width | integer |
<media:player>A web page that plays the media.
:media/player under item (and liveItem), :player under media:content, :player under media:group| Attribute | Key | Type | |
|---|---|---|---|
height | :height | integer | |
url | :url | url | required |
width | :width | integer |
<media:credit>Someone who contributed to the media, by role.
:media/credits under channel, :media/credits under item (and liveItem), :credits under media:content, :credits under media:group| Attribute | Key | Type | |
|---|---|---|---|
role | :role | text | |
scheme | :scheme | text |
<media:rating>A rating such as adult or nonadult.
:media/ratings under channel, :media/ratings under item (and liveItem), :ratings under media:content, :ratings under media:group| Attribute | Key | Type | |
|---|---|---|---|
scheme | :scheme | url |
<media:category>A category from a Media RSS scheme.
:media/categories under channel, :media/categories under item (and liveItem), :categories under media:content, :categories under media:group| Attribute | Key | Type | |
|---|---|---|---|
label | :label | text | |
scheme | :scheme | url |
<media:copyright>Copyright information for the media.
:media/copyright under channel, :media/copyright under item (and liveItem), :copyright under media:content, :copyright under media:group| Attribute | Key | Type | |
|---|---|---|---|
url | :url | url |
<media:keywords>Comma-separated keywords for the media.
:media/keywords under channel, :media/keywords under item (and liveItem), :keywords under media:content, :keywords under media:group<media:restriction>Restrictions on the media, e.g. by country.
:media/restrictions under channel, :media/restrictions under item (and liveItem), :restrictions under media:content, :restrictions under media:group| Attribute | Key | Type | |
|---|---|---|---|
relationship | :relationship | text | required |
type | :type | text |
<media:subTitle>A subtitle or caption file, one per language.
:media/subtitles under channel, :media/subtitles under item (and liveItem), :subtitles under media:content, :subtitles under media:group| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | required |
lang | :lang | language | |
type | :type | mime |
The namespaces of two directories, which some feeds still contain.
googleplay: http://www.google.com/schemas/play-podcasts/1.0spotify: http://www.spotify.com/ns/rss<googleplay:author>The author of the show or episode, as Google Play showed it.
:googleplay/author<googleplay:description>The description of the show or episode, plain text or HTML.
:googleplay/description<googleplay:explicit>Whether the show or episode has explicit content: yes, no or clean.
:googleplay/explicitclean, no, yes<googleplay:image>The artwork of the show or episode.
:googleplay/image| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | required |
<googleplay:block>Yes to keep the show or episode out of Google Play.
:googleplay/block<googleplay:email>The email address Google Play verified the show's ownership with.
:googleplay/email<googleplay:category>The category of the show, from Google Play's list.
:googleplay/categories| Attribute | Key | Type | |
|---|---|---|---|
text | :text | text | required |
<googleplay:new-feed-url>The new URL of a feed that has moved.
:googleplay/new-feed-url<spotify:countryOfOrigin>Space-separated ISO 3166 country codes for Spotify's targeting.
:spotify/country-of-origin<spotify:limit>How many recent episodes Spotify should show.
:spotify/limit| Attribute | Key | Type | |
|---|---|---|---|
recentCount | :recent-count | integer |
The namespace of Blubrry, as far as its feeds use it.
<rawvoice:rating>A TV or movie parental rating such as TV-PG.
:rawvoice/rating| Attribute | Key | Type | |
|---|---|---|---|
movie | :movie | text | |
tv | :tv | text |
<rawvoice:location>Where the show is produced, as free text.
:rawvoice/location<rawvoice:frequency>How often episodes come out, as free text.
:rawvoice/frequency<rawvoice:poster>The poster image of a video episode.
:rawvoice/poster| Attribute | Key | Type | |
|---|---|---|---|
url | :url | url | required |
<rawvoice:isHd>Yes when the video episode is high definition.
:rawvoice/hd?<rawvoice:embed>HTML that embeds the episode's player.
:rawvoice/embed<rawvoice:webm>A WebM rendition of the video episode.
:rawvoice/webm| Attribute | Key | Type | |
|---|---|---|---|
length | :length | integer | |
src | :src | url | required |
type | :type | mime |
<rawvoice:mp4>An MP4 rendition of the video episode.
:rawvoice/mp4| Attribute | Key | Type | |
|---|---|---|---|
length | :length | integer | |
src | :src | url | required |
type | :type | mime |
<rawvoice:metamark>A point in the episode with something attached: an ad, a tag, a comment.
:rawvoice/metamarks| Attribute | Key | Type | |
|---|---|---|---|
duration | :duration | decimal | |
link | :link | url | |
position | :position | decimal | required |
type | :type | enum: ad, audio, comment, image, lowerthird, tag, video | required |
Modules from the wider RSS world that podcast feeds contain.
atom: http://www.w3.org/2005/Atomcontent: http://purl.org/rss/1.0/modules/content/dc: http://purl.org/dc/elements/1.1/sy: http://purl.org/rss/1.0/modules/syndication/<atom:link>A link; rel=self gives the canonical feed URL, rel=next pages the archive.
:atom/links| Attribute | Key | Type | |
|---|---|---|---|
href | :href | url | required |
hreflang | :hreflang | language | |
rel | :rel | text | |
title | :title | text | |
type | :type | mime |
<content:encoded>The full HTML content of the item; some hosts give the channel one too.
:content/encoded<dc:creator>The entity primarily responsible for making the content.
:dc/creator<sy:updatePeriod>The period over which the channel is updated.
:sy/update-perioddaily, hourly, monthly, weekly, yearly<sy:updateFrequency>How many times the channel is updated per period.
:sy/update-frequencyThe elements of RFC 5005, for a feed that comes in more than one document. The links between the documents are atom:link elements.
<fh:complete>The document holds every item of the feed.
:fh/complete<fh:archive>The document is an archive of the feed, and its items do not change.
:fh/archiveCan you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |