Arunhegde1231/CosmicRSS
A simple RSS reader for the Cosmic Desktop Environment, built using libcosmic.
cosmic-rss
⚠️ DISCLAIMER: This project is a learning exercise and is under development. It is not production-ready and may have bugs, missing features, or break between updates.
A simple RSS reader built with libcosmic and Rust, designed for the COSMIC desktop environment on Linux.
What it does
- Fetches articles from a hardcoded list of RSS feeds (news, tech, science, open source)
- Stores them locally in a SQLite database so they persist between launches
- Displays feeds in a collapsible sidebar — click a feed to filter articles
- Lazy-loads articles as you scroll, 50 at a time
- Auto-syncs every 10 minutes in the background
- "Refresh" button in the header to trigger an immediate sync
What it doesn't do (yet)
- Feeds are hardcoded — no way to add or remove feeds from the UI (you have to edit
sync.rsdirectly) - No article reading view — titles only, no content or summary pane
- No read/unread tracking
- No search
- No notifications
- RSS has no historical pagination, so older articles only accumulate over time as you leave the app running
Requirements
- Fedora Linux (tested on Fedora 40+)
- Rust stable toolchain via rustup
Building
1. Install system dependencies
sudo dnf install -y \
cargo \
cmake \
just \
expat-devel \
fontconfig-devel \
freetype-devel \
libxkbcommon-devel \
mesa-libGL-devel \
mesa-libEGL-devel \
wayland-devel \
pkgconf-pkg-config \
gcc \
g++2. Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"3. Clone and build
git clone <your-repo-url>
cd CosmicRSS
# Check for errors without building
cargo check
# Debug build (unoptimised, good for development)
cargo run
# Release build (optimised, recommended for actual use)
cargo build --release
./target/release/cosmic-rssOn first run, rss.db will be created in the current directory. Delete it to start fresh:
rm rss.db && ./target/release/cosmic-rssOr do everything at once with this command:
cargo build --release && rm rss.db && ./target/release/cosmic-rssProject structure
src/
├── main.rs # App struct, UI layout, nav sidebar, message handling
├── feed.rs # Entry and Channel data types
├── sync.rs # RSS fetching, background sync loop
└── db.rs # SQLite setup, read/write helpers
Adding feeds
Open src/sync.rs and add URLs to the URLS array at the top of the file:
const URLS: &[&str] = &[
"https://example.com/feed.rss",
// ...
];Then rebuild. The new feeds will be fetched on the next sync.
Dependencies
| Crate | Purpose |
|---|---|
libcosmic |
Core UI framework (COSMIC desktop) |
tokio |
For Async runtime |
reqwest |
HTTP client for fetching feeds |
rss |
For parsing RSS feed |
rusqlite |
SQLite database (bundled) |
chrono |
For date/time parsing and formatting |
serde |
Serialisation |
anyhow |
Error handling |
futures |
Streaming utilities |
Contributing
This is primarily a personal learning project for exploring libcosmic and Rust GUI development. Issues and PRs are welcome but response time may be slow.