DiscordChatExporter: token choices, eight install routes, and community packages that may lag
Saves Discord chat logs to a file
At a glance
- What is it?
- Tyrrrz's DiscordChatExporter writes any channel you can reach to HTML, TXT, CSV or JSON, from a desktop app, a terminal app or a Docker image. What the download page does not line up: the package manager coverage is uneven, the community packages may lag the releases, and the account you run it with decides whether you get an archive or a ban.
- Who is it for?
- Reach for it when you own the account, you can justify which token to use, and you want a file you keep rather than a service that keeps the data. Point a bot at the channels whenever the archive matters, because the author's warning about user automation is the one risk here that no setting can remove.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 6 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- Tyrrrz/DiscordChatExporter12,379 ★ · +330
| Repository | 2026-09-22 | 2026-11-13 |
|---|---|---|
| Tyrrrz/DiscordChatExporter | 12k | 12.4k |
330 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
Exporting runs on your token, and a user token can cost you the account
Every export starts with authentication, and the tool accepts either a user token or a bot token. That one design choice decides both what you can reach and what can happen to you. A bot reads only the channels it has been added to. A user token reads everything that account can open, and the README puts a warning directly above the download section: automating user accounts is against Discord TOS and may result in you getting banned, and if possible you should use a bot instead. Nothing here reaches past the token either. The practical ceiling of this tool is exactly what the token in your hands is allowed to see.
Eight install routes cover two apps unevenly
The download list is not symmetric, which matters the moment you script an install. The GUI ships as DiscordChatExporter.*.zip from the stable release page and from CI builds, and it appears in Scoop, WinGet, AUR and Nix. The CLI ships as DiscordChatExporter.Cli.*.zip and appears in Docker, WinGet, AUR and Nix. Scoop covers the GUI with no CLI entry, and the Docker image covers the CLI with no GUI counterpart. Only the release archives and the Docker image come from this repository. Every package manager line is marked community-maintained:
scoop install extras/discordchatexporter
winget install Tyrrrz.DiscordChatExporter.GUI
yay -S discord-chat-exporter-gui
nix-shell -p discordchatexporter-desktop
winget install Tyrrrz.DiscordChatExporter.CLI
yay -S discord-chat-exporter-cli
nix-shell -p discordchatexporter-cli
docker pull tyrrrz/discordchatexporterIf you are unsure which archive matches your machine, the page points you at a site that reports OS and CPU architecture.
Community packages lag, and 2.48 sorts before 2.47.3 as text
Every package manager entry carries the same caveat: those packages are published independently from this repository and may not always be up to date with the latest release. That turns every manager install into a staleness question you answer yourself. The feed shows 2.48 published on 2026-08-27, following 2.47.3 from 2026-06-26 and 2.47.2 from 2026-06-04. Parse the version out of the archive you actually downloaded instead of trusting the manager.
The macOS app will not launch until you clear the quarantine attribute
macOS gets one dedicated instruction, and it is a prerequisite rather than a nicety. Launching the GUI build may fail until the downloaded file is removed from quarantine, which the README does with a single command:
xattr -rd com.apple.quarantine DiscordChatExporter.appSo the Mac sequence is: fetch the zip, run that command if the app will not open, then start the app. If the window never opens, the quarantine attribute is the first thing to check.
Using the source is framed as agreeing to four statements about the war in Ukraine
The page opens with a terms of use block that is not a license note but a condition attached to the code. Using the project or its source, for any purpose and in any shape or form, counts as implicit agreement with four statements: condemning Russia and its military aggression against Ukraine, recognizing Russia as an occupant that unlawfully invaded a sovereign state, supporting Ukraine's territorial integrity including claims over temporarily occupied Crimea and Donbas, and rejecting false narratives perpetuated by Russian state propaganda. A link to the author's own rationale document sits on the heading. For adoption this is concrete rather than abstract: an organization unable to accept those statements cannot ship this tool internally, and that constraint travels with the source through every install route. The code license itself is MIT and sits separately from this.
Four output formats, but the reading tools are separate projects
Exports come out as HTML with dark or light styling, plain TXT, CSV, or JSON, and they are self-contained exports that can be viewed offline. The two projects named next to it both consume what it produces rather than replacing it: Chat Analytics is presented as a solution for analyzing chat patterns of Discord users using exports produced by DiscordChatExporter, and DiscordChatExporter-frontend is described as a viewer for those same exports. That shapes how you should plan the work. The exporter is the capture step, and everything you do afterwards is a second project with its own updates and its own format expectations. Picking JSON or CSV today is really a bet on which of those downstream tools you intend to point at the file later, so decide the reader before you pick the format.
Partitioning, date ranges and filtering are named, but no flag is written down
The export options are named as file partitioning, date ranges, message filtering, and other export options. The names are there; the syntax is not. No switch, no argument list and no configuration file appear on this page, so anyone automating an export has to read the application's own help output, or dig into the DiscordChatExporter.Cli and DiscordChatExporter.Core projects, to learn how the options are passed. The same gap covers credentials: the tool takes a user token or a bot token, and nothing here says where the token should come from or how the app receives it. For a one-off archive that costs you a single manual run and a saved command. For a recurring job it means the command line has to be discovered before anything can be scheduled.
The branch moved yesterday while the newest tag is 2.48 from August
The prime branch received a push on 2026-11-01, and the release feed shows 2.48 dated 2026-08-27 as the newest tag. Those two dates together are the honest picture: development is current, the packaged release is not, so anything committed since the tag exists only on the branch and in CI artifacts. The layout shows an ordinary multi-project build, with DiscordChatExporter.Core holding the shared code, DiscordChatExporter.Gui and DiscordChatExporter.Cli wrapping it, DiscordChatExporter.Cli.Tests beside them, and DiscordChatExporter.slnx tying things together alongside Directory.Build.props, Directory.Packages.props, NuGet.config and global.json. Test coverage is tracked through Codecov. Before you plan a maintenance schedule around this tool, decide whether you want the tagged archive or the branch tip, and remember they are not the same code.
Editorial conclusion
Reach for it when you own the account, you can justify which token to use, and you want a file you keep rather than a service that keeps the data. Point a bot at the channels whenever the archive matters, because the author's warning about user automation is the one risk here that no setting can remove. Before you rely on a version, check whether your package manager is serving the tagged release or something older, and strip the quarantine attribute before you blame macOS for a GUI that will not open.
Frequently asked questions
How does DiscordChatExporter work?
It authenticates with either a user token or a bot token and writes message history from any Discord channel to a file. Direct messages, group messages and server channels are covered, and output can be HTML with dark or light styling, TXT, CSV or JSON.
Is Discord chat exporter safe?
Safety depends on which credential you use. The README warns that automating user accounts is against Discord TOS and may result in a ban, and advises using a bot to export from channels a bot can access.
how to install discordchatexporter
For the GUI, grab DiscordChatExporter.*.zip from the stable release page or from CI builds, or install via scoop install extras/discordchatexporter, winget install Tyrrrz.DiscordChatExporter.GUI, yay -S discord-chat-exporter-gui or nix-shell -p discordchatexporter-desktop. All four manager entries are community-maintained.
how to use discordchatexporter cli
The CLI ships as DiscordChatExporter.Cli.*.zip from the release page, as a Docker image pulled with docker pull tyrrrz/discordchatexporter, or through winget install Tyrrrz.DiscordChatExporter.CLI, yay -S discord-chat-exporter-cli or nix-shell -p discordchatexporter-cli. The page names partitioning, date ranges and message filtering as options but does not print the switches.
how to use discordchatexporter on mac
Download the GUI build and remove the quarantine attribute before the first launch, using xattr -rd com.apple.quarantine DiscordChatExporter.app in the terminal. The README gives no macOS-specific package; it only says the command may be needed before the GUI will launch.
discordchatexporter alternative
The projects named alongside it extend an export rather than replace one: Chat Analytics analyzes chat patterns using exports produced by DiscordChatExporter, and DiscordChatExporter-frontend views those exports. Both sit downstream of the same capture step.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/tyrrrz-discordchatexporter)Star history chart for your README
[](https://hysenlabs.com/projects/tyrrrz-discordchatexporter)Was this useful?