FeedKit

Swift 6 package · v10.10.1 · MIT

Every feed format.
One Swift type.

FeedKit reads and writes RSS, RDF, Atom, and JSON into typed Swift models — thirteen namespaces, one universal Feed type.

One package for Apple platforms, Linux, Wasm, and Android.

Feed.swift Read · any format
let feed = try await Feed(urlString: url)

switch feed {
case .rss(let feed):  // RSSFeed
case .rdf(let feed):  // RDFFeed
case .atom(let feed): // AtomFeed
case .json(let feed): // JSONFeed
}
Detected 4 formats · 13 namespaces

FeedKit detects RSS, RDF, Atom, and JSON feeds before parsing.

01 · Formats

Four specs. One API.

Dedicated models for RSS 2.0, RSS 1.0 (RDF), Atom, and JSON Feed — plus the namespaces real feeds actually use.

01

RSS 2.0

Spec ↗
  • Channels, items, enclosures
  • TTL, cloud, skip days
  • Categories and GUIDs
02

RDF

RSS 1.0 · 0.90 ↗
  • Items as channel siblings
  • Dublin Core metadata
  • RSS 0.90 compatibility
03

Atom

RFC 4287 ↗
  • Entries, authors, contributors
  • Content, source, and links
  • Atom 1.0 namespaces
04

JSON Feed

1.0 · 1.1 ↗
  • Items, authors, attachments
  • Hubs, next_url, expired
  • JSON Feed 1.0 and 1.1
13

namespaces, handled.

Dublin Core, Media RSS, iTunes, Podcast Index, and nine more.

  • Atom
  • Dublin Core
  • Syndication
  • Content
  • Media RSS
  • Geo RSS
  • GML
  • iTunes
  • YouTube
  • Podcast Index
  • Feed Paging · RFC 5005
  • Comment API
  • Podlove Chapters

02 · Performance

Measured, so regressions don't hide.

The chart is the record, not a highlight reel: measured releases since 10.5.0, same corpus, same baseline.

“The 10.5.1 date-decoding regression doubled parse time and went unnoticed for five releases; this table is the fix for that.”

PERFORMANCE.md · FeedKit
Corpus409 KB · 6 feeds
Items133 per run
Protocol50 sweeps · 5 warm-ups

03 · API

Read it. Generate it.
Detect it.

Dedicated types when you know the format. The universal Feed enum when you don't.

Five ways in

urlString · url · fileURL · string · data

Remote URLs use URLSession. On WASI, use fileURL, string, or data.

Feed.swift Universal reader
let feed = try await Feed(
  urlString: "https://daringfireball.net/feeds/main"
)

switch feed {
case .rss(let feed):  // RSSFeed
case .rdf(let feed):  // RDFFeed
case .atom(let feed): // AtomFeed
case .json(let feed): // JSONFeed
}

Samples adapted from the FeedKit README.

04 · Source

Open source, in the open.

nmdias/FeedKit
1.4kGitHub stars
201Forks
1,078Commits
MITLicense

Public snapshot · 26 Oct 2026

05 · Install

Add it like any Swift package.

No third-party dependencies. Add the package URL in Xcode, or declare it in Package.swift.

Package URL

https://github.com/nmdias/FeedKit

Platforms iOS 15+ macOS 12+ watchOS 8+ tvOS 15+ visionOS 1+ Linux Wasm Android

Xcode → File → Add Package Dependencies…