├── .gitignore ├── .vs ├── ProjectSettings.json ├── VSWorkspaceState.json ├── podcast-namespace │ └── v16 │ │ └── .suo └── slnx.sqlite ├── COPYING.txt ├── README.md ├── apgtrss1.png ├── apgtrss2.png ├── categories.json ├── chapters ├── example.json ├── exampleComplex.json └── jsonChapters.md ├── contributors.txt ├── docs ├── 1.0.md ├── chatprotocols.txt ├── element-support.md ├── other-recommendations.md ├── schema │ ├── attribute-hover.png │ ├── first-child-tag.png │ ├── podcast-example.xml │ ├── podcast-schema.md │ ├── podcast-wrapper.xsd │ ├── podcast.xsd │ ├── start-tag-completion.png │ ├── strip-annotation.xslt │ ├── tag-hover.png │ └── tag-inserted.png └── tags │ ├── alternateEnclosure.md │ ├── block.md │ ├── chapters.md │ ├── chat.md │ ├── contentLink.md │ ├── episode.md │ ├── funding.md │ ├── guid.md │ ├── images.md │ ├── integrity.md │ ├── license.md │ ├── liveItem.md │ ├── location.md │ ├── locked.md │ ├── medium.md │ ├── person.md │ ├── podping.md │ ├── podroll.md │ ├── publisher.md │ ├── remoteItem.md │ ├── season.md │ ├── socialInteract.md │ ├── soundbite.md │ ├── source.md │ ├── trailer.md │ ├── transcript.md │ ├── txt.md │ ├── updateFrequency.md │ ├── value.md │ ├── valueRecipient.md │ └── valueTimeSplit.md ├── example.xml ├── existing-namespaces.txt ├── images ├── pc20badgered.svg └── podcastindex-namespace-final.svg ├── itunes_reference.md ├── letters └── letter-to-apple.md ├── license ├── license.md ├── licenses.json ├── licenseslugs.txt └── v4v-4.0.md ├── location └── location.md ├── podcast.xsd ├── podcasting2.0.md ├── proposal-docs ├── API │ └── Chapters.md ├── alternateEnclosure │ └── alternateEnclosure.md ├── bonusItem │ └── bonusItem.md ├── chat │ ├── chat.md │ └── chatprotocols.txt ├── hive-account-name │ └── hive-account-name.md ├── license │ └── license.md ├── opensubscribe │ └── opensubscribe.md ├── podping │ └── podping.md ├── recommendations │ └── recommendations.md ├── sharedsoundbites.md ├── social │ ├── platforms.md │ └── social.md ├── updateFrequency │ └── updateFrequency.md ├── value-webmonetization │ └── value-webmonetization.md └── verify │ └── verify.md ├── publishers └── publishers.md ├── serviceslugs.txt ├── socialprotocols.txt ├── taxonomy-de.json ├── taxonomy-en.json ├── taxonomy-fr.json ├── taxonomy.json ├── transcripts ├── example.html ├── example.json ├── example.srt ├── example.vtt └── transcripts.md └── value ├── blip-0010.md ├── lnaddress.md ├── value.md └── valueslugs.txt /.gitignore: -------------------------------------------------------------------------------- 1 | /.vs/ 2 | .vscode/settings.json 3 | -------------------------------------------------------------------------------- /.vs/ProjectSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "CurrentProjectSetting": null 3 | } -------------------------------------------------------------------------------- /.vs/VSWorkspaceState.json: -------------------------------------------------------------------------------- 1 | { 2 | "ExpandedNodes": [ 3 | "", 4 | "\\proposal-docs" 5 | ], 6 | "SelectedNode": "\\proposal-docs\\recommendations", 7 | "PreviewInSolutionExplorer": false 8 | } -------------------------------------------------------------------------------- /.vs/podcast-namespace/v16/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/91e3baa0f9a356e8ac58df2c63cbe889bb5011da/.vs/podcast-namespace/v16/.suo -------------------------------------------------------------------------------- /.vs/slnx.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/91e3baa0f9a356e8ac58df2c63cbe889bb5011da/.vs/slnx.sqlite -------------------------------------------------------------------------------- /COPYING.txt: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The "podcast" Namespace 2 | 3 | A wholistic rss namespace for podcasting that is meant to synthesize the fragmented world of podcast namespaces. The 4 | broad goal is to create a single, compact, efficient namespace that is easily extensible, community 5 | controlled/authored and addresses the needs of the independent podcast industry now and in the future. Our hope is 6 | that this namespace will become the framework that the independent podcast community needs to deliver new 7 | functionality to apps and aggregators. 8 | 9 | 10 | Our guiding principles for development of this namespace are the 11 | "[Rules for Standards Makers](http://scripting.com/2017/05/09/rulesForStandardsmakers.html)" by Dave Winer. Please 12 | read it before contributing if you aren't familiar with it. 13 | 14 | The podcast namespace is part of the larger "Podcasting 2.0" project which exists to bring control of podcasting's 15 | protocols back into the hands of the open podcasting community. A good overview can be found here: 16 | [Podcasting 2.0](podcasting2.0.md) 17 | 18 | * [Official XMLNS Definition](docs/1.0.md) the official definition of all formalized tags. 19 | * List of platforms and apps that currently implement some or all of these 20 | tags: [Supporting Platforms and Apps](docs/element-support.md). 21 | * Example Feed: There is an example feed [example.xml](example.xml) in this repository showing the podcastindex 22 | namespace side by side with the Apple itunes namespace. * [Other recommendations](docs/other-recommendations.md) 23 | when creating RSS podcast feeds. 24 | 25 | 26 |

27 | 28 | 29 | ## Current Roadmap 30 | 31 | **Phase 1** - [Closed] Comment period closed on `11/15/2020` and [5 tags](#phase-1-closed-on-111520) were 32 | **formalized**. 33 | 34 | **Phase 2** - [Closed] Comment period closed on `1/31/2021` and [4 tags](#phase-2-closed-on-13121) were **formalized**. 35 | 36 | **Phase 3** - [Closed] Comment period closed on `6/1/2021` and [5 tags](#phase-3-closed-on-6121) were **formalized**. 37 | 38 | **Phase 4** - [Closed] Comment period closed on `12/1/2021` and [3 tags](#phase-4-closed-on-1212021) were 39 | **formalized**. 40 | 41 | **Phase 5** - [Closed] Comment period closed on `7/15/2022` and [2 tags](#phase-5-closed-as-of-7152022) were 42 | **formalized**. 43 | 44 | **Phase 6** - [Closed] Comment period closed on `6/1/2023` and [6 tags](#phase-6-closed-as-of-612023) were 45 | **formalized**. 46 | 47 | **Phase 7** - [Closed] Comment period closed on `7/1/2023` and 48 | [the following](https://github.com/Podcastindex-org/podcast-namespace/discussions/554) adoptions are being 49 | considered for formalization. Two tags 50 | [have already been](https://github.com/Podcastindex-org/podcast-namespace/discussions/categories/announcements-changes-made) 51 | formalized. 52 | 53 |

54 | 55 | 56 | ## Legend 57 | 58 | **Formalized** - This tag is frozen and listed in the XMLNS document. Any future changes to it's definition must 59 | maintain backwards compatibility. 60 | 61 | **Finalized** - The tag is structurally stable and implementation testing should be considered safe. Any breaking 62 | changes will be widely communicated. 63 | 64 | **Open** - The tag/phase is open for discussion and collaboration. 65 | 66 | **Required** - This tag or attribute must be present. 67 | 68 | **Optional** - This tag or attribute may be left out. 69 | 70 | **Recommended** - This tag or attribute is technically optional, but is strongly recommended to be present for the 71 | tag to function as fully intended. 72 | 73 | 74 |

75 | 76 | 77 | ## Tag Adoption Process 78 | 79 | To be adopted as an official part of the namespace, there must be consensus around a tag's usefulness and either 80 | commitment to adoption by at least 1 host and 1 app, or a recognition that the tag is already being used in the wild. 81 | 82 | It is ALWAYS ok to delay a tag to a future Phase if there is any concern about it. That is to be expected and 83 | encouraged. 84 | 85 | When a Phase comes to a close, there will be a full review of any tags currently open for comment and questions will 86 | be asked to gather consensus before final adoption. No tags will be adopted by fiat, or if there are unresolved 87 | questions. They will just be moved to the next Phase for further comment and refinement. 88 | 89 | Tags that are proposals or rough ideas should be expected to have syntax problems or typos. Those should be refined 90 | away as they are worked on. If they are not, that is a good idea that the tag in question isn't being seen as 91 | useful and should be considered for dropping. 92 | 93 | We are not a "standards body". It is a community driven project where all stake holders are encouraged to 94 | participate, so that many voices are heard. This is an open-source project to be built fully in the open. 95 | Discussions also take place on [podcastindex.social](https://podcastindex.social) where anyone is free to register 96 | and participate. 97 | 98 | 99 |

100 | 101 | 102 | ### Goal #1 - Eliminate Redundancy 103 | 104 | There is significant overlap amongst the many existing podcast namespaces. Each platform and publisher has created 105 | their own namespace to give their respective system and audience the metadata they need in the way they want it 106 | delivered. 107 | 108 | 109 | ### Goal #2 - Keep "required" tags and attributes minimal 110 | 111 | The only required tags should be those that solve an overwhelming need in the industry. Requiring tags is a 112 | roadblock to adoption and should be avoided. Attributes should also only be required when they are key to the 113 | functionality of the tag. 114 | 115 | 116 | ### Goal #3 - Keep Exisiting Conventions 117 | 118 | Reinventing the wheel helps nobody. When at all possible, existing conventions should be maintained. For example, 119 | it would make sense to turn **\** into a unary element, where it's existence is taken as a "yes" 120 | and it's absence as a "no". But, that has never been the standard. And, given as how this namespace will probably 121 | sit alongside at least one other namespace, it makes sense to keep existing conventions in place. 122 | 123 | 124 | ### Goal #4 - Be General... to a point 125 | 126 | There is no way to address every possible metadata point that each platform would want. That is not the aim. 127 | Instead we focus on defining the elements that would be useful to the broadest set of apps, publishers, platforms 128 | and aggregators. Individual parties can keep their respective supplemental namespaces small and targeted as an 129 | adjunct to this larger namespace. But, we don't want to be so general that the spec becomes overly complicated. A 130 | beautiful, "perfect" spec is not important. Solving real problems is. 131 | 132 | 133 |

134 | 135 | 136 | ## Copying information 137 | 138 | The "podcast" namespace is [dedicated to the public domain using CC0 v1.0](COPYING.txt) so as to remove all barriers 139 | to adoption, development and contribution. 140 | 141 | 142 |

143 | 144 | 145 | ## Element List 146 | 147 | ### Phase 1 (Closed on 11/15/20) 148 | 149 |
150 | 151 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 152 | located [here](docs/1.0.md). Please see that file for full implementation details. 153 | 154 | - **\**
155 | - **\**
156 | - **\**
157 | - **\**
158 | - **\**
159 | 160 |
161 | 162 | ### Phase 2 (Closed on 1/31/21) 163 | 164 |
165 | 166 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 167 | located [here](docs/1.0.md). Please see that file for full implementation details. 168 | 169 | - **\**
170 | - **\**
171 | - **\**
172 | - **\**
173 | 174 |
175 | 176 | 177 | ### Phase 3 (Closed on 6/1/21) 178 | 179 |
180 | 181 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 182 | located [here](docs/1.0.md). Please see that file for full implementation details. 183 | 184 | - **\**
185 | - **\**
186 | - **\**
187 | - **\**
188 | - **\**
189 | - **\**
190 | 191 |
192 | 193 | 194 | ## Phase 4 (Closed on 12/1/2021) 195 | 196 |
197 | 198 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 199 | located [here](docs/1.0.md). Please see that file for full implementation details. 200 | 201 | - **\**
202 | - **\**
203 | - **\**
204 | 205 |
206 | 207 | 208 | ## Phase 5 (Closed as of 7/15/2022) 209 | 210 |
211 | 212 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 213 | located [here](docs/1.0.md). Please see that file for full implementation details. 214 | 215 | - **\**
216 | - **\**
217 | 218 |
219 | 220 | ## Phase 6 (Closed as of 6/1/2023) 221 | 222 |
223 | 224 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 225 | located [here](docs/1.0.md). Please see that file for full implementation details. 226 | 227 | - **\**
228 | - **\**
229 | - **\**
230 | - **\**
231 | - **\**
232 | - **\**
233 | 234 |
235 | 236 | ## Phase 7 (Closed as of 6/1/2024) 237 | 238 |
239 | 240 | The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document 241 | located [here](docs/1.0.md). Please see that file for full implementation details. 242 | 243 | - **\**
244 | - **\**
245 | 246 | 247 |
248 | 249 | ## Other Proposals 250 | 251 | A list of the current and past proposals can be found in the Discussions 252 | section [here](https://github.com/Podcastindex-org/podcast-namespace/discussions). 253 | 254 |

255 | 256 | 257 | ## Branding 258 | 259 | [Podcasting2.org](https://podcasting2.org) 260 | 261 | [Podcasting 2.0 Brand Guide](https://live.standards.site/podcasting20/) 262 | 263 | Podcasting 2.0 Badge (red) 264 | -------------------------------------------------------------------------------- /apgtrss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/91e3baa0f9a356e8ac58df2c63cbe889bb5011da/apgtrss1.png -------------------------------------------------------------------------------- /apgtrss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Podcastindex-org/podcast-namespace/91e3baa0f9a356e8ac58df2c63cbe889bb5011da/apgtrss2.png -------------------------------------------------------------------------------- /categories.json: -------------------------------------------------------------------------------- 1 | { 2 | "Categories": [ 3 | { 4 | "id": 1, 5 | "name": "Arts" 6 | }, 7 | { 8 | "id": 2, 9 | "name": "Books" 10 | }, 11 | { 12 | "id": 3, 13 | "name": "Design" 14 | }, 15 | { 16 | "id": 4, 17 | "name": "Fashion" 18 | }, 19 | { 20 | "id": 5, 21 | "name": "Beauty" 22 | }, 23 | { 24 | "id": 6, 25 | "name": "Food" 26 | }, 27 | { 28 | "id": 7, 29 | "name": "Performing" 30 | }, 31 | { 32 | "id": 8, 33 | "name": "Visual" 34 | }, 35 | { 36 | "id": 9, 37 | "name": "Business" 38 | }, 39 | { 40 | "id": 10, 41 | "name": "Careers" 42 | }, 43 | { 44 | "id": 11, 45 | "name": "Entrepreneurship" 46 | }, 47 | { 48 | "id": 12, 49 | "name": "Investing" 50 | }, 51 | { 52 | "id": 13, 53 | "name": "Management" 54 | }, 55 | { 56 | "id": 14, 57 | "name": "Marketing" 58 | }, 59 | { 60 | "id": 15, 61 | "name": "Non-Profit" 62 | }, 63 | { 64 | "id": 16, 65 | "name": "Comedy" 66 | }, 67 | { 68 | "id": 17, 69 | "name": "Interviews" 70 | }, 71 | { 72 | "id": 18, 73 | "name": "Improv" 74 | }, 75 | { 76 | "id": 19, 77 | "name": "Stand-Up" 78 | }, 79 | { 80 | "id": 20, 81 | "name": "Education" 82 | }, 83 | { 84 | "id": 21, 85 | "name": "Courses" 86 | }, 87 | { 88 | "id": 22, 89 | "name": "How-To" 90 | }, 91 | { 92 | "id": 23, 93 | "name": "Language" 94 | }, 95 | { 96 | "id": 24, 97 | "name": "Learning" 98 | }, 99 | { 100 | "id": 25, 101 | "name": "Self-Improvement" 102 | }, 103 | { 104 | "id": 26, 105 | "name": "Fiction" 106 | }, 107 | { 108 | "id": 27, 109 | "name": "Drama" 110 | }, 111 | { 112 | "id": 28, 113 | "name": "History" 114 | }, 115 | { 116 | "id": 29, 117 | "name": "Health" 118 | }, 119 | { 120 | "id": 30, 121 | "name": "Fitness" 122 | }, 123 | { 124 | "id": 31, 125 | "name": "Alternative" 126 | }, 127 | { 128 | "id": 32, 129 | "name": "Medicine" 130 | }, 131 | { 132 | "id": 33, 133 | "name": "Mental" 134 | }, 135 | { 136 | "id": 34, 137 | "name": "Nutrition" 138 | }, 139 | { 140 | "id": 35, 141 | "name": "Sexuality" 142 | }, 143 | { 144 | "id": 36, 145 | "name": "Kids" 146 | }, 147 | { 148 | "id": 37, 149 | "name": "Family" 150 | }, 151 | { 152 | "id": 38, 153 | "name": "Parenting" 154 | }, 155 | { 156 | "id": 39, 157 | "name": "Pets" 158 | }, 159 | { 160 | "id": 40, 161 | "name": "Animals" 162 | }, 163 | { 164 | "id": 41, 165 | "name": "Stories" 166 | }, 167 | { 168 | "id": 42, 169 | "name": "Leisure" 170 | }, 171 | { 172 | "id": 43, 173 | "name": "Animation" 174 | }, 175 | { 176 | "id": 44, 177 | "name": "Manga" 178 | }, 179 | { 180 | "id": 45, 181 | "name": "Automotive" 182 | }, 183 | { 184 | "id": 46, 185 | "name": "Aviation" 186 | }, 187 | { 188 | "id": 47, 189 | "name": "Crafts" 190 | }, 191 | { 192 | "id": 48, 193 | "name": "Games" 194 | }, 195 | { 196 | "id": 49, 197 | "name": "Hobbies" 198 | }, 199 | { 200 | "id": 50, 201 | "name": "Home" 202 | }, 203 | { 204 | "id": 51, 205 | "name": "Garden" 206 | }, 207 | { 208 | "id": 52, 209 | "name": "Video-Games" 210 | }, 211 | { 212 | "id": 53, 213 | "name": "Music" 214 | }, 215 | { 216 | "id": 54, 217 | "name": "Commentary" 218 | }, 219 | { 220 | "id": 55, 221 | "name": "News" 222 | }, 223 | { 224 | "id": 56, 225 | "name": "Daily" 226 | }, 227 | { 228 | "id": 57, 229 | "name": "Entertainment" 230 | }, 231 | { 232 | "id": 58, 233 | "name": "Government" 234 | }, 235 | { 236 | "id": 59, 237 | "name": "Politics" 238 | }, 239 | { 240 | "id": 60, 241 | "name": "Buddhism" 242 | }, 243 | { 244 | "id": 61, 245 | "name": "Christianity" 246 | }, 247 | { 248 | "id": 62, 249 | "name": "Hinduism" 250 | }, 251 | { 252 | "id": 63, 253 | "name": "Islam" 254 | }, 255 | { 256 | "id": 64, 257 | "name": "Judaism" 258 | }, 259 | { 260 | "id": 65, 261 | "name": "Religion" 262 | }, 263 | { 264 | "id": 66, 265 | "name": "Spirituality" 266 | }, 267 | { 268 | "id": 67, 269 | "name": "Science" 270 | }, 271 | { 272 | "id": 68, 273 | "name": "Astronomy" 274 | }, 275 | { 276 | "id": 69, 277 | "name": "Chemistry" 278 | }, 279 | { 280 | "id": 70, 281 | "name": "Earth" 282 | }, 283 | { 284 | "id": 71, 285 | "name": "Life" 286 | }, 287 | { 288 | "id": 72, 289 | "name": "Mathematics" 290 | }, 291 | { 292 | "id": 73, 293 | "name": "Natural" 294 | }, 295 | { 296 | "id": 74, 297 | "name": "Nature" 298 | }, 299 | { 300 | "id": 75, 301 | "name": "Physics" 302 | }, 303 | { 304 | "id": 76, 305 | "name": "Social" 306 | }, 307 | { 308 | "id": 77, 309 | "name": "Society" 310 | }, 311 | { 312 | "id": 78, 313 | "name": "Culture" 314 | }, 315 | { 316 | "id": 79, 317 | "name": "Documentary" 318 | }, 319 | { 320 | "id": 80, 321 | "name": "Personal" 322 | }, 323 | { 324 | "id": 81, 325 | "name": "Journals" 326 | }, 327 | { 328 | "id": 82, 329 | "name": "Philosophy" 330 | }, 331 | { 332 | "id": 83, 333 | "name": "Places" 334 | }, 335 | { 336 | "id": 84, 337 | "name": "Travel" 338 | }, 339 | { 340 | "id": 85, 341 | "name": "Relationships" 342 | }, 343 | { 344 | "id": 86, 345 | "name": "Sports" 346 | }, 347 | { 348 | "id": 87, 349 | "name": "Baseball" 350 | }, 351 | { 352 | "id": 88, 353 | "name": "Basketball" 354 | }, 355 | { 356 | "id": 89, 357 | "name": "Cricket" 358 | }, 359 | { 360 | "id": 90, 361 | "name": "Fantasy" 362 | }, 363 | { 364 | "id": 91, 365 | "name": "Football" 366 | }, 367 | { 368 | "id": 92, 369 | "name": "Golf" 370 | }, 371 | { 372 | "id": 93, 373 | "name": "Hockey" 374 | }, 375 | { 376 | "id": 94, 377 | "name": "Rugby" 378 | }, 379 | { 380 | "id": 95, 381 | "name": "Running" 382 | }, 383 | { 384 | "id": 96, 385 | "name": "Soccer" 386 | }, 387 | { 388 | "id": 97, 389 | "name": "Swimming" 390 | }, 391 | { 392 | "id": 98, 393 | "name": "Tennis" 394 | }, 395 | { 396 | "id": 99, 397 | "name": "Volleyball" 398 | }, 399 | { 400 | "id": 100, 401 | "name": "Wilderness" 402 | }, 403 | { 404 | "id": 101, 405 | "name": "Wrestling" 406 | }, 407 | { 408 | "id": 102, 409 | "name": "Technology" 410 | }, 411 | { 412 | "id": 103, 413 | "name": "True Crime" 414 | }, 415 | { 416 | "id": 104, 417 | "name": "TV" 418 | }, 419 | { 420 | "id": 105, 421 | "name": "Film" 422 | }, 423 | { 424 | "id": 106, 425 | "name": "After-Shows" 426 | }, 427 | { 428 | "id": 107, 429 | "name": "Reviews" 430 | }, 431 | { 432 | "id": 108, 433 | "name": "Climate" 434 | }, 435 | { 436 | "id": 109, 437 | "name": "Weather" 438 | }, 439 | { 440 | "id": 110, 441 | "name": "Tabletop" 442 | }, 443 | { 444 | "id": 111, 445 | "name": "Role-Playing" 446 | }, 447 | { 448 | "id": 112, 449 | "name": "Cryptocurrency" 450 | } 451 | ] 452 | } -------------------------------------------------------------------------------- /chapters/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.2.0", 3 | "chapters": 4 | [ 5 | { 6 | "startTime": 0, 7 | "title": "Intro" 8 | }, 9 | { 10 | "startTime": 168, 11 | "title": "Hearing Aids", 12 | "img": "https://example.com/images/hearing_aids.jpg" 13 | }, 14 | { 15 | "startTime": 260, 16 | "title": "Progress Report" 17 | }, 18 | { 19 | "startTime": 410, 20 | "title": "Namespace", 21 | "img": "https://example.com/images/namepsace_example.jpg", 22 | "url": "https://github.com/Podcastindex-org/podcast-namespace" 23 | }, 24 | { 25 | "startTime": 3990, 26 | "title": "Just Break Up", 27 | "img": "https://example.com/images/justbreakuppod.png" 28 | }, 29 | { 30 | "startTime": 4600, 31 | "title": "Donations", 32 | "url": "https://example.com/paypal_link" 33 | }, 34 | { 35 | "startTime": 5510, 36 | "title": "The Big Players" 37 | }, 38 | { 39 | "startTime": 5854, 40 | "title": "Spread the Word" 41 | }, 42 | { 43 | "startTime": 6089, 44 | "title": "Outro" 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /chapters/exampleComplex.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.2.0", 3 | "author": "John Doe", 4 | "title": "Episode 7 - Making Progress", 5 | "podcastName": "John's Awesome Podcast", 6 | "chapters": 7 | [ 8 | { 9 | "startTime": 0, 10 | "title": "Intro" 11 | }, 12 | { 13 | "startTime": 168, 14 | "title": "Hearing Aids" 15 | }, 16 | { 17 | "startTime": 260, 18 | "title": "Progress Report" 19 | }, 20 | { 21 | "startTime": 410, 22 | "title": "Namespace", 23 | "img": "https://example.com/images/namepsace_example.jpg", 24 | "url": "https://github.com/Podcastindex-org/podcast-namespace" 25 | }, 26 | { 27 | "startTime": 3990, 28 | "title": "Just Break Up", 29 | "img": "https://example.com/images/justbreakuppod.png", 30 | "url": "https://twitter.com/justbreakuppod" 31 | }, 32 | { 33 | "startTime": 4200, 34 | "title": "Played song by artist", 35 | "img": "https://i.discogs.com/R-249504-1334592212.jpeg?bucket=discogs-images&fit=contain&format=auto&height=600&quality=90&width=600&signature=wMI9I0mHkbVxkkryQrN1JkkzhwFsrereuom9Lmfa92w%3D", 36 | "url": "https://www.discogs.com/Rick-Astley-Never-Gonna-Give-You-Up/master/96559", 37 | "value": "" 38 | }, 39 | { 40 | "startTime": 4600, 41 | "title": "Donations", 42 | "url": "https://example.com/paypal_link" 43 | }, 44 | { 45 | "startTime": 4826, 46 | "img": "https://example.com/images/parisfrance.jpg", 47 | "toc": false, 48 | "location": { 49 | "name": "Eiffel Tower, Paris", 50 | "geo": "geo:42.3417649,-70.9661596" 51 | } 52 | }, 53 | { 54 | "startTime": 5510, 55 | "title": "The Big Players" 56 | }, 57 | { 58 | "startTime": 5854, 59 | "title": "Spread the Word" 60 | }, 61 | { 62 | "startTime": 6089, 63 | "title": "Outro" 64 | } 65 | ] 66 | } 67 | -------------------------------------------------------------------------------- /chapters/jsonChapters.md: -------------------------------------------------------------------------------- 1 | ## JSON Chapters Format 2 | Version 1.2 - Updated on 2021.04.15 3 | 4 |

5 | 6 | This is the initial spec for a json chapters format that can be referenced in an RSS feed using the `` tag of 7 | the "podcast" namespace. This file can reside on any publicly accessible url. See the podcast namespace documentation for 8 | details on the format of the tag. 9 | 10 | This type of file should be served with a Content-type of 'application/json+chapters'. Chapter order is assumed to be 11 | in ascending order based on the `startTime`. 12 | 13 |
14 | 15 | ## "Chapters" Object 16 | 17 | The chapters object is a simple JSON object with only 2 required properties: 18 | 19 | - `version` (required - string) The version number of the format being used 20 | - `chapters` (required - array) An array of chapter objects defined below 21 | 22 | #### Optional Attributes: 23 | 24 | - `author` (optional - string) The name of the author of this podcast episode. 25 | - `title` (optional - string) The title of this podcast episode. 26 | - `podcastName` (optional - string) The name of the podcast this episode belongs to. 27 | - `description` (optional - string) A description of this episode. 28 | - `fileName` (optional - string) The name of the audio file these chapters apply to. 29 | - `waypoints` (optional - boolean) If this property is present, the locations in a chapter object should be displayed with a route between locations. 30 | 31 |
32 | 33 | ## The "Chapter" Object 34 | 35 | The "chapter" object takes this basic form: 36 | 37 | ```json 38 | { 39 | "startTime": 94, 40 | "title": "Donation Segment" 41 | } 42 | ``` 43 | 44 | There is only one required attribute: 45 | 46 | - `startTime` (required - float) The starting time of the chapter, expressed in seconds with float precision for fractions of a second. 47 | 48 |
49 | 50 | #### Optional Attributes: 51 | 52 | - `title` (optional - string) The title of this chapter. 53 | - `img` (optional - string) The url of an image to use as chapter art. 54 | - `url` (optional - string) The url of a web page or supporting document that's related to the topic of this chapter. 55 | - `toc` (optional - boolean) If this property is present and set to false, this chapter should not display visibly to the user in either the table of contents or as a jump-to point in the user interface. It should be considered a "silent" chapter marker for the purpose of meta-data only. If this property is set to `true` or not present at all, this should be considered a normal chapter for display to the user. The name "toc" is short for "table of contents". 56 | - `endTime` (optional - float) The end time of the chapter, expressed in seconds with float precision for fractions of a second. 57 | - `location` (optional - object) This object defines an optional location that is tied to this chapter. It follows the structure of the [location](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) tag in the XML namespace. 58 | 59 |
60 | 61 | ## The Location Object: 62 | 63 | The "location" object takes this basic form: 64 | 65 | ```json 66 | { 67 | "name": "Eiffel Tower, Paris", 68 | "geo": "geo:48.858093,2.294694" 69 | } 70 | ``` 71 | 72 | It is intended to provide for rich location-based experiences tied to a point of time within a podcast episode, or other feed based media. For example, a "walking tour" may include latitude and longitude waypoints along side the image within chapters markers as someone listens to the tour podcast. This 73 | would allow apps to show a map with markers within the UI as the tour progresses. Or, perhaps a "History of the Middle East" podcast might expose a map to highlight where certain landmarks are when being discussed. 74 | 75 | There are two required attributes: 76 | 77 | - `name` (required - string) A human readable place name. 78 | - `geo` (required - string) A simple latitude,longitude given in geoURI format, conformant to [RFC 5870](https://tools.ietf.org/html/rfc5870). 79 | 80 | #### Optional Attributes: 81 | 82 | - `osm` (optional - string) An OpenStreetMaps query string. Please see the [location](https://github.com/Podcastindex-org/podcast-namespace/blob/main/location/location.md) XML tag specification for full details. 83 | 84 |
85 | 86 | ## Basic example 87 | 88 | Here is what a very basic chapters file may look like: 89 | 90 | ```json 91 | { 92 | "version": "1.2.0", 93 | "chapters": 94 | [ 95 | { 96 | "startTime": 0, 97 | "title": "Intro" 98 | }, 99 | { 100 | "startTime": 168, 101 | "title": "Hearing Aids", 102 | "img": "https://example.com/images/hearing_aids.jpg" 103 | }, 104 | { 105 | "startTime": 260, 106 | "title": "Progress Report" 107 | }, 108 | { 109 | "startTime": 410, 110 | "title": "Namespace", 111 | "img": "https://example.com/images/namepsace_example.jpg", 112 | "url": "https://github.com/Podcastindex-org/podcast-namespace" 113 | }, 114 | { 115 | "startTime": 3990, 116 | "title": "Just Break Up", 117 | "img": "https://example.com/images/justbreakuppod.png" 118 | }, 119 | { 120 | "startTime": 5510, 121 | "title": "The Big Players" 122 | }, 123 | { 124 | "startTime": 5854, 125 | "title": "Spread the Word" 126 | }, 127 | { 128 | "startTime": 6089, 129 | "title": "Outro" 130 | } 131 | ] 132 | } 133 | ``` 134 | 135 | In this simple form, the chapter objects are treated as sequential just based on their index as a function of being 136 | ordered in ascending fashion based on their `startTime`. In a very simple example such as this nothing is present except the `startTime`, 137 | `title`, and a few bits of optional meta-data. 138 | 139 |

140 | 141 | ## More complex example 142 | 143 | In this more robust example, we can bring in more meta-data about the podcast episode, and provide a way for this file to exist more easily in a web 144 | context for something like an embedded HTML5 player on a website. Also there is an example of a "silent" chapter that has no presence in the visible 145 | chapter list, but allows for different artwork to be shown: 146 | 147 | ```json 148 | { 149 | "version": "1.2.0", 150 | "author": "John Doe", 151 | "title": "Episode 7 - Making Progress", 152 | "podcastName": "John's Awesome Podcast", 153 | "chapters": 154 | [ 155 | { 156 | "startTime": 0, 157 | "title": "Intro" 158 | }, 159 | { 160 | "startTime": 168, 161 | "title": "Hearing Aids" 162 | }, 163 | { 164 | "startTime": 260, 165 | "title": "Progress Report" 166 | }, 167 | { 168 | "startTime": 410, 169 | "title": "Namespace", 170 | "img": "https://example.com/images/namepsace_example.jpg", 171 | "url": "https://github.com/Podcastindex-org/podcast-namespace" 172 | }, 173 | { 174 | "startTime": 3990, 175 | "title": "Just Break Up", 176 | "img": "https://example.com/images/justbreakuppod.png", 177 | "url": "https://twitter.com/justbreakuppod" 178 | }, 179 | { 180 | "startTime": 4826, 181 | "img": "https://example.com/images/parisfrance.jpg", 182 | "toc": false, 183 | "location": { 184 | "name": "Eiffel Tower, Paris", 185 | "geo": "geo:42.3417649,-70.9661596" 186 | } 187 | }, 188 | { 189 | "startTime": 5510, 190 | "title": "The Big Players" 191 | }, 192 | { 193 | "startTime": 5854, 194 | "title": "Spread the Word" 195 | }, 196 | { 197 | "startTime": 6089, 198 | "title": "Outro" 199 | } 200 | ] 201 | } 202 | ``` 203 | 204 |

205 | 206 | ## Note about privacy 207 | 208 | Clearly, when pulling in web based data there is the chance that this functionality could be used for tracking. As a safeguard against that, apps 209 | using chapters are encouraged to prompt the user to acknowledge whether they trust the podcast in question before displaying the content. Trusted 210 | podcasts can then be remembered for the future. 211 | -------------------------------------------------------------------------------- /contributors.txt: -------------------------------------------------------------------------------- 1 | Tom Rossi 2 | James Cridland 3 | Guilherme Dellagustin 4 | Kevin Finn 5 | Dave Jones 6 | Daniel J. Lewis 7 | Andreas Hubel 8 | Christopher Isene 9 | Todd Cochrane 10 | Adam Curry 11 | @PhoneBoy 12 | Ben Slinger 13 | Martin Mouritzen 14 | Andy Beard 15 | Andy Valencia 16 | Matt Basta 17 | Mitch Downey 18 | @Muppet1856 19 | Douglas Kastle 20 | Andy Lehman 21 | Daniel Siebiesiuk 22 | Jon Buda 23 | Justin Jackson 24 | Tyler Lacy 25 | @brianoflondon 26 | Angelo at Blubrry 27 | Stacey Goers 28 | Stuart Moore 29 | @PofMagicfingers 30 | @Bigaston 31 | Alecks Gates 32 | Dave Keeshan 33 | Steven Bell 34 | @dergigi 35 | CTHTC 36 | @kenCode 37 | @Agorise 38 | @Dwev 39 | ... add your name as you contribute! 40 | -------------------------------------------------------------------------------- /docs/1.0.md: -------------------------------------------------------------------------------- 1 | # RSS Namespace Extension for Podcasting (Tag Specification) 2 | 3 | A wholistic RSS namespace for podcasting that is meant to synthesize the fragmented world of podcast namespaces. As 4 | elements are canonized, they will be added to this document so developers can begin implementation. The 5 | specifications below are considered locked and the team will prioritize backward compatibility. We are operating 6 | under the [Rules for Standards-Makers](http://scripting.com/2017/05/09/rulesForStandardsmakers.html). 7 | 8 | The namespace for this extension is `https://podcastindex.org/namespace/1.0`. Clients which recognize this namespace 9 | must also recognize `https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md` as identical. The 10 | suggested tag prefix for use in XML is `podcast`, but clients should support alternate prefixes for this namespace. 11 | If your application generates RSS feeds and you implement one or more elements below, you will need to link this 12 | document in your XML: 13 | 14 | ```xml 15 | 16 | ``` 17 | 18 | ## Podcast Tags 19 | 20 | Each tag below exists in the podcast namespace within the specified parent. All attributes are required unless 21 | explicitly specified as optional. Anywhere the url of a hyper-text based resource is specified, it must be given as 22 | `https:` and not `http:`. 23 | 24 | 25 | ## Table of Contents 26 | 27 | - [Transcript](tags/transcript.md) 28 | - [Locked](tags/locked.md) 29 | - [Funding](tags/funding.md) 30 | - [Chapters](tags/chapters.md) 31 | - [Soundbite](tags/soundbite.md) 32 | - [Person](tags/person.md) 33 | - [Location](tags/location.md) 34 | - [Season](tags/season.md) 35 | - [Episode](tags/episode.md) 36 | - [Trailer](tags/trailer.md) 37 | - [License](tags/license.md) 38 | - [Alternate Enclosure](tags/alternateEnclosure.md) 39 | - [Source](tags/source.md) 40 | - [Integrity](tags/integrity.md) 41 | - [Guid](tags/guid.md) 42 | - [Value](tags/value.md) 43 | - [Value Recipient](tags/valueRecipient.md) 44 | - [Medium](tags/medium.md) 45 | - [Images](tags/images.md) 46 | - [Live Item](tags/liveItem.md) 47 | - [Content Link](tags/contentLink.md) 48 | - [Social Interact](tags/socialInteract.md) 49 | - [Block](tags/block.md) 50 | - [Txt](tags/txt.md) 51 | - [Remote Item](tags/remoteItem.md) 52 | - [Podroll](tags/podroll.md) 53 | - [Update Frequency](tags/updateFrequency.md) 54 | - [Podping](tags/podping.md) 55 | - [Value Time Split](tags/valueTimeSplit.md) 56 | - [Chat](tags/chat.md) 57 | - [Publisher](tags/publisher.md) -------------------------------------------------------------------------------- /docs/chatprotocols.txt: -------------------------------------------------------------------------------- 1 | irc 2 | xmpp 3 | nostr 4 | matrix -------------------------------------------------------------------------------- /docs/other-recommendations.md: -------------------------------------------------------------------------------- 1 | # Other Recommendations from the Creators of the RSS Namespace Extension for Podcasting 2 | 3 | While the wholistic RSS namespace for podcasting is meant to synthesize the fragmented world of podcast namespaces, there are some existing standards and defacto-standards we want do endorse: 4 | 5 | ## Episode GUID 6 | 7 | For all new episodes, we recommended to use 8 | 9 | * either a permanent URI, e.g. `https://example.com/ep0003` 10 | * or a [Universally unique identifier (UUID)](https://en.wikipedia.org/wiki/Universally_unique_identifier) e.g. `7c029615-a810-5214-9342-eee73f58435d` 11 | 12 | The GUID of an episode should never change, even if a new version of the episode is being published, otherwise this episode will be duplicated downstream. 13 | 14 | 15 | Consumers of podcast feeds should fall back to the enclosure URL or the namespaced UUIDv5 (SHA1 Hash with ns:URL) of the enclosure URL, if the value is not set – see https://github.com/Podcastindex-org/podcast-namespace/issues/186#issuecomment-932742468 for more details. 16 | 17 | 18 | 19 | #### Examples 20 | 21 | Only one entry per `` is valid: 22 | ```xml 23 | https://example.com/ep0003 24 | 7c029615-a810-5214-9342-eee73f58435d 25 | ``` 26 | (`isPermaLink` is optional, its default value is true –) 27 | 28 |

29 | 30 | 31 | ## Episode Description and Summary 32 | 33 | If you use ``, it should be an actual summary of the episode, in one or two sentences, and not a copy of the description. Be aware that Apple dropped `` from [their spec](https://help.apple.com/itc/podcasts_connect/#/itcb54353390) but many other clients still support it. 34 | 35 | The [original RSS specification](https://cyber.harvard.edu/rss/rss.html#hrelementsOfLtitemgt) defined `description` as follows: 36 | > A channel may contain any number of ``s. An item may represent a "story" -- much like a story in a newspaper or magazine; if so its description is a synopsis of the story, and the link points to the full story. An item may also be complete in itself, if so, the description contains the text (entity-encoded HTML is allowed; see examples) … 37 | 38 | There also exists `` for dedicated HTML episode notes [[rssboard.org]](https://www.rssboard.org/rss-profile#namespace-elements-content-encoded), but more and more publishers switch to only having ``. 39 | 40 | When your description contains HTML, we recommend to wrap it into ``. See https://podnews.net/article/html-episode-notes-in-podcast-rss and https://podnews.net/article/how-podcast-show-notes-display for more information about supported HTML tags in different clients. Typical are `

`, `
`, ` `, `

    ` and `
  • `. 41 | 42 | 43 | 44 |

    45 | 46 | ## Feed Paging and Archiving (RFC5005) 47 | 48 | To be able to put more metadata into RSS feeds, while keeping the full archive of all old episodes becomes a challange for some podcasters and podcast clients. A typical workaround in the industry is to only render the full metadata of the newest episodes, where there is already a proper solution since 2007: [RFC5005](https://tools.ietf.org/html/rfc5005) 49 | 50 | There are already a few players implementing RFC5005 for a while, but . Adoption from clients is sporadic. A new/different standard wouldn't help though because I'd say RFC5005 does all that's required. We need to be louder about the existence of the standard and ask for it's implementation from all sides. 51 | 52 | 53 | 54 | #### Examples 55 | 56 | Excerpt from https://feeds.metaebene.me/freakshow/mp3 feed page 2, 57 | parent ``: 58 | 59 | ```xml 60 |