@chojs23/concord 2.1.12 → 2.2.0

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,6 +2,37 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.2.0] - 2026-06-07
6
+
7
+ Concord save token in system keychain and use it for authentication, so you may need to re-login after this update.
8
+
9
+ ### Documentation
10
+
11
+ - Update homebrew installation by @chojs23
12
+ - Update image by @chojs23
13
+
14
+ ### Features
15
+
16
+ - Wrap message text at word boundaries (#174) in [#174](https://github.com/chojs23/concord/pull/174) by @chojs23
17
+ - Use system keychain and move ui state to XDG_STATE_HOME (#173) in [#173](https://github.com/chojs23/concord/pull/173) by @chojs23
18
+
19
+ ## [2.1.13] - 2026-06-07
20
+
21
+ ### Bug Fixes
22
+
23
+ - _(tui)_ Preserve member search selection across member cache refreshes by @chojs23
24
+ - _(tui)_ Prevent popup residue on terminal images by @chojs23
25
+ - Retain member cache for more recent guilds by @chojs23
26
+
27
+ ### Documentation
28
+
29
+ - Update readme by @chojs23
30
+
31
+ ### Features
32
+
33
+ - Add --check-config validation command by @chojs23
34
+ - _(tui)_ Keep voice indicators visible after name truncation by @chojs23
35
+
5
36
  ## [2.1.12] - 2026-06-07
6
37
 
7
38
  ### Bug Fixes
@@ -690,9 +721,18 @@ All notable changes to this project will be documented in this file.
690
721
 
691
722
  ### Bug Fixes
692
723
 
693
- - _(flake)_ Use crane (#4) in [#4](https://github.com/chojs23/concord/pull/4) by @M4jor-Tom
694
724
  - Keep original image width:height ratio (#6) in [#6](https://github.com/chojs23/concord/pull/6) by @chojs23
695
725
 
726
+ ### Cd
727
+
728
+ - Chain crates publish after release by @chojs23
729
+
730
+ ## [1.1.0] - 2026-05-09
731
+
732
+ ### Bug Fixes
733
+
734
+ - _(flake)_ Use crane (#4) in [#4](https://github.com/chojs23/concord/pull/4) by @M4jor-Tom
735
+
696
736
  ### Documentation
697
737
 
698
738
  - Add CONTRIBUTING.md by @chojs23
@@ -707,10 +747,6 @@ All notable changes to this project will be documented in this file.
707
747
 
708
748
  - Enable generated github release notes by @chojs23
709
749
 
710
- ### Cd
711
-
712
- - Chain crates publish after release by @chojs23
713
-
714
750
  ### New Contributors
715
751
 
716
752
  - @M4jor-Tom made their first contribution in [#4](https://github.com/chojs23/concord/pull/4)
package/README.md CHANGED
@@ -20,6 +20,12 @@ Concord is a feature-rich TUI (terminal user interface) client for Discord, writ
20
20
 
21
21
  ### Homebrew
22
22
 
23
+ ```sh
24
+ brew install concord
25
+ ```
26
+
27
+ Or with the tap for the latest version:
28
+
23
29
  ```sh
24
30
  brew install chojs23/tap/concord
25
31
  ```
@@ -40,7 +46,9 @@ The npm package installs a prebuilt binary from the GitHub Release artifacts.
40
46
 
41
47
  ### Cargo
42
48
 
43
- Install native audio dependencies first. On macOS with Homebrew:
49
+ Install native dependencies first.
50
+
51
+ On macOS with Homebrew:
44
52
 
45
53
  ```sh
46
54
  brew install opus pkg-config
@@ -58,12 +66,6 @@ On Debian or Ubuntu:
58
66
  sudo apt install libopus-dev libasound2-dev pkg-config
59
67
  ```
60
68
 
61
- On macOS with Homebrew:
62
-
63
- ```sh
64
- brew install opus pkg-config
65
- ```
66
-
67
69
  ```sh
68
70
  cargo install concord --locked
69
71
  ```
@@ -162,7 +164,9 @@ aplay -D pulse /usr/share/sounds/alsa/Front_Center.wav
162
164
 
163
165
  Email and QR code logins may trigger a CAPTCHA challenge on Discord's side. We cannot solve that, so I strongly recommend using token authentication.
164
166
 
165
- Tokens are saved under Concord's config directory in plain text. See the Security section below for details.
167
+ By default, tokens are saved in the system keychain when available. In the
168
+ default `auto` mode, Concord falls back to its state directory when keychain
169
+ storage is unavailable. See the Security section below for details.
166
170
 
167
171
  ### Guilds & Channels
168
172
 
@@ -191,7 +195,7 @@ Tokens are saved under Concord's config directory in plain text. See the Securit
191
195
  - Direct message shortcuts for copy, reply, edit, delete, reactions, URL opening,
192
196
  and image viewing. More message actions are available from the action menu.
193
197
 
194
- #### Markdown Rendering
198
+ #### Markdown Rendering & Code syntax highlighting
195
199
 
196
200
  ![Markdown rendering example](./docs/markdown-example.png)
197
201
 
@@ -202,6 +206,7 @@ Concord renders a practical subset of Discord-style Markdown in message bodies:
202
206
  - Bullets: `- item` and `* item`
203
207
  - Inline styles: `**bold**`, `*italic*`, and `` `inline code` ``
204
208
  - Fenced code blocks with optional language labels, rendered as compact boxes
209
+ with syntax highlighting
205
210
  - Raw URLs and markdown link destinations are underlined and can be opened from message actions
206
211
 
207
212
  ### Reactions & Polls
@@ -227,8 +232,9 @@ You can toggle image viewing on or off in the configuration file. When image vie
227
232
  ### Members & Profiles
228
233
 
229
234
  - Member list with grouping
235
+ - Search members in server
230
236
  - Presence indicators (Online, Idle, DND, Offline)
231
- - View User profile
237
+ - Configure user profile and custom activity status
232
238
 
233
239
  ### Typing Indicators & Read State
234
240
 
@@ -272,7 +278,7 @@ With default vim-style navigation:
272
278
  | `/` | Filter Guilds/Channels, search Messages/Members |
273
279
  | `Space` | Open leader shortcut window |
274
280
  | `i` | Text insert mode |
275
- | `Esc` | Close popup, cancel mode, or go back |
281
+ | `Esc` / `q` | Close popup, cancel mode, or go back |
276
282
  | `q` | Quit Concord |
277
283
 
278
284
  `Ctrl+n` and `Ctrl+p` are fixed row movement keys. The default `j` and `k`
@@ -365,14 +371,14 @@ Voice commands:
365
371
  You can paste copied files into the composer to attach them. Pending uploads
366
372
  are shown above the input before sending.
367
373
 
368
- | Shortcut | Action | Description |
369
- | -------------------------- | ----------------- | ---------------------------------------------------------------- |
370
- | `Ctrl+v` | paste clipboard | Attach copied files or images when present, otherwise paste text |
371
- | `Ctrl+e` | open $EDITOR | Open $EDITOR on the current draft for long editing |
372
- | `Ctrl+c` | clear | Clear current draft |
373
- | `Ctrl+Left`/ `Ctrl+Right` | Jump word | Jump the cursor by word |
374
- | `Ctrl+Backspace`/ `Ctrl+w` | Delete word | Delete the word before the cursor |
375
- | `Delete` | Detach attachment | Removes the last pending attachment |
374
+ | Shortcut | Action | Description |
375
+ | -------------------------------------------- | ----------------- | ---------------------------------------------------------------- |
376
+ | `Ctrl+v` | paste clipboard | Attach copied files or images when present, otherwise paste text |
377
+ | `Ctrl+e` | open $EDITOR | Open $EDITOR on the current draft for long editing |
378
+ | `Ctrl+c` | clear | Clear current draft |
379
+ | `Ctrl+Left`/ `Ctrl+Right` | Jump word | Jump the cursor by word |
380
+ | `Alt+Backspace`, `Ctrl+Backspace` / `Ctrl+w` | Delete word | Delete the word before the cursor |
381
+ | `Delete` | Detach attachment | Removes the last pending attachment |
376
382
 
377
383
  #### Mention picker
378
384
 
@@ -405,6 +411,13 @@ Otherwise it uses the platform config directory. The usual fallback is
405
411
  matching files under `~/Library/Application Support/concord/` on macOS, and the
406
412
  roaming AppData config directory on Windows.
407
413
 
414
+ Local UI state and plaintext fallback credentials are stored under Concord's
415
+ state directory instead. If `XDG_STATE_HOME` is set, Concord uses
416
+ `$XDG_STATE_HOME/concord/state.toml` and
417
+ `$XDG_STATE_HOME/concord/credentials.toml`. Otherwise it uses
418
+ `~/.local/state/concord/state.toml` and
419
+ `~/.local/state/concord/credentials.toml`.
420
+
408
421
  You can change some configuration from the in-app Options menu, and Concord saves them back
409
422
  to `config.toml`. Key settings are read from `keymap.toml`.
410
423
 
@@ -435,6 +448,11 @@ circular_avatars = false
435
448
  # Send custom emoji your account cannot use directly as image links.
436
449
  emojis_as_links = false
437
450
 
451
+ [credentials]
452
+ # Credential storage: auto, keychain, or plain.
453
+ # auto tries the system keychain first and falls back to the state file.
454
+ store = "auto"
455
+
438
456
  [notifications]
439
457
  # Show desktop notifications for Discord messages that pass notification rules.
440
458
  desktop_notifications = true
@@ -481,6 +499,12 @@ voice_output_volume = 100
481
499
  This setting only applies to attachment, embed, and attachment viewer previews.
482
500
  Avatars and custom emoji keep their separate small-image behavior.
483
501
 
502
+ `credentials.store` supports these values:
503
+
504
+ - `auto`: try the system keychain first, then fall back to the state-file credential store.
505
+ - `keychain`: use only the system keychain. If keychain storage is unavailable, the token is not saved.
506
+ - `plain`: use only the plain-text state-file credential store.
507
+
484
508
  <details>
485
509
  <summary>Default keymap config</summary>
486
510
 
@@ -489,6 +513,7 @@ Avatars and custom emoji keep their separate small-image behavior.
489
513
  leader = "space"
490
514
  StartComposer = "i"
491
515
  OpenPaneFilter = "/"
516
+ ClosePopup = "q"
492
517
  FocusGuildPane = "1"
493
518
  FocusChannelPane = "2"
494
519
  FocusMessagePane = "3"
@@ -563,13 +588,13 @@ ShowProfile = "p"
563
588
  [keymap.composer]
564
589
  OpenEditor = "<C-e>"
565
590
  PasteClipboard = "<C-v>"
566
- InsertNewline = { keys = ["<S-enter>", "<C-enter>", "<A-enter>"] }
591
+ InsertNewline = { keys = ["<C-j>", "<S-enter>", "<C-enter>", "<A-enter>"] }
567
592
  Submit = "enter"
568
593
  Close = "esc"
569
594
  ClearInput = "<C-c>"
570
595
  RemoveLastAttachment = "delete"
571
596
  DeletePreviousChar = "backspace"
572
- DeletePreviousWord = { keys = ["<C-backspace>", "<C-w>"] }
597
+ DeletePreviousWord = { keys = ["<A-backspace>", "<C-backspace>", "<C-w>"] }
573
598
  MoveCursorUp = "up"
574
599
  MoveCursorDown = "down"
575
600
  MoveCursorWordLeft = "<C-left>"
@@ -630,10 +655,10 @@ No. If Discord requires a CAPTCHA during login, use token login instead.
630
655
 
631
656
  ## Security
632
657
 
633
- - Tokens are stored as **plain text** in Concord's config directory. So keep that file secure and do not share it. You can use the token from that file to log in to the official Discord client, so treat it like a password.
634
- - On Unix, the credential's parent directory is created with `0700` and the credential file with `0600` permissions.
635
- - All concord state (config, keymap, credential, log) lives under a single `concord/` directory inside `XDG_CONFIG_HOME` when it is set, or inside the platform config directory otherwise.
636
- - No system keychain integration yet.
658
+ - By default, tokens are stored in the system keychain when available.
659
+ - On Linux, keychain storage uses Secret Service when a compatible service is available.
660
+ - 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.
661
+ - On Unix, the fallback credential's parent directory is created with `0700` and the credential file with `0600` permissions.
637
662
 
638
663
  ## Contributing
639
664
 
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "GPL-3.0-only",
25
25
  "name": "@chojs23/concord",
26
- "version": "2.1.12"
26
+ "version": "2.2.0"
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.1.12"
545
+ "version": "2.2.0"
546
546
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/chojs23/concord/releases/download/v2.1.12"
3
+ "https://github.com/chojs23/concord/releases/download/v2.2.0"
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.1.12",
96
+ "version": "2.2.0",
97
97
  "volta": {
98
98
  "node": "18.14.1",
99
99
  "npm": "9.5.0"