Releases: atelier-socle/podcast-feed-maker
0.3.2 - CI Toolchain Alignment
Maintenance release completing the CI toolchain modernization started in 0.3.1. Two workflow jobs that were left out of that scope are now aligned on the 26.4 toolchain generation. No changes to the PodcastFeedMaker library or the podcastfeed CLI — the public API, runtime behavior, and the full test suite are identical to 0.3.1, and the published binaries are functionally equivalent.
What changed
ci.yml— theplatform-buildsjob now selects Xcode 26.4 instead of Xcode 26.2 for the iOS, tvOS, watchOS, visionOS, and Mac Catalyst compile checks.release.yml— thebuild-linuxjob now builds the release binary in theswift:6.3container instead ofswift:6.2, consistent with the macOS release build on Xcode 26.4.
The 26.2 and swift:6.2 legs of the build-and-test and linux matrices are intentionally kept, to preserve dual-toolchain (Swift 6.2 + 6.3) coverage in CI.
Compatibility
Unchanged from 0.3.1. Supported platforms, the minimum supported toolchain (Swift 6.2), and the dependency set are all the same.
Full changelog: 0.3.1...0.3.2
0.3.1 - CI Toolchain Modernization
Swift 6.2 + 6.3 build/test matrix
CI now builds and tests against both Swift 6.2 (Xcode 26.2) and Swift 6.3 (Xcode 26.4), on macOS and Linux:
build-and-testruns as a matrix on Xcode 26.2 and Xcode 26.4.linuxruns as a matrix on theswift:6.2andswift:6.3containers.- Code coverage and the Codecov upload run once, from the Swift 6.2 leg only.
- The new Swift 6.3 toolchain was validated locally and in CI with zero regressions.
GitHub Actions on Node 24
Every GitHub Action used across the workflows was bumped to the minimum major version running on the Node 24 runtime. Each bump was verified against the action's actual runs.using field — including the internal references of composite
actions — not against version numbers alone.
| Action | From | To |
|---|---|---|
actions/checkout |
v4 | v5 |
actions/upload-artifact |
v4 | v6 |
actions/download-artifact |
v4 | v7 |
codecov/codecov-action |
v5 | v6 |
softprops/action-gh-release |
v2 | v3 |
actions/upload-pages-artifact |
v3 | v5 |
actions/deploy-pages |
v4 | v5 |
The only breaking change across all of these is the Node 24 runtime requirement, which also raises the minimum Actions runner version to 2.327.1 — well below the version shipped on GitHub-hosted runners.
Xcode 26.4
The release workflow (release.yml) and the documentation workflow (docc-deploy.yml) now build with Xcode 26.4.
Compatibility
Unchanged from 0.3.0. Supported platforms, the minimum supported toolchain (Swift 6.2), and the dependency set are all the same.
Full changelog: 0.3.0...0.3.1
0.3.0 — Video & HLS
🔥 PodcastFeedMaker 0.3.0 — Video & HLS
PodcastFeedMaker now speaks video. This release adds comprehensive support for video podcast enclosures, HLS streaming manifests, and doubles the number of supported media formats — making PodcastFeedMaker the most complete podcast RSS library in the Swift ecosystem.
Video & HLS Enclosure Support
New MIME types (11 → 24)
- HLS:
hlsManifest(application/x-mpegURL),hlsAudioManifest(audio/mpegurl),mpegTS(video/MP2T) - Video:
webm,threeGP,threeGP2,avi,matroska,wmv - Audio:
webmAudio,matroskaAudio,aiff,wma
New convenience factories (3 → 15)
- Audio:
.aac(),.ogg(),.opus(),.wav(),.flac(),.aiff(),.webmAudio() - Video:
.mov(),.m4v(),.webm() - HLS:
.hls(),.hlsAudio()
MIMEType helper properties
isVideo— true for all video formatsisAudio— true for all audio formatsisHLS— true for HLS manifestsisStreaming— true for HLS + MPEG-TS
Platform validator updates
- Apple Podcasts: video format validation, HLS info note (Apple delivers HLS via Podcasts Connect API),
podcast:mediumcross-field warning - Spotify: MP4 preferred for video, 500 MB video size warning (vs 200 MB audio)
- Podcast Index: HLS
alternateEnclosureinfo note for video feeds
License change: MIT → Apache 2.0
PodcastFeedMaker is now licensed under the Apache License 2.0. This provides stronger protections for both users and contributors, including an explicit patent grant.
- LICENSE file replaced with Apache 2.0 full text
- NOTICE file added (required by Apache 2.0 Section 4d)
- SPDX-License-Identifier headers added to all 315 source files
- CONTRIBUTING.md updated with Apache 2.0 contribution terms
By the numbers
| Metric | Before | After |
|---|---|---|
| MIME types | 11 | 24 |
| Convenience factories | 3 | 15 |
| Tests | 2 655 | 2 762 (+107) |
| Test suites | 283 | 296 (+13) |
| SwiftLint violations | 0 | 0 |
| Regressions | — | 0 |
Compatibility
- Swift 6.2+
- macOS 14+ · iOS 17+ · tvOS 17+ · watchOS 10+ · visionOS 1+ · Linux
- Zero third-party dependencies
Full Changelog: 0.2.0...0.3.0
0.2.0 — Audit & OPML
🎉 PodcastFeedMaker 0.2.0 — Audit & OPML
The second milestone adds two major features: a complete feed quality auditing engine and full OPML subscription list support.
🔍 Feed Audit System
Score any podcast feed from 0 to 100 across five weighted categories, with actionable recommendations and a cross-platform compatibility matrix.
- 29 criteria across Metadata (25%), Episodes (25%), Compliance (20%), Accessibility (15%), and Discoverability (15%)
- Letter grades from A+ to F with score thresholds
- Prioritized recommendations — critical, recommended, and nice-to-have, each with a concrete fix suggestion
- Platform compatibility matrix — Apple Podcasts, Spotify, Amazon Music, Podcast Index, PSP-1
- Score comparison — track feed quality evolution between versions
- CI/CD integration —
podcastfeed audit feed.xml --min-score 80exits with code 1 on failure - JSON output —
--format jsonfor pipeline integration - Localization-ready — stable
criterionIdkeys documented in the Audit Identifiers Reference
📋 OPML Import/Export
Import and export podcast subscription lists in OPML 1.0 and 2.0 format.
- OPMLParser — full OPML 1.0/2.0 parsing with best-effort error recovery, case-insensitive type matching, Linux compatible
- OPMLGenerator — pretty-print XML output with proper escaping and recursive outline generation
- OPMLValidator — conformity checks with errors/warnings report
- OPMLFeedConverter — bidirectional conversion between PodcastFeed and OPMLOutline
- Custom attributes preservation — round-trip fidelity for non-standard attributes (Overcast, Pocket Casts, etc.)
- CLI commands —
podcastfeed opml-exportandpodcastfeed opml-import
📚 Documentation
- 2 new DocC guide articles (AuditingFeeds, OPMLGuide)
- Audit Identifiers Reference — complete mapping of all 29 criterion IDs for app localization
- Updated README with new sections, CLI commands, and architecture
📊 Quality
- 2655 tests in 283 suites (was 2267 in 0.1.0)
- 98.04% code coverage
- 0 warnings, 0 SwiftLint violations
- 13 CLI commands (was 10 in 0.1.0)
- All platforms green: macOS, Linux, iOS, tvOS, visionOS, Mac Catalyst
🔧 Binary Artifacts
podcastfeed-macos-arm64(1.53 MB)podcastfeed-linux-x86_64(3.28 MB)
Full Changelog
0.1.0 — Initial Release
❤️ PodcastFeedMaker 0.1.0
Initial public release — A reference-quality Swift library for generating, parsing, and validating podcast RSS feeds.
Highlights
PodcastFeedMaker covers the complete podcast feed lifecycle with zero third-party dependencies. Pure Swift + Foundation, Linux-compatible from day one.
- 2,267 tests across 238 suites
- 7 XML namespaces: RSS 2.0, iTunes, Podcast Namespace 2.0 (all 30 tags), Atom, Dublin Core, Content Module, Podlove Simple Chapters
- 6 platforms: macOS, iOS, tvOS, watchOS, visionOS, Linux
- Swift 6.2 with full concurrency compliance
Features
Feed Generation
FeedGenerator— synchronous XML generation with configurable formatting (pretty-printed, minified)StreamingFeedGenerator— async streaming for large catalogs
Feed Parsing
FeedParser— full-fidelity XML parsing with diagnostics and best-effort error recoveryStreamingFeedParser— yields items one at a time for memory efficiencyDateParser— handles RFC 822, ISO 8601, and common date format variants
Validation
- Multi-platform validation: Apple Podcasts, Spotify, Amazon Music, Podcast Index, PSP-1
- Severity levels: error, warning, info
- Template-aware validation with level-mismatch detection
Builder DSL
- Result builder syntax for feed composition
- Fluent channel and item modifiers
PSP1Configurationhelper for Podcasting 2.0 compliance
Templates & Presets
- Four expertise levels: Basic, Standard, Advanced, Expert
- Platform presets:
.apple,.spotify,.universal,.all,.custom FeedTemplateprotocol for custom template composition- Template composition with
+operator and fluent builder - Factory methods:
PodcastFeed.basic(),.standard(),.advanced(),.expert()
Chapters
- JSON Chapters (
JSONChapterList,JSONChapter) — full Codable support - Podlove Simple Chapters (
PodloveChapters,PodloveChapter) - Chapter conversion between formats
Round-Trip & Diff
- Zero data loss round-trip: parse → modify → generate
- Preserves unknown elements, CDATA, XML comments, namespace prefixes
- JSON round-trip via Codable
FeedDiff— compare feeds with channel, episode, and namespace-level differencing
CLI (podcastfeed)
Ten commands for feed management:
| Command | Description |
|---|---|
init |
Scaffold a new feed from a template |
generate |
Generate RSS XML from JSON |
read |
Parse and display a feed |
validate |
Validate against platform requirements |
lint |
Quick validation check |
episodes |
List episodes |
chapters |
Extract chapters |
diff |
Compare two feeds |
convert |
Convert between XML and JSON |
add-episode |
Add an episode to an existing feed |
Engine
PodcastFeedEngine— high-level convenience API combining generate, parse, validateNetworkValidator— async URL and media type verification
Installation
Swift Package Manager
dependencies: [
.package(url: "https://github.com/atelier-socle/podcast-feed-maker.git", from: "0.1.0")
]CLI Binary
swift build -c release
cp .build/release/podcastfeed /usr/local/bin/Pre-built binaries for macOS (arm64) and Linux (x86_64) are attached to this release.
Documentation
Full DocC documentation: atelier-socle.github.io/podcast-feed-maker
Requirements
- Swift 6.2+
- macOS 15+ / iOS 18+ / tvOS 18+ / watchOS 11+ / visionOS 2+ / Linux (Ubuntu 22.04+)
Downloads
| Platform | File |
|---|---|
| macOS arm64 | podcastfeed-macos-arm64.tar.gz |
| Linux x86_64 | podcastfeed-linux-x86_64.tar.gz |
Full Changelog: https://github.com/atelier-socle/podcast-feed-maker/commits/0.1.0