Your personal news feed aggregator, with AI summaries - running on your own machine.
MeigRSS is a local news aggregator with AI-powered summaries. It collects articles from configured RSS feeds, newsletter (EML files) and web feed (with GET request from the program or external API if the site blocks GET requests); extracts full text on demand, and generates summaries via AI APIs (Mistral, OpenAI, Claude, Gemini).
IMPORTANT: The software author does not endorse the use of the site scaping feature for small hosts, and suggest to use it only for high-traffic news sites with no RSS.
FreshRSS and Miniflux read feeds, MeigRSS also reads what a feed doesn't have: it turns sites that don't display one into feeds, as well as newsletters you receive via email (import .eml files, even entire folders). Each article can be summarized by AI, and the full text can be retrieved or manually rewritten when the source publishes only the preview. Rust + SQLite backend: one binary, no account, no cloud - unlike Feedly and Inoreader, your feeds and data remain on your own machine.
You can find all the functionality explanation in this video.
Tested on: Windows 11, Linux (Debian 13)
AI API tested with: Mistral (Small and Large). Other providers (OpenAI, Claude, Gemini) use standard API formats and should work without issues, but have not been explicitly tested.
Web Feed API tested with: Scrape.do. Other providers (ScraperAPI, ScrapingBee, Scrapfly, ZenRows) use the same API + URL formats and should work without issues, but have not been explicitly tested.
Last updated: August 2026
- RSS/Atom feed aggregation with manual and automatic updates, including conditional requests and handling of rate limiting, gone feeds, and permanent redirects
- Automatic summaries from feed or generated by AI (Mistral Small/Large, OpenAI, Claude, Gemini)
- Full article text extraction (on-demand, per article)
- Manual editing of the article full text, for sources the scraper cannot reach
- Multilanguage web interface (Italian/English/French/German/Portuguese/Spanish), desktop-first
- Category management, favorites, feed import/export in JSON and OPML format (including settings, newsletters and favorite articles in JSON files)
- Newsletter import from EML files, one at a time or a whole folder at once, with per-newsletter feed organization
- Web feed monitoring for sites without RSS (via GET request or external JS rendering API)
- API key encryption at rest (AES-256-GCM)
- Configurable retention period with automatic purge of expired articles
- Automatic pausing of unresponsive feeds
- Internet connectivity check before updates
- Article search by keyword in title (whole-word, Unicode-aware)
- Feed grouping view with alphabetical sorting and internal date ordering
- Keyword highlighting in titles, summaries, and full text
- New article indicator with read/unread tracking
- Pagination with first/last page navigation
Parsing is handled by feed-rs, which covers most of the feed types available.
Around the parser, MeigRSS takes care of the fetching itself:
- Conditional requests -
ETagandLast-Modifiedare stored per feed and sent back asIf-None-MatchandIf-Modified-Since. A server with nothing new answers304 Not Modifiedand sends no body at all. - Compressed transfers - gzip and Brotli are negotiated and decompressed transparently.
- Identifiable User-Agent - every request declares the application and its version, taken from the build at compile time, so an administrator reading the logs can tell what is knocking.
429 Too Many Requests- the feed is paused instead of being retried straight away. When the response carriesRetry-After, the requested delay is honoured in both its permitted forms, a number of seconds or an HTTP date.410 Gone- handled like a rate limit: the feed is paused rather than requested forever.- Permanent redirects (
301,308) - followed once, after which the feed URL is rewritten to its new address and the stored validators are cleared, so the detour is not paid again at every update. Temporary redirects leave the stored URL untouched. - No duplicate fetch when adding a RSS feed - validating a RSS feed URL already downloads its content, which is held for a few minutes and reused when the feed is actually saved. Adding a feed costs one request, not two.
| Component | Technology |
|---|---|
| Backend | Rust (Axum + Tokio) |
| Frontend | Svelte 5 (SvelteKit) |
| Database | SQLite (rusqlite) |
| AI | Mistral, OpenAI, Claude, Gemini (configurable) |
| Email parsing | mail-parser (EML/MIME) |
| Web rendering | Scrape.do, ScraperAPI, ScrapingBee, Scrapfly, ZenRows (configurable) |
See DETAILS.md for all the details (building the project and using the software), or if you have Windows you can directly download the exe file here.
MeigRSS is an RSS feed aggregator for personal use. RSS feeds are intentionally published by websites to be read by aggregators.
The full text download (scraping) and the web scraping features is at the user's discretion. Before enabling it for a feed, it is the user's responsibility to verify that the website's terms of use allow it. Downloading full text is technically equivalent to saving a web page from your browser as an HTML file for personal reading.
The software author is not responsible for any misuse of the scraping features or for any violation of the terms of service of aggregated websites. The web feed monitoring feature can use third-party rendering APIs to download and render web pages. The user is responsible for complying with the terms of service of both the monitored websites and the rendering API provider. API usage and associated costs are the user's responsibility.
MIT License
Copyright (c) 2026 Giulio Magini
See LICENSE for the full license text.
All third-party dependencies use permissive open-source licenses (MIT, Apache 2.0, BSD) compatible with this project's MIT license. Their licenses are included in their respective packages and are automatically available when building the project.
- Axum - Web framework
- SvelteKit - Frontend framework
- feed-rs - RSS/Atom parser
- readabilityrs - Mozilla Readability algorithm
- rusqlite - SQLite bindings
- aes-gcm - API key encryption
- mail-parser - EML/MIME email parsing
- Google Material Icons - UI icons
- IBM Plex Sans - Typography

