@chojs23/concord 2.1.13 → 2.2.1

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,35 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [2.1.13] - 2026-06-08
5
+ ## [2.2.1] - 2026-06-13
6
+
7
+ ### Bug Fixes
8
+
9
+ - Picker scroll by @chojs23
10
+
11
+ ### Documentation
12
+
13
+ - Update readme by @chojs23
14
+
15
+ ### Features
16
+
17
+ - Notify for active-channel messages while the terminal is unfocused (#177) in [#177](https://github.com/chojs23/concord/pull/177) by @cultlead3r
18
+ - Add built-in discord commands (#179) in [#179](https://github.com/chojs23/concord/pull/179) by @chojs23
19
+ - Persist TUI side pane visibility (#180) in [#180](https://github.com/chojs23/concord/pull/180) by @chojs23
20
+
21
+ ## [2.2.0] - 2026-06-10
22
+
23
+ ### Documentation
24
+
25
+ - Update homebrew installation by @chojs23
26
+ - Update image by @chojs23
27
+
28
+ ### Features
29
+
30
+ - Wrap message text at word boundaries (#174) in [#174](https://github.com/chojs23/concord/pull/174) by @chojs23
31
+ - Use system keychain and move ui state to XDG_STATE_HOME (#173) in [#173](https://github.com/chojs23/concord/pull/173) by @chojs23
32
+
33
+ ## [2.1.13] - 2026-06-07
6
34
 
7
35
  ### Bug Fixes
8
36
 
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
 
@@ -274,7 +278,7 @@ With default vim-style navigation:
274
278
  | `/` | Filter Guilds/Channels, search Messages/Members |
275
279
  | `Space` | Open leader shortcut window |
276
280
  | `i` | Text insert mode |
277
- | `Esc` | Close popup, cancel mode, or go back |
281
+ | `Esc` / `q` | Close popup, cancel mode, or go back |
278
282
  | `q` | Quit Concord |
279
283
 
280
284
  `Ctrl+n` and `Ctrl+p` are fixed row movement keys. The default `j` and `k`
@@ -367,14 +371,14 @@ Voice commands:
367
371
  You can paste copied files into the composer to attach them. Pending uploads
368
372
  are shown above the input before sending.
369
373
 
370
- | Shortcut | Action | Description |
371
- | -------------------------- | ----------------- | ---------------------------------------------------------------- |
372
- | `Ctrl+v` | paste clipboard | Attach copied files or images when present, otherwise paste text |
373
- | `Ctrl+e` | open $EDITOR | Open $EDITOR on the current draft for long editing |
374
- | `Ctrl+c` | clear | Clear current draft |
375
- | `Ctrl+Left`/ `Ctrl+Right` | Jump word | Jump the cursor by word |
376
- | `Ctrl+Backspace`/ `Ctrl+w` | Delete word | Delete the word before the cursor |
377
- | `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 |
378
382
 
379
383
  #### Mention picker
380
384
 
@@ -400,12 +404,15 @@ When the composer input starts with a slash `/`, the command suggestion popup
400
404
  ## Configuration
401
405
 
402
406
  Concord options are stored under Concord's config directory. If
403
- `XDG_CONFIG_HOME` is set, Concord uses `$XDG_CONFIG_HOME/concord/config.toml`
404
- for app options and `$XDG_CONFIG_HOME/concord/keymap.toml` for key settings.
405
- Otherwise it uses the platform config directory. The usual fallback is
406
- `~/.config/concord/config.toml` and `~/.config/concord/keymap.toml` on Linux,
407
- matching files under `~/Library/Application Support/concord/` on macOS, and the
408
- roaming AppData config directory on Windows.
407
+ `XDG_CONFIG_HOME` is set, Concord uses `config.toml` for app options and `keymap.toml` for key settings.
408
+ Otherwise it uses the platform config directory.
409
+
410
+ Local UI state and plaintext fallback credentials are stored under Concord's
411
+ state directory instead. If `XDG_STATE_HOME` is set, Concord uses
412
+ `$XDG_STATE_HOME/concord/state.toml` and
413
+ `$XDG_STATE_HOME/concord/credentials.toml`. Otherwise it uses
414
+ `~/.local/state/concord/state.toml` and
415
+ `~/.local/state/concord/credentials.toml`.
409
416
 
410
417
  You can change some configuration from the in-app Options menu, and Concord saves them back
411
418
  to `config.toml`. Key settings are read from `keymap.toml`.
@@ -437,6 +444,11 @@ circular_avatars = false
437
444
  # Send custom emoji your account cannot use directly as image links.
438
445
  emojis_as_links = false
439
446
 
447
+ [credentials]
448
+ # Credential storage: auto, keychain, or plain.
449
+ # auto tries the system keychain first and falls back to the state file.
450
+ store = "auto"
451
+
440
452
  [notifications]
441
453
  # Show desktop notifications for Discord messages that pass notification rules.
442
454
  desktop_notifications = true
@@ -483,6 +495,12 @@ voice_output_volume = 100
483
495
  This setting only applies to attachment, embed, and attachment viewer previews.
484
496
  Avatars and custom emoji keep their separate small-image behavior.
485
497
 
498
+ `credentials.store` supports these values:
499
+
500
+ - `auto`: try the system keychain first, then fall back to the state-file credential store.
501
+ - `keychain`: use only the system keychain. If keychain storage is unavailable, the token is not saved.
502
+ - `plain`: use only the plain-text state-file credential store.
503
+
486
504
  <details>
487
505
  <summary>Default keymap config</summary>
488
506
 
@@ -491,6 +509,7 @@ Avatars and custom emoji keep their separate small-image behavior.
491
509
  leader = "space"
492
510
  StartComposer = "i"
493
511
  OpenPaneFilter = "/"
512
+ ClosePopup = "q"
494
513
  FocusGuildPane = "1"
495
514
  FocusChannelPane = "2"
496
515
  FocusMessagePane = "3"
@@ -565,13 +584,13 @@ ShowProfile = "p"
565
584
  [keymap.composer]
566
585
  OpenEditor = "<C-e>"
567
586
  PasteClipboard = "<C-v>"
568
- InsertNewline = { keys = ["<S-enter>", "<C-enter>", "<A-enter>"] }
587
+ InsertNewline = { keys = ["<C-j>", "<S-enter>", "<C-enter>", "<A-enter>"] }
569
588
  Submit = "enter"
570
589
  Close = "esc"
571
590
  ClearInput = "<C-c>"
572
591
  RemoveLastAttachment = "delete"
573
592
  DeletePreviousChar = "backspace"
574
- DeletePreviousWord = { keys = ["<C-backspace>", "<C-w>"] }
593
+ DeletePreviousWord = { keys = ["<A-backspace>", "<C-backspace>", "<C-w>"] }
575
594
  MoveCursorUp = "up"
576
595
  MoveCursorDown = "down"
577
596
  MoveCursorWordLeft = "<C-left>"
@@ -632,10 +651,10 @@ No. If Discord requires a CAPTCHA during login, use token login instead.
632
651
 
633
652
  ## Security
634
653
 
635
- - 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.
636
- - On Unix, the credential's parent directory is created with `0700` and the credential file with `0600` permissions.
637
- - 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.
638
- - No system keychain integration yet.
654
+ - By default, tokens are stored in the system keychain when available.
655
+ - On Linux, keychain storage uses Secret Service when a compatible service is available.
656
+ - 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.
657
+ - On Unix, the fallback credential's parent directory is created with `0700` and the credential file with `0600` permissions.
639
658
 
640
659
  ## Contributing
641
660
 
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "GPL-3.0-only",
25
25
  "name": "@chojs23/concord",
26
- "version": "2.1.13"
26
+ "version": "2.2.1"
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.13"
545
+ "version": "2.2.1"
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.13"
3
+ "https://github.com/chojs23/concord/releases/download/v2.2.1"
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.13",
96
+ "version": "2.2.1",
97
97
  "volta": {
98
98
  "node": "18.14.1",
99
99
  "npm": "9.5.0"