You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Conditional requests.ETag and Last-Modified are stored per feed and sent back as If-None-Match and If-Modified-Since. A server with nothing new answers 304 and sends no body at all.
Compressed transfers. gzip and Brotli are negotiated and decompressed transparently.
Identifiable User-Agent, carrying the application version, so an administrator reading the logs can tell what is knocking.
Rate limiting (429). The feed is paused instead of being retried straight away, and when the server states how long to wait through Retry-After, that delay is honoured - both as a number of seconds and as an HTTP date.
Gone feeds (410). Paused rather than requested forever.
Permanent redirects (301, 308). Followed once, then the feed URL is rewritten to its new address so the detour is not paid again at every update. Temporary redirects leave the stored URL untouched.
Accept header declaring the feed formats MeigRSS understands, which avoids servers that hand back the HTML page instead of the feed.
No duplicate request when adding a RSS feed. Validating the URL already downloads the RSS feed; that content is now reused when the feed is saved, so adding a feed costs one request instead of two.
Feeds that publish the whole article are now used directly. When a feed carries the complete text (RSS content:encoded, Atom content), MeigRSS stores it at import time. The article opens instantly, no request ever reaches the origin site, and it works even on feeds with full text download turned off.
Manual full text editing. Expanded articles have a new Edit full text button that turns the article area into an editable box, with Save and Cancel. It is always available - including on feeds with scraping disabled and on articles with no text at all. Closing the article discards unsaved changes. Saving a non-empty text stops automatic scraping for that article, so what you wrote is never silently overwritten; saving an empty text clears the field and lets scraping take over again.
AI summaries no longer depend on the scraper. The Generate AI summary button now only requires the article to have a full text, whatever its origin. Previously it stayed greyed out on any feed with full text download disabled, even when the text was there.
Show full article is no longer disabled on feeds with scraping turned off.
Import a folder of .eml files in one go. A new Folder mode collects every EML in the selected folder and ignores everything else. All the newsletters are imported under the same feed in a single operation, with titles taken from the message subject and falling back to the file name.
Result summary. After the import you get counts for newsletters imported and skipped, split by reason: already in the archive, no HTML content, or not recognised as a valid email.
Limits per upload: 500 files, 5 MB per file, 100 MB in total.
Newsletters in non-UTF-8 encodings are no longer corrupted. EML files are now uploaded as raw bytes instead of text decoded by the browser, so messages whose MIME headers declare ISO-8859-1 or a similar charset keep their accented characters. This affected the single-file import too, and it was permanent: the corrupted text went straight into the database. Newsletters imported with earlier versions are not repaired automatically — re-import them to fix them.
Large backups can be restored again. The feed import endpoint accepted at most 2 MB, which a JSON export containing many archived newsletters exceeds easily. The limit is now 256 MB. Since exporting has no limit of its own, a large archive could previously be exported but never imported back.
Polling timers are cleared on navigation. Leaving and re-entering the article list left the previous update timer running, so timers accumulated over a session and kept calling the API in parallel.