Do you sometimes see a great post on Twitter, but for whatever reason, your feed refreshes before you finish reading it or click on it?
X Banger Rescue, developed by John Loeber, is here to save the day.
This is a Chrome Extension that will capture your latest 100 feed refreshes. You can click on the extension at any time to view the dataset and interact with the tweets.
This means that if you ever see a great tweet and your feed refreshes too quickly, you can just open up the extension and find it.
To the Twitter team: please make this a native feature on Twitter. There is no browser extension solution possible for mobile. (At least not on iPhone.)
- Version: 1.1.0
- Chrome Web Store Link
This Chrome Extension uses only vanilla JavaScript and has no third-party dependencies. Not a single package or import.
This extension itself does not send any of your data anywhere. It's possible that your extension's data is synced with your Google Chrome Browser profile, but that's something you would've had to enable.
This Chrome extension captures X GraphQL responses and stores the latest 100 JSON payloads that actually contain tweet-like data in chrome.storage.local, trimming older captures sooner if saved payloads exceed 50 MB.
It matches response URLs like:
https://x.com/i/api/graphql/<variable>/HomeLatestTimeline?...
and also other operations such as:
https://x.com/i/api/graphql/<variable>/UserTweets?...
Clicking the extension opens a separate HTML window that groups recovered tweet cards by capture time.
If you don't trust the Chrome Web Store (admittedly you probably shouldn't), you can inspect the source code of this repo, and then just install it from the source:
- Clone this repository to
/path/to/rescue-bangers. - Open
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select this folder:
/path/to/rescue-bangers.
content-script.jsinjectspage-hook.jsintox.compages at document start.page-hook.jspatchesfetchandXMLHttpRequestin the page context so it can read matching JSON response bodies for.../graphql/<hash>/<operation>.- Captured payloads are forwarded to
background.js, which keeps only the latest 100 tweet-like responses. - The extension keeps only the latest 100 captures, with a 50 MB app-level storage cap.
- The viewer extracts tweets from timeline-style GraphQL payloads and groups them by when the response was captured.
- The
<variable>path segment betweengraphql/and the operation name is treated as dynamic and is not hard-coded. - This implementation captures responses, not requests.
- Captures home timeline (both For You and Following)
- Captures lists
- Captures feeds on individual tweets
- Captures feeds on profiles
- Chronology matches your usage
- Deduplicates tweets for the most recent
Does this suck a little? Yes. But is it good enough? Also yes.
- Doesn't capture pinned tweets
- Doesn't point out that Ads are Ads (or have a filter for it. Sometimes you want to see the ad?)
- Doesn't handle translations
- Doesn't strip the "RT @..." for retweets
Want to help out? Feel free to file issues if you run into bugs, or PRs if you have any ideas for improving the application. I do not receive GitHub notifications, so send an email to contact@johnloeber.com if there's something I should look at.
X, Twitter, Post, Tweet, Refresh, Timeline, Feed, Recover