Skip to content

About

Save, search and export the Discord chats you can already see. Chrome extension, local only, no token, no extra API calls.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Scrollback: export your Discord chats without your token

Scrollback

Save, search and export the Discord chats you can already see.
No token. No self-bot. Local only.

tests Manifest V3 zero runtime dependencies MIT license

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.

Why no token?

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.

Popup with copy, download and history buttons On-page progress panel while loading history
Library page listing saved chats with search HTML export with replies, reactions and images

Features

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

Install

Chrome Web Store: in review. The link will go here once it is approved.

From source:

  1. Download this repo (Code → Download ZIP) and unzip it, or git clone https://github.com/crrapi/scrollback.
  2. Open chrome://extensions and turn on Developer mode.
  3. Click Load unpacked and pick the folder.
  4. 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.

Use it

  1. Open a channel or DM on discord.com and scroll as usual. Scrollback saves every message Discord loads.
  2. Click the toolbar icon. Copy all or Download exports what is saved.
  3. 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.
  4. Open Library for every saved chat, search, date ranges, backups and settings.

How it works

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]
Loading
  • src/tap.js runs in the page and wraps fetch and XMLHttpRequest read-only. It clones only the response bodies of message, search and reaction-list endpoints. It never looks at requests or headers.
  • src/content.js relays 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.js validates and trims every message before it hits storage, renders exports, and saves media only when you ask.
  • src/db.js is the IndexedDB store, shared by the service worker and the library page.
  • src/format.js has the snowflake math and all five exporters.

Privacy

  • 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.

Develop

npm install
npx playwright install chromium
npm test
npm run test:e2e
npm run build

npm 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.

Known limits

  • 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.

Disclaimer

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.

License

MIT

About

Save, search and export the Discord chats you can already see. Chrome extension, local only, no token, no extra API calls.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages