Skip to content

Vim-native Discord TUI for terminal enthusiasts. Instant navigation (jk/gG), smart follow mode, infinite history scrolling, and image support. Built in Rust with ratatui with no flicker, no bloat. Spiritual successor to Discordo, rewritten for speed and stability.

License

Notifications You must be signed in to change notification settings

linuxmobile/oxicord

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

oxicordbanner

Oxicord is a high-performance, memory-safe Discord TUI client written in Rust. It is a spiritual successor to Discordo, rewritten from scratch to leverage the performance and safety guarantees of Rust and the Ratatui ecosystem.

Designed for power users on Linux who demand speed, minimal resource usage, and terminal aesthetics, Oxicord aims to be the definitive CLI experience for Discord.

⚠️ WARNING ⚠️

Using unofficial clients is against Discord's Terms of Service. Use this client at your own risk. Never share your token with anyone.

Why Oxicord?

Oxicord distinguishes itself through a commitment to modern engineering principles and user experience:

  • Uncompromising Performance: Built with Rust, Oxicord delivers instant startup times and negligible memory footprint compared to Electron or Go-based alternatives.
  • Clean Architecture: The codebase follows strict Clean Architecture principles (Domain, Application, Infrastructure), making it robust, testable, and approachable for contributors.
  • TUI Fidelity: Utilizing ratatui and tachyonfx, Oxicord provides a fluid, glitch-free interface with full mouse support and responsive layouts.

Features

Oxicord implements a focused set of "real" features designed for daily drivers, prioritizing stability over bloat:

final_showcase
small showcase

Core Experience

  • Vim-like Navigation: Native j/k navigation, g/G scrolling, and intuitive focus management.
  • Infinite Scrolling: Seamless history loading. Scroll up, and history fetches automatically without manual "load more" buttons.
  • Smart "Follow" Mode: The view automatically snaps to new messages but respects your position when reading history.

Visual Precision

  • Rich Text Rendering: Full Markdown support with syntax highlighting (via syntect) for code blocks.
  • Precision Timestamps: 6-character timestamps (e.g., 14:05:32) with automatic Local Timezone conversion—no more UTC mental math.
  • Visual Indicators:
    • Unread Markers: Bold text and bullet indicators () for unread channels and guilds.
    • Typing Indicators: Real-time feedback when others are typing.
    • Full-Width Selection: Messages are selected across the full width of the pane for superior readability.

System Integration

  • Built-in File Explorer: Integrated TUI file picker for attaching files without leaving the terminal.
  • Secure Authentication: Options for ephemeral Token login or secure storage using system keyrings (libsecret/keyring).
  • Clipboard Integration: One-key copying of message content or IDs to your system clipboard.

Fair Play Comparison

We stand on the shoulders of giants. Here is how Oxicord compares to existing terminal clients:

  • Endcord (Python): Endcord is a feature beast (Voice, Plugins, Image previews). However, as a Python application, it carries the runtime overhead of an interpreted language. Oxicord (Rust) prioritizes raw performance, memory safety, and type-safe reliability, aiming for a "crash-proof" experience rather than feature parity at the cost of stability.
  • Discordo (Go): The original inspiration. While Discordo pioneered this TUI layout, it uses the tview library and a flatter Go architecture. Oxicord moves to ratatui for superior rendering control (no artifacts/flickering) and adopts a strict "Clean Architecture" to prevent the "spaghetti code" issues common in long-lived TUI projects.
  • Rivet (Rust): A fellow Rust client. While Rivet offers a solid experience, Oxicord specifically targets the "Power User" workflow with deeper Vim integration, specific optimizations for tiling window managers, and a visual style that favors information density (6-char timestamps, full selection) over standard layouts.

Installation & Configuration

Nix

nix run github:linuxmobile/oxicord

For development:

nix develop

Building from Source

Prerequisites

Ensure you have the latest stable Rust toolchain installed. You will also need the following system dependencies:

  • Debian/Ubuntu:
    sudo apt install pkg-config libdbus-1-dev libchafa-dev libglib2.0-dev mold clang
  • Fedora:
    sudo dnf install pkgconf-pkg-config dbus-devel chafa-devel glib2-devel mold clang
  • Arch Linux:
    sudo pacman -S pkgconf chafa dbus glib2 mold clang
  • macOS:
    brew install chafa

Build Steps

git clone https://github.com/linuxmobile/oxicord
cd oxicord
cargo build --release
./target/release/oxicord

Configuration

Oxicord is currently configured via command-line arguments. Full support for a persistent config.toml file adhering to the XDG Base Directory specification is in development:

  • Linux: ~/.config/oxicord/config.toml (Planned)

Authentication

Oxicord requires a Discord user token to function.

Obtaining the Token

  1. Log in to Discord Web in your browser.
  2. Open Developer Tools (F12 or Ctrl+Shift+I) and go to the Network tab.
  3. In the filter box, type /api.
  4. Click on any channel to trigger a network request.
  5. Select a request (e.g., messages, typing) and scroll to Request Headers.
  6. Copy the value of the authorization header.

Usage

1. Secure Keyring (Recommended)

Run Oxicord without arguments:

oxicord

Paste your token when prompted. Oxicord will verify and securely store it in your system's keyring (using libsecret on Linux, Keychain on macOS) for automatic future logins.

2. Environment Variable

For temporary sessions, testing, or scripts, you can provide the token via the environment. This takes precedence over the keyring and is not saved.

export OXICORD_TOKEN="your_token_here"
oxicord

Roadmap

Core Features & Stability

  • Infinite scrolling / Auto-loading history
  • Configurable keybindings
  • Edit messages support
  • Smart selection behavior on new messages
  • Auto-focus message pane on channel selection
  • Streamlined authentication (Token/Libsecret only)
  • Connection status indicator fixes
  • Performance optimizations (reduce CPU spikes)
  • Forum channel support

Visuals & UI

  • Rich Markdown rendering in message pane
  • Message reply previews
  • Animated loading screen (TachyonFX)
  • Unread indicators for guilds and channels
  • Compact file picker UI
  • Image previews (Ratatui-image: Sixel/Kitty/iTerm2)
  • Guild Folders support
  • Forum Channel support
  • Mention indicators for servers/channels and DMs
  • UI Animations (Guild tree, Typing indicators via TachyonFX)
  • Image modal viewer ('o' binding)

System & Documentation

  • Native file explorer for attachments
  • User mention support (@)
  • Comprehensive documentation update
  • Desktop Notifications
  • XDG-compliant configuration support (~/.config/oxicord/config.toml)

What's Next

  • Navigation: Ctrl+K fuzzy finder for channels and DM users.
  • Configuration: Full config.toml support for custom keybinds and behavior.
  • Privacy: Option to hide messages from blocked users.
  • Media Interaction:
    • 'Y' keybinding to copy images to clipboard.
    • 'o' keybinding to open images in a High-Res modal.
  • Bot Support: Native support for slash commands and bot interactions.
  • Performance: Targeting a further +20% improvement in API response parsing.

Credits

Oxicord is a fork and full rewrite of Discordo. We express our sincere gratitude to the original maintainers for their work, which served as the foundation and inspiration for this project.

About

Vim-native Discord TUI for terminal enthusiasts. Instant navigation (jk/gG), smart follow mode, infinite history scrolling, and image support. Built in Rust with ratatui with no flicker, no bloat. Spiritual successor to Discordo, rewritten for speed and stability.

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • Rust 99.7%
  • Nix 0.3%