@chojs23/concord 2.1.13 → 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,7 +2,21 @@
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.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
6
20
 
7
21
  ### Bug Fixes
8
22
 
@@ -707,9 +721,18 @@ All notable changes to this project will be documented in this file.
707
721
 
708
722
  ### Bug Fixes
709
723
 
710
- - _(flake)_ Use crane (#4) in [#4](https://github.com/chojs23/concord/pull/4) by @M4jor-Tom
711
724
  - Keep original image width:height ratio (#6) in [#6](https://github.com/chojs23/concord/pull/6) by @chojs23
712
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
+
713
736
  ### Documentation
714
737
 
715
738
  - Add CONTRIBUTING.md by @chojs23
@@ -724,10 +747,6 @@ All notable changes to this project will be documented in this file.
724
747
 
725
748
  - Enable generated github release notes by @chojs23
726
749
 
727
- ### Cd
728
-
729
- - Chain crates publish after release by @chojs23
730
-
731
750
  ### New Contributors
732
751
 
733
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
 
@@ -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
 
@@ -407,6 +411,13 @@ Otherwise it uses the platform config directory. The usual fallback is
407
411
  matching files under `~/Library/Application Support/concord/` on macOS, and the
408
412
  roaming AppData config directory on Windows.
409
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
+
410
421
  You can change some configuration from the in-app Options menu, and Concord saves them back
411
422
  to `config.toml`. Key settings are read from `keymap.toml`.
412
423
 
@@ -437,6 +448,11 @@ circular_avatars = false
437
448
  # Send custom emoji your account cannot use directly as image links.
438
449
  emojis_as_links = false
439
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
+
440
456
  [notifications]
441
457
  # Show desktop notifications for Discord messages that pass notification rules.
442
458
  desktop_notifications = true
@@ -483,6 +499,12 @@ voice_output_volume = 100
483
499
  This setting only applies to attachment, embed, and attachment viewer previews.
484
500
  Avatars and custom emoji keep their separate small-image behavior.
485
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
+
486
508
  <details>
487
509
  <summary>Default keymap config</summary>
488
510
 
@@ -491,6 +513,7 @@ Avatars and custom emoji keep their separate small-image behavior.
491
513
  leader = "space"
492
514
  StartComposer = "i"
493
515
  OpenPaneFilter = "/"
516
+ ClosePopup = "q"
494
517
  FocusGuildPane = "1"
495
518
  FocusChannelPane = "2"
496
519
  FocusMessagePane = "3"
@@ -565,13 +588,13 @@ ShowProfile = "p"
565
588
  [keymap.composer]
566
589
  OpenEditor = "<C-e>"
567
590
  PasteClipboard = "<C-v>"
568
- InsertNewline = { keys = ["<S-enter>", "<C-enter>", "<A-enter>"] }
591
+ InsertNewline = { keys = ["<C-j>", "<S-enter>", "<C-enter>", "<A-enter>"] }
569
592
  Submit = "enter"
570
593
  Close = "esc"
571
594
  ClearInput = "<C-c>"
572
595
  RemoveLastAttachment = "delete"
573
596
  DeletePreviousChar = "backspace"
574
- DeletePreviousWord = { keys = ["<C-backspace>", "<C-w>"] }
597
+ DeletePreviousWord = { keys = ["<A-backspace>", "<C-backspace>", "<C-w>"] }
575
598
  MoveCursorUp = "up"
576
599
  MoveCursorDown = "down"
577
600
  MoveCursorWordLeft = "<C-left>"
@@ -632,10 +655,10 @@ No. If Discord requires a CAPTCHA during login, use token login instead.
632
655
 
633
656
  ## Security
634
657
 
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.
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.
639
662
 
640
663
  ## Contributing
641
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.13"
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.13"
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.13"
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.13",
96
+ "version": "2.2.0",
97
97
  "volta": {
98
98
  "node": "18.14.1",
99
99
  "npm": "9.5.0"