The most feature rich Discord TUI client.
See the code
Endcord is a third-party feature rich Discord client, running entirely in terminal (or in its own GTK3 window).
It is built with Python (this doesn't mean its slow) and ncurses library, to deliver lightweight yet feature rich experience.
More screenshots.
Official endcord will always stay purely human project.
Endcord is source-available licensed, and thus not open source, more details here. You are not allowed to create public fork that modifies the code.
Any third party endcord forks may add features that can lead to account ban, cause instability, contain outdated or even malicious code, so it is strongly recommended to avoid them.
s/old/new replacement with extended regex:emoji_name: and view them in media player@username, @role, #channel_name[!WARNING] Using third-party client is against Discord's Terms of Service and may cause your account to be banned!
Use endcord at your own risk!
For more info see FAQ.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/sparklost/endcord/main/tools/install.sh)"--custom-python --nuitka build script options with clang, meaning they are maximally optimized.yay -S endcord-installer - same install script as explained aboveyay -S endcord - full version with media support, larger executableyay -S endcord-lite - lite version without voice calls and media supportyay -S endcord-gui - "gui" windowed version using GTK3-git versions will build from source, with latest changessudo cp dist/endcord /usr/local/bin/
Note: installations from these sources are coming directly from endcord developer and will always be up-to-date../dist/endcord.exeInstall WezTerm (recommended), windows terminal, cmder, or any other modern terminal. And run exe from there. If built with windowed mode, terminal is not required to use endcord.
WezTerm proved to introduce the least drawing issues.
Cmder settings: "Mouse" > check "Send mouse events to console" and "Mark/Copy" > uncheck "Intelligent mode", and set "Main console font" and "Alternative font" to same monospace font.
Emoji are known to work only with WezTerm but many will fail to draw and mess-up the UI, so its best to set emoji_as_text = True in config.
Optional dependency for spellchecking: aspell. It is expected to be installed in C:\Program Files (x86)\. Alongside with base aspell, dictionary must be installed, even en_US.
./dist/.bash -c "$(curl -fsSL https://raw.githubusercontent.com/sparklost/endcord/main/tools/install.sh)"aspell. Can be installed with: brew aspell../dist/endcordxclip - Clipboard support on X11wl-clipboard - Clipboard support on Waylandyazi / zenity / kdialog - File dialog when uploadingaspell - Spellchecking (and aspell-en dictionary)git - Install and update extensions from other sources than githubyt-dlp - youtube supportmpv - Play youtube videos in native player (non-ascii)libsecret - Store token in system keyring (secret service provider is also required (eg. gnome-keyring, KWallet, KeePassXC), with dbus as dependency)libappindicator-gtk3 - Tray support under wayland, for windowed mode only.imagemagick - To make notification images round; only needed for endcord-lite.source-highlight or python-pygments - Code block syntax highlighting (Alternatively use this extension).rnnoise - Noise suppression in voice calls (or use --bundle-rnnoise build.py arg)libopus - Needed for voice calls only if endcord is built without bundled libopusGTK3 - Only required for endcord-gui (windowed mode), not needed for prebuilt binaries only on windowsTo see all build script options, run: python build.py -h.
To build endcord-lite, add --level=LITE flag. No voice calls and terminal media, slightly less RAM usage, smaller executable, faster startup.
To build into directory, not as a single executable, add --onedir flag. Will speed up startup.
To build with Nuitka, add --nuitka flag. More optimized, smaller executable, long compile time. See Nuitka for more info.
If compiler is not available, or built binary is failing, try building with --nocython, which will produce slightly less optimized binaries.
To toggle windowed mode run: python build.py --toggle-windowed.
git clone https://github.com/sparklost/endcord.git or download zip and unzip itcd endcorduv remove orjsonpython build.pyTo enable building with Nuitka, add --nuitka flag (takes a long time).
Nuitka built binaries are much more optimized and can play videos at higher framerate.
Optionally, add --clang flag to tell nuitka to compile using llvm, which might run even faster.
Nuitka requirements:
patchelf packageWhen using --custom-python build script argument, build script will first download more recent ncurses version and build it.
Then download latest supported python version and build it linked to this ncurses library, using custom compiler arguments, some extension modules will be disabled, to reduce final binary size.
Everything will be compiled with clang if --clang flag is used.
Finally nuitka will bundle this custom built Python version in the resulting binary.
Built endcord binary will be few MB smaller and run a little faster.
Endcord does work with free-threaded python (3.14 only), and it significantly improves media player performance with large video resolutions, by allowing decoding, video and sound playing to be run in separate CPU threads, completely removing crackling sound when playing on high "terminal resolution".
This comes at the cost of much larger binary, increased CPU and RAM usage.
Currently nuitka doesn't support free-threaded mode yet. Pyinstaller (without --nuitka flag) does build it successfully.
To make it use freethreaded python run python build.py (not uv!) with --freethreaded argument.
If you want to build without any rust dependencies, just run uv remove orjson for the first time, before running anything else.
This will make it fallback to standard json (more CPU usage by game detection).
Optionally it can use ujson, run uv add ujson to install it.
Go to TODO.
Following features have significant risk of triggering discords spam filter, and may cause account to be limited or even banned:
Sending friend request, opening new DM, creating new thread, editing profile, anything payment related.
Therefore, they will NOT be implemented in endcord.
1,038 followers · starred Dec 2025
466 followers · starred Jan 2026
97 followers · starred Mar 2026
33 followers · starred Feb 2026
The most feature rich Discord TUI client.
See the code
Endcord is a third-party feature rich Discord client, running entirely in terminal (or in its own GTK3 window).
It is built with Python (this doesn't mean its slow) and ncurses library, to deliver lightweight yet feature rich experience.
More screenshots.
Official endcord will always stay purely human project.
Endcord is source-available licensed, and thus not open source, more details here. You are not allowed to create public fork that modifies the code.
Any third party endcord forks may add features that can lead to account ban, cause instability, contain outdated or even malicious code, so it is strongly recommended to avoid them.
s/old/new replacement with extended regex:emoji_name: and view them in media player@username, @role, #channel_name[!WARNING] Using third-party client is against Discord's Terms of Service and may cause your account to be banned!
Use endcord at your own risk!
For more info see FAQ.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/sparklost/endcord/main/tools/install.sh)"--custom-python --nuitka build script options with clang, meaning they are maximally optimized.yay -S endcord-installer - same install script as explained aboveyay -S endcord - full version with media support, larger executableyay -S endcord-lite - lite version without voice calls and media supportyay -S endcord-gui - "gui" windowed version using GTK3-git versions will build from source, with latest changessudo cp dist/endcord /usr/local/bin/
Note: installations from these sources are coming directly from endcord developer and will always be up-to-date../dist/endcord.exeInstall WezTerm (recommended), windows terminal, cmder, or any other modern terminal. And run exe from there. If built with windowed mode, terminal is not required to use endcord.
WezTerm proved to introduce the least drawing issues.
Cmder settings: "Mouse" > check "Send mouse events to console" and "Mark/Copy" > uncheck "Intelligent mode", and set "Main console font" and "Alternative font" to same monospace font.
Emoji are known to work only with WezTerm but many will fail to draw and mess-up the UI, so its best to set emoji_as_text = True in config.
Optional dependency for spellchecking: aspell. It is expected to be installed in C:\Program Files (x86)\. Alongside with base aspell, dictionary must be installed, even en_US.
./dist/.bash -c "$(curl -fsSL https://raw.githubusercontent.com/sparklost/endcord/main/tools/install.sh)"aspell. Can be installed with: brew aspell../dist/endcordxclip - Clipboard support on X11wl-clipboard - Clipboard support on Waylandyazi / zenity / kdialog - File dialog when uploadingaspell - Spellchecking (and aspell-en dictionary)git - Install and update extensions from other sources than githubyt-dlp - youtube supportmpv - Play youtube videos in native player (non-ascii)libsecret - Store token in system keyring (secret service provider is also required (eg. gnome-keyring, KWallet, KeePassXC), with dbus as dependency)libappindicator-gtk3 - Tray support under wayland, for windowed mode only.imagemagick - To make notification images round; only needed for endcord-lite.source-highlight or python-pygments - Code block syntax highlighting (Alternatively use this extension).rnnoise - Noise suppression in voice calls (or use --bundle-rnnoise build.py arg)libopus - Needed for voice calls only if endcord is built without bundled libopusGTK3 - Only required for endcord-gui (windowed mode), not needed for prebuilt binaries only on windowsTo see all build script options, run: python build.py -h.
To build endcord-lite, add --level=LITE flag. No voice calls and terminal media, slightly less RAM usage, smaller executable, faster startup.
To build into directory, not as a single executable, add --onedir flag. Will speed up startup.
To build with Nuitka, add --nuitka flag. More optimized, smaller executable, long compile time. See Nuitka for more info.
If compiler is not available, or built binary is failing, try building with --nocython, which will produce slightly less optimized binaries.
To toggle windowed mode run: python build.py --toggle-windowed.
git clone https://github.com/sparklost/endcord.git or download zip and unzip itcd endcorduv remove orjsonpython build.pyTo enable building with Nuitka, add --nuitka flag (takes a long time).
Nuitka built binaries are much more optimized and can play videos at higher framerate.
Optionally, add --clang flag to tell nuitka to compile using llvm, which might run even faster.
Nuitka requirements:
patchelf packageWhen using --custom-python build script argument, build script will first download more recent ncurses version and build it.
Then download latest supported python version and build it linked to this ncurses library, using custom compiler arguments, some extension modules will be disabled, to reduce final binary size.
Everything will be compiled with clang if --clang flag is used.
Finally nuitka will bundle this custom built Python version in the resulting binary.
Built endcord binary will be few MB smaller and run a little faster.
Endcord does work with free-threaded python (3.14 only), and it significantly improves media player performance with large video resolutions, by allowing decoding, video and sound playing to be run in separate CPU threads, completely removing crackling sound when playing on high "terminal resolution".
This comes at the cost of much larger binary, increased CPU and RAM usage.
Currently nuitka doesn't support free-threaded mode yet. Pyinstaller (without --nuitka flag) does build it successfully.
To make it use freethreaded python run python build.py (not uv!) with --freethreaded argument.
If you want to build without any rust dependencies, just run uv remove orjson for the first time, before running anything else.
This will make it fallback to standard json (more CPU usage by game detection).
Optionally it can use ujson, run uv add ujson to install it.
Go to TODO.
Following features have significant risk of triggering discords spam filter, and may cause account to be limited or even banned:
Sending friend request, opening new DM, creating new thread, editing profile, anything payment related.
Therefore, they will NOT be implemented in endcord.
1,038 followers · starred Dec 2025
466 followers · starred Jan 2026
97 followers · starred Mar 2026
33 followers · starred Feb 2026