Save, search and export the Discord chats you can already see.
No token. No self-bot. Local only.
Install · How it works · Privacy · Develop · Privacy policy
Scrollback is a Chrome extension that keeps a copy of every Discord message your browser loads. Copy a whole chat in one click, export it to five formats, or let it scroll back through 7 days, 90 days or the full history for you.
It never touches your login token and never calls Discord's API. It reads only the responses the Discord web app already downloads, so it acts the same as you scrolling by hand.
Most Discord exporters ask for your login token and call Discord's API from a separate program. Discord treats that as a self-bot, and accounts get banned for it. Scrollback takes a different route:
| Token-based exporters | Scrollback | |
|---|---|---|
| Needs your login token | Yes | No |
| Who talks to Discord | The exporter, directly | Your normal Discord tab |
| Speed of history loads | As fast as the API allows | A person scrolling |
| Works offline on saved chats | No | Yes, from the library |
History jobs still make Discord's client load pages, the same as scrolling by hand. For very large servers, set the pace to Gentle in the library settings.
![]() |
![]() |
![]() |
![]() |
| One-click copy | The whole chat on your clipboard, ready for notes or an AI assistant |
| Five export formats | Text, Markdown, HTML (inline images, dark mode), JSON, CSV (formula-safe) |
| History jobs | Load the last 7, 30 or 90 days or everything. Progress shows on the page, with a Stop button |
| Gap-aware | Remembers what it already saved with no gaps. Repeat runs are instant; after new messages it loads only the gap |
| Whole server | Export every text channel in a server into one file |
| Full context | Replies, edits, embeds, stickers, reactions and who reacted |
| Media | Save a chat's images and videos into Downloads/Scrollback/<chat>/ |
| Library | Browse and search every saved chat, export by date range, delete one or all |
| Backup | Back up everything to one JSON file and restore it on another machine |
Chrome Web Store: in review. The link will go here once it is approved.
From source:
- Download this repo (Code → Download ZIP) and unzip it, or
git clone https://github.com/crrapi/scrollback. - Open
chrome://extensionsand turn on Developer mode. - Click Load unpacked and pick the folder.
- Reload any Discord tab you already had open.
Works on discord.com, ptb.discord.com and canary.discord.com in Chrome 111+ and other Chromium browsers. It does not work in the Discord desktop app.
- Open a channel or DM on discord.com and scroll as usual. Scrollback saves every message Discord loads.
- Click the toolbar icon. Copy all or Download exports what is saved.
- Click 7d, 30d, 90d or All to have Scrollback scroll back for you. The file downloads when the job ends. If that range is already saved, it copies to your clipboard instantly instead.
- Open Library for every saved chat, search, date ranges, backups and settings.
flowchart TB
D[Discord web app] -- "fetch / XHR responses<br/>it already requested" --> T["tap.js<br/>(page world)"]
T -- postMessage --> C["content.js<br/>(isolated world)"]
C -- validated payloads --> B["background.js<br/>(service worker)"]
B --> DB[(IndexedDB)]
DB --> P[Popup]
DB --> L[Library page]
P & L --> F[TXT · MD · HTML · JSON · CSV]
src/tap.jsruns in the page and wrapsfetchandXMLHttpRequestread-only. It clones only the response bodies of message, search and reaction-list endpoints. It never looks at requests or headers.src/content.jsrelays captures, reports the channel and server name, and runs history jobs by scrolling the real message list. Server jobs click through the sidebar one channel at a time.- Every message page Discord loads is gap-free on its own, so the tap also reports the id range it covers. These ranges merge into spans per channel. A job checks whether one span runs from the newest message back past its cutoff. If it does, the export is instant. If not, it scrolls until the new span meets the saved one.
src/background.jsvalidates and trims every message before it hits storage, renders exports, and saves media only when you ask.src/db.jsis the IndexedDB store, shared by the service worker and the library page.src/format.jshas the snowflake math and all five exporters.
- No server, no account, no analytics, no remote code.
- No token, cookies or request headers are read.
- No network requests of its own. Media you choose to save downloads from Discord's own CDN.
- Data stays in your browser profile until you delete it. Removing the extension deletes it too.
Full policy: crrapi.xyz/scrollback/privacy. Found a hole? See SECURITY.md.
npm install
npx playwright install chromiumnpm testnpm run test:e2enpm run buildnpm test runs the exporter unit tests. npm run test:e2e loads the extension in Chromium against a fake Discord client and checks capture, 30-day and full-history jobs, the server job, media saving, v1 migration, backup and restore, the library and the popup. npm run build writes the store zip and an upload kit to dist/. npm run shots regenerates the store screenshots from the real UI.
When you bump the version, change manifest.json, package.json and VERSION in src/format.js together. See CONTRIBUTING.md.
- Messages that arrive live through Discord's gateway are saved the next time Discord fetches that chat.
- Edits and deletions after a message was saved show up only when Discord loads it again.
- Discord attachment links expire after about 24 hours, so save media soon after loading a chat.
Only export chats you have the right to keep. Respect the people in them, the rules of each server, and Discord's Terms of Service. Scrollback is not affiliated with or endorsed by Discord Inc.




