@chojs23/concord 2.5.0 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,7 +2,47 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [2.5.0] - 2026-08-02
5
+ ## [2.5.2] - 2026-08-04
6
+
7
+ ### Bug Fixes
8
+
9
+ - _(tui)_ Align inbox, thread, and shortcut behavior by @chojs23
10
+ - _(release)_ Scope Homebrew audio dependencies to Linux (#297) in [#297](https://github.com/chojs23/concord/pull/297) by @chojs23
11
+
12
+ ### Refactor
13
+
14
+ - _(tui)_ Unify popup input and shortcut routing by @chojs23
15
+
16
+ ## [2.5.1] - 2026-08-02
17
+
18
+ ### Bug Fixes
19
+
20
+ - _(stream)_ Fix Windows broadcasts stopping when captured content outgrows the D3D11 frame pool by @chojs23
21
+ - Unify stream toggle command naming by @chojs23
22
+ - _(test)_ Fix no-default-features build by @chojs23
23
+ - _(stream)_ Fix stream freezes caused by backward audio RTP timestamps (#289) in [#289](https://github.com/chojs23/concord/pull/289) by @chojs23
24
+ - _(nix)_ Patch PipeWire bindgen fallbacks for immutable vendor sources (#292) in [#292](https://github.com/chojs23/concord/pull/292) by @chojs23
25
+ - Filter muted channel in inbox (#293) in [#293](https://github.com/chojs23/concord/pull/293) by @chojs23
26
+
27
+ ### Documentation
28
+
29
+ - Update readme by @chojs23
30
+ - Add gentoo installation instructions to README (#286) in [#286](https://github.com/chojs23/concord/pull/286) by @darwincereska
31
+ - Update README by @chojs23
32
+
33
+ ### Features
34
+
35
+ - _(voice)_ Add selectable input and output audio sources (#287) in [#287](https://github.com/chojs23/concord/pull/287) by @chojs23
36
+
37
+ ### Miscellaneous Tasks
38
+
39
+ - Update descriptions and docs by @chojs23
40
+
41
+ ### New Contributors
42
+
43
+ - @darwincereska made their first contribution in [#286](https://github.com/chojs23/concord/pull/286)
44
+
45
+ ## [2.5.0] - 2026-08-01
6
46
 
7
47
  ### Bug Fixes
8
48
 
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <img width="1613" height="848" alt="concord - a feature-rich TUI client for
4
4
  Discord" src="./docs/example.png" />
5
5
 
6
- Concord is a feature-rich TUI (terminal user interface) client for Discord, written in Rust with ratatui. Full Discord experience, right in your terminal.
6
+ Concord is a feature-rich TUI client for Discord, written in Rust with ratatui.
7
7
 
8
8
  ## Table of contents
9
9
 
@@ -18,150 +18,112 @@ Concord is a feature-rich TUI (terminal user interface) client for Discord, writ
18
18
 
19
19
  ## Installation
20
20
 
21
- ### Prerequisites
21
+ Release builds include voice playback and stream broadcasting.
22
22
 
23
- #### Linux runtime
23
+ ### **Cargo**
24
24
 
25
25
  ```sh
26
- # Fedora
27
- sudo dnf install alsa-lib opus pipewire-libs xdg-desktop-portal
28
-
29
- # Debian or Ubuntu
30
- sudo apt install libasound2 libopus0 libpipewire-0.3-0 xdg-desktop-portal
31
-
32
- # Arch Linux
33
- sudo pacman -S alsa-lib opus pipewire xdg-desktop-portal
34
- ```
35
-
36
- Screen sharing requires the portal backend for your desktop environment.
37
-
38
- #### macOS
39
-
40
- macOS 13 or later is required.
41
-
42
- #### Source builds
43
-
44
- ```sh
45
- # macOS
46
- xcode-select --install
47
- brew install opus pkg-config
48
- brew install nasm # Intel only
49
-
50
- # Fedora
51
- sudo dnf install alsa-lib-devel clang-devel gcc gcc-c++ nasm opus-devel pipewire-devel pkgconf-pkg-config
52
-
53
- # Debian or Ubuntu
54
- sudo apt install build-essential libasound2-dev libclang-dev libopus-dev libpipewire-0.3-dev nasm pkg-config
55
-
56
- # Arch Linux
57
- sudo pacman -S alsa-lib base-devel clang nasm opus pipewire pkgconf
26
+ cargo install concord --locked
58
27
  ```
59
28
 
60
- Windows source builds require the MSVC Rust toolchain, Visual Studio 2022 Build
61
- Tools with Desktop development with C++, CMake, and NASM.
29
+ Cargo installations compile Concord locally and require the build dependencies
30
+ listed below.
62
31
 
63
- ### Homebrew
32
+ ### **Homebrew**
64
33
 
65
34
  ```sh
66
35
  brew install concord
67
- ```
68
-
69
- Or with the tap for the latest version:
70
36
 
71
- ```sh
37
+ # or install the latest release from tap
72
38
  brew install chojs23/tap/concord
73
39
  ```
74
40
 
75
- ### npm
41
+ ### **npm**
76
42
 
77
43
  ```sh
78
44
  npm install -g @chojs23/concord
79
45
  ```
80
46
 
81
- ### Cargo
82
-
83
- The default build includes voice playback and stream broadcasting.
47
+ ### **Nix**
84
48
 
85
49
  ```sh
86
- cargo install concord --locked
87
- ```
88
-
89
- To keep voice support while omitting stream broadcasting:
50
+ # nixpkgs
51
+ nix profile install nixpkgs#concord-tui
90
52
 
91
- ```sh
92
- cargo install concord --locked --no-default-features --features voice-playback
53
+ # Latest GitHub release
54
+ nix profile install github:chojs23/concord
93
55
  ```
94
56
 
95
- This voice-only build needs only `libopus-dev`, `libasound2-dev`, and
96
- `pkg-config`.
57
+ ### **Gentoo**
97
58
 
98
- To install without local voice playback, microphone, or stream broadcasting:
99
-
100
- ```sh
101
- cargo install concord --locked --no-default-features
102
- ```
59
+ This package is maintained by a community contributor and is not yet available in Gentoo GURU.
103
60
 
104
- To install the latest unreleased version directly from the Git repository:
61
+ Install the `darwincereska` overlay:
105
62
 
106
63
  ```sh
107
- cargo install --locked --git https://github.com/chojs23/concord
64
+ eselect repository add darwincereska git https://codeberg.org/darwincereska/gentoo-overlay.git
65
+ emaint sync -r darwincereska
66
+ emerge -av net-im/concord
108
67
  ```
109
68
 
110
- ### Nix
69
+ ### Prebuilt releases
111
70
 
112
- Install the packaged release from nixpkgs:
71
+ Download an archive for Linux, macOS, or Windows from the
72
+ [latest GitHub release](https://github.com/chojs23/concord/releases/latest), or
73
+ run the release installer:
113
74
 
114
75
  ```sh
115
- nix profile install nixpkgs#concord-tui
76
+ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/chojs23/concord/releases/latest/download/concord-installer.sh | sh
116
77
  ```
117
78
 
118
- Run the packaged release without installing:
119
-
120
- ```sh
121
- nix run nixpkgs#concord-tui
79
+ ```powershell
80
+ powershell -ExecutionPolicy Bypass -c "irm https://github.com/chojs23/concord/releases/latest/download/concord-installer.ps1 | iex"
122
81
  ```
123
82
 
124
- Run the latest release without installing (requires flakes enabled):
83
+ The installer places `concord` under `$CARGO_HOME/bin`.
125
84
 
126
- ```sh
127
- nix run github:chojs23/concord
128
- ```
85
+ ### Runtime requirements
129
86
 
130
- Install into your profile:
87
+ macOS 13 or later is required. Linux release builds need these packages:
131
88
 
132
89
  ```sh
133
- nix profile install github:chojs23/concord
134
- ```
90
+ # Fedora
91
+ sudo dnf install alsa-lib opus pipewire-libs xdg-desktop-portal
135
92
 
136
- Or add the flake as an input in your own `flake.nix`:
93
+ # Debian or Ubuntu
94
+ sudo apt install libasound2 libopus0 libpipewire-0.3-0 xdg-desktop-portal
137
95
 
138
- ```nix
139
- {
140
- inputs.concord.url = "github:chojs23/concord";
141
- }
96
+ # Arch Linux
97
+ sudo pacman -S alsa-lib opus pipewire xdg-desktop-portal
142
98
  ```
143
99
 
144
- ### GitHub Release installer
100
+ Screen sharing requires the portal backend for your desktop environment.
145
101
 
146
- Install the latest release with the cargo-dist shell installer:
102
+ ### Build from source
147
103
 
148
- ```sh
149
- curl --proto '=https' --tlsv1.2 -LsSf https://github.com/chojs23/concord/releases/latest/download/concord-installer.sh | sh
150
- ```
104
+ <details>
105
+ <summary>Build dependencies and commands</summary>
151
106
 
152
- On Windows, use the PowerShell installer instead:
107
+ Install the Rust stable toolchain and the native dependencies for your platform:
153
108
 
154
- ```powershell
155
- powershell -ExecutionPolicy Bypass -c "irm https://github.com/chojs23/concord/releases/latest/download/concord-installer.ps1 | iex"
156
- ```
109
+ ```sh
110
+ # macOS
111
+ xcode-select --install
112
+ brew install opus pkg-config
113
+ brew install nasm # Intel only
157
114
 
158
- The installer places `concord` under `$CARGO_HOME/bin`, which is usually
159
- `~/.cargo/bin` on Unix and `%USERPROFILE%\.cargo\bin` on Windows.
115
+ # Fedora
116
+ sudo dnf install alsa-lib-devel clang-devel gcc gcc-c++ nasm opus-devel pipewire-devel pkgconf-pkg-config
160
117
 
161
- ### Build from source
118
+ # Debian or Ubuntu
119
+ sudo apt install build-essential libasound2-dev libclang-dev libopus-dev libpipewire-0.3-dev nasm pkg-config
162
120
 
163
- You need the Rust stable toolchain, Cargo, and the native dependencies listed in
164
- the Prerequisites section.
121
+ # Arch Linux
122
+ sudo pacman -S alsa-lib base-devel clang nasm opus pipewire pkgconf
123
+ ```
124
+
125
+ Windows source builds require the MSVC Rust toolchain, Visual Studio 2022 Build
126
+ Tools with Desktop development with C++, CMake, and NASM.
165
127
 
166
128
  ```sh
167
129
  git clone https://github.com/chojs23/concord.git
@@ -169,25 +131,22 @@ cd concord
169
131
  cargo build --release
170
132
  ```
171
133
 
172
- The release binary is produced at:
173
-
174
- ```sh
175
- target/release/concord
176
- ```
177
-
178
- To keep voice support while omitting stream broadcasting:
134
+ To keep voice support without stream broadcasting:
179
135
 
180
136
  ```sh
181
137
  cargo build --release --no-default-features --features voice-playback
182
138
  ```
183
139
 
184
- To build without local voice playback, microphone, or stream broadcasting,
185
- disable default features:
140
+ To build without local voice playback, microphone, or stream broadcasting:
186
141
 
187
142
  ```sh
188
143
  cargo build --release --no-default-features
189
144
  ```
190
145
 
146
+ The same feature flags can be passed to `cargo install concord --locked`.
147
+
148
+ </details>
149
+
191
150
  ## Features
192
151
 
193
152
  ### Authentication
@@ -203,29 +162,21 @@ By default, tokens are saved in the system keychain when available. In the
203
162
  default `auto` mode, Concord falls back to its state directory when keychain
204
163
  storage is unavailable. See the Security section below for details.
205
164
 
206
- To sign out with the default keys, open your profile with `Space`, `p`, then
207
- choose `[o] sign out`.
208
-
209
165
  ### Voice calls
210
166
 
211
- - Full voice support with push-to-talk
212
- - Supports noise suppression
213
- - Watch & Broadcast live stream in voice channels
167
+ - Voice calls with push-to-talk
168
+ - Noise suppression
169
+ - Watch and broadcast screen shares
214
170
 
215
171
  ### Guilds & Channels
216
172
 
217
- - Navigate text channels, threads, and forum channels
218
173
  - View, filter, and create forum/media posts (active / archived)
219
174
  - Switch channels, threads, and posts with the fuzzy channel switcher (`Space`, `Space`)
220
- - Track unread messages and mention counts per channel
221
- - Mute and unmute channels and servers
222
175
 
223
176
  ### Messaging
224
177
 
225
- - Send, edit, and delete messages
226
- - Upload / Download attachments
227
- - Search messages with filters with `/`
228
- - @mention autocomplete
178
+ - Search messages with filters using `/`
179
+ - `@mention` autocomplete
229
180
  - Send custom emoji your account cannot use directly as image links when enabled
230
181
  - Rich content display (embeds, attachments, stickers, and mentions)
231
182
  - Detect URLs in message bodies and markdown links, then open them in your default browser
@@ -243,12 +194,6 @@ Concord renders a practical subset of Discord-style Markdown in message bodies:
243
194
  - Fenced code blocks with optional language labels, rendered as compact boxes with syntax highlighting
244
195
  - Raw URLs and markdown link destinations are underlined and can be opened from message actions
245
196
 
246
- ### Reactions & Polls
247
-
248
- - View, add, and remove emoji reactions (Unicode and custom server emoji)
249
- - Use custom emoji from other servers as reactions when your account supports it
250
- - View and vote on polls
251
-
252
197
  ### Media Support
253
198
 
254
199
  Image rendering is powered by [ratatui-image](https://github.com/benjajaja/ratatui-image). On startup, Concord queries the terminal to detect the best available graphics protocol. Supported protocols:
@@ -258,44 +203,27 @@ Image rendering is powered by [ratatui-image](https://github.com/benjajaja/ratat
258
203
  - **Sixel** - foot, mlterm, xterm (if compiled with Sixel support), etc.
259
204
  - **Halfblocks** (fallback) - works on any terminal, but uses block characters instead of true pixels.
260
205
 
261
- Checkout [compatibility-matrix](https://github.com/ratatui/ratatui-image#compatibility-matrix) for a list of terminals that support each protocol.
262
-
263
- You can toggle image viewing on or off in the configuration file. When image viewing is off, attachments and emojis will be shown as text placeholders.
206
+ Check the [compatibility matrix](https://github.com/ratatui/ratatui-image#compatibility-matrix) for terminals that support each protocol.
264
207
 
265
- Video and audio playback uses [mpv](https://mpv.io/). Make sure `mpv` is installed and in your PATH.
208
+ External media playback is off by default. You can enable it with Display options menu.
209
+ Video and audio playback, including live streams, uses [mpv](https://mpv.io/). Make sure `mpv` is installed and in your PATH.
266
210
  YouTube playback depends on your local `mpv` setup, such as `yt-dlp` support.
267
- External media playback is off by default. You can enable it with
268
- `media_playback = true` under `[display]`, or toggle it from the in-app Display
269
- options menu.
270
-
271
- Watch live streaming also uses mpv. Join the streamer's voice channel, focus the
272
- streaming participant, and choose `Watch stream`.
273
211
 
274
212
  To broadcast, join a voice channel, open its channel actions, choose
275
- `Share screen`, then select a whole display or one window. The default `<leader>vs` voice
276
- shortcut performs the same toggle. Linux screen capture depends on the active X11 or Wayland support.
277
-
278
- ### Members & Profiles
213
+ `Share screen` or use `<leader>vs` voice shortcut.
214
+ Linux screen capture depends on the active X11 or Wayland support.
279
215
 
280
- - View Member list and search members
281
- - Presence indicators (Online, Idle, DND, Offline)
282
- - Configure user profile and rich presence activity
283
-
284
- #### Rich Presence
216
+ ### Rich Presence
285
217
 
286
218
  - Concord serves the local `discord-ipc` socket, detects connected apps, and
287
219
  lets you pick which one to share from your profile's activity picker
288
220
  - Only apps that speak Discord's Rich Presence (RPC/IPC) protocol are detected.
289
- - Detection needs the official Discord client closed, since only one program can
290
- own the socket and the official client claims it first
291
221
  - Toggle with `share_rich_presence` under `[presence]` in `config.toml`
292
222
 
293
223
  ### Notifications
294
224
 
295
225
  - Notification inbox (`<leader>n`) with Unreads and Mentions tabs.
296
- - You can configure notification sounds with custom WAV files
297
- - Desktop notifications for messages that pass your Discord
298
- notification settings
226
+ - Custom notification sounds using WAV files
299
227
  - Voice join and leave notification sounds while you are connected to voice
300
228
 
301
229
  ### Navigation & Keyboard shortcuts
@@ -303,11 +231,7 @@ shortcut performs the same toggle. Linux screen capture depends on the active X1
303
231
  > ⚠️ Keymap action names and default bindings may have breaking changes between releases.
304
232
 
305
233
  All default key settings in this section can be customized. See
306
- [Keymap options](./docs/keymap-options.md) for the config format and supported
307
- actions.
308
-
309
- Concord has a four-pane.
310
- **Guilds (1)**, **Channels (2)**, **Messages (3)**, **Members (4)**
234
+ [Keymap options](./docs/keymap-options.md) for the config and supported actions.
311
235
 
312
236
  With default vim-style navigation:
313
237
 
@@ -345,153 +269,59 @@ Press `Space` to open the leader shortcut window.
345
269
  | `Space`, `p` | Open my profile settings |
346
270
  | `Space`, `o` | Choose concord option category |
347
271
  | `Space`, `n` | Open the notification inbox |
348
- | `Space`, `v` | Voice command prefix |
272
+ | `Space`, `v` | Open voice shortcuts |
349
273
  | `Space`, `Space` | Open the fuzzy channel switcher |
350
274
 
351
- #### Action menus
275
+ #### Message shortcuts
352
276
 
353
- Focus a pane, then press `Space`, `a` to open actions for that pane. Actions
354
- that do not apply to the current selection are shown dimmed and disabled. In
355
- the Messages pane, the selected message also supports these direct shortcuts:
356
-
357
- Message shortcuts:
358
-
359
- | Shortcut | Action | Description |
360
- | -------- | ------------------- | ----------------------------------------------------------- |
361
- | `y` | Copy | Copy the selected message text and show a short toast |
362
- | `r` | Add/remove reaction | Open the reaction picker for the selected message |
363
- | `R` | Reply | Start a reply to the selected message |
364
- | `d` | Delete | Open a delete confirmation before deleting the message |
365
- | `e` | Edit | Start editing the selected message when editing is allowed |
366
- | `o` | Open URL | Open the selected message URL, or choose from multiple URLs |
367
- | `x` | Play media | Play selected video or audio media in an external player |
368
- | `v` | View attachment | Open the selected message's attachment viewer |
369
-
370
- Message action menu shortcuts:
371
-
372
- | Shortcut | Action | Description |
373
- | -------- | --------------------------- | ----------------------------------------------------------- |
374
- | `y` | Copy | Copy the selected message text and show a short toast |
375
- | `r` | Add/remove reaction | Open the reaction picker for the selected message |
376
- | `R` | Reply | Start a reply to the selected message |
377
- | `d` | Delete | Open a delete confirmation before deleting the message |
378
- | `e` | Edit | Start editing the selected message when editing is allowed |
379
- | `o` | Open URL | Open the selected message URL, or choose from multiple URLs |
380
- | `D` | Remove embeds | Remove embeds from the selected message |
381
- | `x` | Play media | Play selected video or audio media in an external player |
382
- | `v` | View attachment | Open the selected message's attachment viewer |
383
- | `g` | Go to referenced message | Go to the replied or forwarded message |
384
- | `p` | show message sender profile | Open the selected message author's profile |
385
- | `P` | Pin / unpin | Open a pin or unpin confirmation for the selected message |
386
- | `t` | Open thread | Open the selected message's thread |
387
- | `u` | Show reacted users | Show users who reacted to the selected message |
388
- | `c` | Choose poll votes | Choose poll votes for the selected message |
389
-
390
- When the attachment viewer is open, press `x` to play the current video or audio attachment
391
- in an external player, or `d` to download the current attachment directly.
392
-
393
- Server actions:
394
-
395
- | Shortcut | Action | Description |
396
- | -------- | ------------------- | ----------------------------------------------------- |
397
- | `m` | Mark server as read | Mark all unread viewable channels in this server read |
398
- | `u` | Mute / unmute | Toggle server notification mute |
399
- | `l` | Leave server | Open a confirmation before leaving this server |
400
- | `r` | Folder settings | Edit the selected server folder name and color |
401
-
402
- Channel actions:
403
-
404
- | Shortcut | Action | Description |
405
- | -------- | -------------------- | -------------------------------------------- |
406
- | `e` | Join voice | Join the selected voice channel or DM call |
407
- | `l` | Leave voice | Leave the current voice channel or DM call |
408
- | `s` | Toggle screen share | Start from a display or window, or stop it |
409
- | `w` | Watch stream | Watch the selected participant's Go Live |
410
- | `a` | Audio settings | Set participant volume or mute |
411
- | `p` | Show pinned messages | Open the selected channel's pinned messages |
412
- | `t` | Show threads | List threads for the selected channel |
413
- | `m` | Mark as read | Mark the selected channel read |
414
- | `u` | Mute / unmute | Toggle channel or category notification mute |
415
-
416
- Thread / post actions (a focused thread in the Channels pane or a forum post in the post list):
417
-
418
- | Shortcut | Action | Description |
419
- | -------- | --------------------- | ----------------------------------------------------------- |
420
- | `m` | Mark as read | Mark the thread or post read |
421
- | `f` | Follow / unfollow | Follow or unfollow the thread or post |
422
- | `c` | Close / reopen | Close or reopen the thread or post (author or moderator) |
423
- | `l` | Lock / unlock | Lock or unlock the thread or post (moderator) |
424
- | `e` | Edit | Edit title, tags, slow mode, and auto-archive |
425
- | `y` | Copy link | Copy a link to the thread or post |
426
- | `u` | Mute / unmute | Toggle thread or post notification mute (must follow first) |
427
- | `n` | Notification settings | Choose the notification level for the thread or post |
428
- | `P` | Pin / unpin | Pin or unpin the post (forum posts only, moderator) |
429
- | `d` | Delete | Delete the whole thread or post (moderator) |
430
- | `i` | Copy ID | Copy the thread or post ID |
431
-
432
- Voice commands:
433
-
434
- | Sequence | Action | Description |
435
- | ----------------- | ------------ | ----------------------------------------- |
436
- | `Space`, `v`, `d` | Deafen voice | Toggle Concord's Discord voice deaf state |
437
- | `Space`, `v`, `m` | Mute voice | Toggle Concord's Discord voice mute state |
438
- | `Space`, `v`, `l` | Leave voice | Leave the current Concord voice channel |
277
+ These shortcuts act on the selected message when the Messages pane is focused.
439
278
 
440
- #### Composer
279
+ | Key | Action |
280
+ | --- | -------------------------- |
281
+ | `y` | Copy message text |
282
+ | `r` | Add or remove a reaction |
283
+ | `R` | Reply |
284
+ | `d` | Delete |
285
+ | `e` | Edit |
286
+ | `o` | Open URL |
287
+ | `x` | Play video or audio |
288
+ | `v` | Open the attachment viewer |
441
289
 
442
- You can paste copied files into the composer to attach them. Pending uploads
443
- are shown above the input before sending.
444
-
445
- In a forum or media parent channel, the same composer key opens a post composer
446
- overlay.
290
+ #### Action menus
447
291
 
448
- | Shortcut | Action | Description |
449
- | -------------------------------------------- | ----------------- | ---------------------------------------------------------------- |
450
- | `Ctrl+v` | paste clipboard | Attach copied files or images when present, otherwise paste text |
451
- | `Ctrl+e` | open $EDITOR | Open $EDITOR on the current draft for long editing |
452
- | `Ctrl+c` | clear | Clear current draft |
453
- | `Ctrl+Left`/ `Ctrl+Right` | Jump word | Jump the cursor by word |
454
- | `Alt+Backspace`, `Ctrl+Backspace` / `Ctrl+w` | Delete word | Delete the word before the cursor |
455
- | `Ctrl+u` / `Ctrl+k` | Delete line text | Delete from cursor to start/end of the current line |
456
- | `Delete` | Detach attachment | Removes the last pending attachment |
457
- | `Alt+p` | Toggle reply ping | Toggle whether replying pings the original author |
292
+ Press `Space`, `a` to open actions for the focused pane. The menu shows the
293
+ available shortcuts and dims actions that do not apply to the current
294
+ selection.
458
295
 
459
- #### Mention picker
296
+ #### Composer
460
297
 
461
- When the @mention picker is open, use `Up` / `Down`,
462
- `Ctrl+p` / `Ctrl+n`, `Tab`, or `Enter` to choose a mention.
298
+ The composer supports copied file attachments and editing the current draft in
299
+ `$EDITOR`. Pending uploads appear above the input before sending.
463
300
 
464
301
  #### Emoji picker
465
302
 
466
- Type `:` plus at least two letters, such as `:he`, to pick Unicode, server, or
467
- cross-server custom emoji while writing a message.
303
+ Supports searching and selecting emoji with the picker. Press `:` to open the
304
+ picker, then type to filter.
468
305
 
469
306
  When `emojis_as_links` is enabled, custom emoji your account cannot send
470
307
  directly are inserted as Discord image links instead.
471
308
 
472
- To react from the composer, select a message, enter insert mode, then type
473
- `+:`. The reaction picker opens for that message. Press `/` to search, Enter to
474
- lock the filter, then Enter again or use a shown shortcut to react.
475
-
476
309
  #### Bot commands
477
310
 
478
- When the composer input starts with a slash `/`, the command suggestion popup
311
+ When the composer input starts with `/`, Concord shows available application
312
+ commands.
479
313
 
480
314
  ## Configuration
481
315
 
482
- Concord options are stored under Concord's config directory. If
483
- `XDG_CONFIG_HOME` is set, Concord uses `config.toml` for app options, `keymap.toml` for key settings, and `theme.toml` for colors.
484
- Otherwise it uses the platform config directory.
316
+ Concord reads `config.toml`, `keymap.toml`, and `theme.toml` from
317
+ `$XDG_CONFIG_HOME/concord` when `XDG_CONFIG_HOME` is set, or from the platform
318
+ config directory otherwise.
485
319
 
486
- Local UI state and plaintext fallback credentials are stored under Concord's
487
- state directory instead. If `XDG_STATE_HOME` is set, Concord uses
488
- `$XDG_STATE_HOME/concord/state.toml` and
489
- `$XDG_STATE_HOME/concord/credentials.toml`. Otherwise it uses
490
- `~/.local/state/concord/state.toml` and
491
- `~/.local/state/concord/credentials.toml`.
320
+ Machine-local UI state and fallback credentials are stored in
321
+ `$XDG_STATE_HOME/concord`, or in `~/.local/state/concord` when
322
+ `XDG_STATE_HOME` is not set.
492
323
 
493
- You can change some configuration from the in-app Options menu, and Concord saves them back
494
- to `config.toml`. Key settings are read from `keymap.toml`, and colors are read from `theme.toml`.
324
+ ### App options
495
325
 
496
326
  <details>
497
327
  <summary>Default config</summary>
@@ -560,6 +390,11 @@ self_mute = false
560
390
  # Join or update Discord voice with Concord self-deafened.
561
391
  self_deaf = false
562
392
 
393
+ # Optional CPAL device IDs chosen from Voice Options. When omitted or no longer
394
+ # available, Concord uses the current system default input or output device.
395
+ # input_source = "CoreAudio:input-id"
396
+ # output_source = "CoreAudio:output-id"
397
+
563
398
  # Allow microphone transmit while this session is joined and not self-muted.
564
399
  allow_microphone_transmit = false
565
400
 
@@ -590,30 +425,10 @@ application.
590
425
 
591
426
  </details><br>
592
427
 
593
- `image_protocol`:
594
-
595
- - `auto`: use terminal detection. In iTerm, Concord uses the iTerm2 protocol
596
- because terminal capability detection can incorrectly select Kitty there.
597
- - `iterm2`: force the iTerm2 inline image protocol.
598
- - `kitty`: force the Kitty graphics protocol.
599
- - `sixel`: force Sixel rendering.
600
- - `halfblocks`: force Unicode half-block fallback rendering.
601
-
602
- `image_preview_quality` and `attachment_viewer_quality`:
603
-
604
- - `efficient`: smaller preview requests to reduce bandwidth and memory use.
605
- - `balanced`: default quality with bounded resource use.
606
- - `high`: sharper resized previews using lossless quality.
607
- - `original`: request the original source image for previews when possible.
608
-
609
- This setting only applies to attachment, embed, and attachment viewer previews.
610
- Avatars and custom emoji keep their separate small-image behavior.
611
-
612
- `credentials.store`:
428
+ ### Key bindings
613
429
 
614
- - `auto`: try the system keychain first, then fall back to the state-file credential store.
615
- - `keychain`: use only the system keychain. If keychain storage is unavailable, the token is not saved.
616
- - `plain`: use only the plain-text state-file credential store.
430
+ See [Keymap options](./docs/keymap-options.md) for the config format and
431
+ supported actions.
617
432
 
618
433
  <details>
619
434
  <summary>Default keymap config</summary>
@@ -624,6 +439,7 @@ leader = "space"
624
439
  StartComposer = "i"
625
440
  OpenPaneFilter = "/"
626
441
  ClosePopup = "q"
442
+ OpenDebugLog = "`"
627
443
  FocusGuildPane = "1"
628
444
  FocusChannelPane = "2"
629
445
  FocusMessagePane = "3"
@@ -661,7 +477,7 @@ OpenNotificationInbox = "<leader>n"
661
477
  ChannelSwitcher = "<leader><leader>"
662
478
  VoiceDeafen = "<leader>vd"
663
479
  VoiceMute = "<leader>vm"
664
- VoiceStream = "<leader>vs"
480
+ ToggleStream = "<leader>vs"
665
481
  VoiceLeave = "<leader>vl"
666
482
 
667
483
  [keymap.groups]
@@ -681,6 +497,7 @@ FolderSettings = "r"
681
497
  JoinVoice = "e"
682
498
  LeaveVoice = "l"
683
499
  ToggleStream = "s"
500
+ WatchStream = "w"
684
501
  VoiceParticipantAudio = "a"
685
502
  ShowPinnedMessages = "p"
686
503
  ShowThreads = "t"
@@ -745,12 +562,10 @@ ToggleReplyPing = "<A-p>"
745
562
 
746
563
  </details><br>
747
564
 
748
- You can customize key bindings. Check the [Keymap options](./docs/keymap-options.md) for the config format, supported actions.
565
+ ### Theme
749
566
 
750
- You can customize Concord's named UI Highlight Groups and border shapes in
751
- `theme.toml`. A Highlight Group may set foreground, background, bold, italic,
752
- dim, underline, and strikethrough, or link to another group and inherit its
753
- unset fields. Every group and field is optional.
567
+ See [Theme options](./docs/theme-options.md) for available groups, values, and
568
+ border shapes.
754
569
 
755
570
  <details>
756
571
  <summary>Default theme config</summary>
@@ -1173,9 +988,6 @@ foreground = "cyan"
1173
988
 
1174
989
  </details><br>
1175
990
 
1176
- Check [Theme options](./docs/theme-options.md) for the complete group list,
1177
- accepted values, links, exact defaults, and warning behavior.
1178
-
1179
991
  ## Performance
1180
992
 
1181
993
  Concord is designed to stay lightweight in normal terminal use. In observed
@@ -1186,44 +998,24 @@ bytes need to be decoded before they can be rendered in the terminal. When many
1186
998
  images are loaded, memory can briefly rise to around 100-200 MB while decoding
1187
999
  and then drop again as work completes and caches are pruned.
1188
1000
 
1189
- To keep resource usage bounded, Concord limits media work in several places:
1190
-
1191
- - Attachment previews are downloaded with an 8 MiB per-preview cap.
1192
- - Up to 4 attachment previews are fetched at once.
1193
- - Up to 2 inline image previews are decoded at once.
1194
- - Inline image previews, avatars, and custom emoji use small LRU caches.
1195
- - Image preview requests prefer resized Discord proxy URLs sized for the
1196
- terminal instead of original full-size media when possible.
1197
- - The preview quality preset can lower preview source dimensions or opt into
1198
- original source images. It does not change avatar or custom emoji sizing.
1199
-
1200
- Message history is also cached with a per-channel limit, so long-running
1201
- sessions do not keep every message in memory forever.
1202
-
1203
1001
  ## FAQ
1204
1002
 
1205
1003
  ### Can my account be blocked?
1206
1004
 
1207
- Honestly, no.
1208
-
1209
- There are some path that did trigger a account block:
1005
+ There are some path that did trigger a temporary block:
1210
1006
 
1007
+ - If your account is new or has a low reputation, some actions may trigger a block.
1211
1008
  - Trying to **create a new DM channel and send a message to an unknown user**(meaning there was no pre-existing DM created through the Discord client) can immediately block your account temporarily.
1212
1009
  - Sending a message in an existing one-to-one DM may also trigger a temporary account block if you only recently started messaging that person or have little conversation history with them.
1213
- - Some features that requires a hCapcha challenge on Discord's side.
1010
+ - Some features that requires a hCapcha challenge.
1214
1011
 
1215
1012
  Other features have not caused blocks in my testing.
1216
1013
 
1217
1014
  That said, Concord is not an official Discord client. Using unofficial clients, automated user accounts, or self-bots can violate Discord's TOS, so there is always some risk. Use it at your own discretion.
1218
1015
 
1219
- ### Does Concord support CAPTCHA?
1220
-
1221
- No. If Discord requires a CAPTCHA during login, use token login instead.
1222
-
1223
1016
  ## Security
1224
1017
 
1225
1018
  - By default, tokens are stored in the system keychain when available.
1226
- - On Linux, keychain storage uses Secret Service when a compatible service is available.
1227
1019
  - The `CONCORD_TOKEN` environment variable lets you provide a token without writing it to disk. This avoids leaving plaintext on disk, but the token is visible in `/proc/<pid>/environ` and in process listings while Concord is running.
1228
1020
  - In `credentials.store = "auto"`, Concord falls back to **plain text** credentials under Concord's state directory when keychain storage is unavailable. In `keychain` mode, Concord does not fall back to plain storage. Keep fallback credential files secure and do not share them. You can use a token from that file to log in to the official Discord client, so treat it like a password.
1229
1021
  - On Unix, the fallback credential's parent directory is created with `0700` and the credential file with `0600` permissions.
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "GPL-3.0-only",
25
25
  "name": "@chojs23/concord",
26
- "version": "2.5.0"
26
+ "version": "2.5.2"
27
27
  },
28
28
  "node_modules/@isaacs/cliui": {
29
29
  "engines": {
@@ -542,5 +542,5 @@
542
542
  }
543
543
  },
544
544
  "requires": true,
545
- "version": "2.5.0"
545
+ "version": "2.5.2"
546
546
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/chojs23/concord/releases/download/v2.5.0"
3
+ "https://github.com/chojs23/concord/releases/download/v2.5.2"
4
4
  ],
5
5
  "bin": {
6
6
  "concord": "run-concord.js"
@@ -93,7 +93,7 @@
93
93
  "zipExt": ".tar.xz"
94
94
  }
95
95
  },
96
- "version": "2.5.0",
96
+ "version": "2.5.2",
97
97
  "volta": {
98
98
  "node": "18.14.1",
99
99
  "npm": "9.5.0"