rust-syndication/rss

Library for serializing the RSS web content syndication format

Rust

503

331 commits

updated Sep 30, 2026

See the code

README

rss

Build status Codecov crates.io Status dependency status Docs

Library for deserializing and serializing the RSS web content syndication format.

Supported Versions

Reading from the following RSS versions is supported:

  • RSS 0.90
  • RSS 0.91
  • RSS 0.92
  • RSS 1.0
  • RSS 2.0

Writing support is limited to RSS 2.0.

Documentation

Usage

Add the dependency to your Cargo.toml.

[dependencies]
rss = "2.0"

Reading

A channel can be read from any object that implements the BufRead trait.

From a file

use std::fs::File;
use std::io::BufReader;
use rss::Channel;

let file = File::open("example.xml").unwrap();
let channel = Channel::read_from(BufReader::new(file)).unwrap();

From a buffer

Note: This example requires reqwest crate.

use std::error::Error;
use rss::Channel;

async fn example_feed() -> Result<Channel, Box<dyn Error>> {
    let content = reqwest::get("http://example.com/feed.xml")
        .await?
        .bytes()
        .await?;
    let channel = Channel::read_from(&content[..])?;
    Ok(channel)
}

Writing

A channel can be written to any object that implements the Write trait or converted to an XML string using the ToString trait.

use rss::Channel;

let channel = Channel::default();
channel.write_to(::std::io::sink()).unwrap(); // // write to the channel to a writer
let string = channel.to_string(); // convert the channel to a string

Creation

Builder methods are provided to assist in the creation of channels.

Note: This requires the builders feature, which is enabled by default.

use rss::ChannelBuilder;

let channel = ChannelBuilder::default()
    .title("Channel Title")
    .link("http://example.com")
    .description("An RSS feed.")
    .build()
    .unwrap();

Validation

Validation methods are provided to validate the contents of a channel against the RSS specification.

Note: This requires enabling the validation feature.

use rss::Channel;
use rss::validation::Validate;

let channel = Channel::default();
channel.validate().unwrap();

Extensions

Elements which have non-default namespaces will be considered extensions. Extensions are stored in Channel.extensions and Item.extensions.

For convenience, Dublin Core, Syndication and iTunes extensions are extracted to structs and stored in as properties on channels and items.

Invalid Feeds

As a best effort to parse invalid feeds rss will default elements declared as "required" by the RSS 2.0 specification to an empty string.

License

Licensed under either of

at your option.

feed
parser
rss
rust

rust-syndication/rss

Library for serializing the RSS web content syndication format

Rust

503

331 commits

updated Sep 30, 2026

See the code

README

rss

Build status Codecov crates.io Status dependency status Docs

Library for deserializing and serializing the RSS web content syndication format.

Supported Versions

Reading from the following RSS versions is supported:

  • RSS 0.90
  • RSS 0.91
  • RSS 0.92
  • RSS 1.0
  • RSS 2.0

Writing support is limited to RSS 2.0.

Documentation

Usage

Add the dependency to your Cargo.toml.

[dependencies]
rss = "2.0"

Reading

A channel can be read from any object that implements the BufRead trait.

From a file

use std::fs::File;
use std::io::BufReader;
use rss::Channel;

let file = File::open("example.xml").unwrap();
let channel = Channel::read_from(BufReader::new(file)).unwrap();

From a buffer

Note: This example requires reqwest crate.

use std::error::Error;
use rss::Channel;

async fn example_feed() -> Result<Channel, Box<dyn Error>> {
    let content = reqwest::get("http://example.com/feed.xml")
        .await?
        .bytes()
        .await?;
    let channel = Channel::read_from(&content[..])?;
    Ok(channel)
}

Writing

A channel can be written to any object that implements the Write trait or converted to an XML string using the ToString trait.

use rss::Channel;

let channel = Channel::default();
channel.write_to(::std::io::sink()).unwrap(); // // write to the channel to a writer
let string = channel.to_string(); // convert the channel to a string

Creation

Builder methods are provided to assist in the creation of channels.

Note: This requires the builders feature, which is enabled by default.

use rss::ChannelBuilder;

let channel = ChannelBuilder::default()
    .title("Channel Title")
    .link("http://example.com")
    .description("An RSS feed.")
    .build()
    .unwrap();

Validation

Validation methods are provided to validate the contents of a channel against the RSS specification.

Note: This requires enabling the validation feature.

use rss::Channel;
use rss::validation::Validate;

let channel = Channel::default();
channel.validate().unwrap();

Extensions

Elements which have non-default namespaces will be considered extensions. Extensions are stored in Channel.extensions and Item.extensions.

For convenience, Dublin Core, Syndication and iTunes extensions are extracted to structs and stored in as properties on channels and items.

Invalid Feeds

As a best effort to parse invalid feeds rss will default elements declared as "required" by the RSS 2.0 specification to an empty string.

License

Licensed under either of

at your option.

feed
parser
rss
rust

Project health

Overall

3.7/10

Maintained

6/10

Code review

3/10
OpenSSF Scorecard

crates.io

Latest release

2.1.2 · Sep 10, 2026

Releases this year

4

Significant stargazers

Emma Smith

476 followers · starred Dec 2023

Rick Elrod

331 followers · starred Nov 2024

Johann Hofmann

360 followers · starred Nov 2015

Nick Hamann

26 followers · starred May 2015