concord 2.2.13

A terminal user interface client for Discord
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
# Changelog

All notable changes to this project will be documented in this file.

## [2.2.13] - 2026-07-04

### Features

- Add support for playing audio attachments (#240) in [#240]https://github.com/chojs23/concord/pull/240 by @LmanTW

### Refactor

- _(tui)_ Standardize popup action buttons by @chojs23

### Nix

- Move package derivation to nix/package.nix by @chojs23

## [2.2.12] - 2026-07-02

### Features

- _(presence)_ Relay Rich Presence from local apps (#239) in [#239]https://github.com/chojs23/concord/pull/239 by @chojs23

### Refactor

- _(tui)_ Unify custom-emoji image overlays into single module by @chojs23

## [2.2.11] - 2026-07-01

### Bug Fixes

- Respect user nitro and guild boost restrictions (#234) in [#234]https://github.com/chojs23/concord/pull/234 by @chojs23
- Fix missing default profile avatar in profile popup by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Add reply pings toggle option (#232) in [#232]https://github.com/chojs23/concord/pull/232 by @chojs23
- Allow file drop without needing to already be composing (#212) (#227) in [#227]https://github.com/chojs23/concord/pull/227 by @LmanTW
- Support bare array keymap bindings (#233) in [#233]https://github.com/chojs23/concord/pull/233 by @chojs23

### Refactor

- _(tests)_ Construct AppEvent variants via shared fixtures by @chojs23

## [2.2.10] - 2026-06-30

### Bug Fixes

- Fix qwerty shortkey shadows numeric keys by @chojs23
- Fix missing pinned post (#231) in [#231]https://github.com/chojs23/concord/pull/231 by @chojs23
- Show fresh servers missing from guild_folders at top of server pane by @chojs23

### Miscellaneous Tasks

- Consolidate config load by @chojs23

### Refactor

- _(tui)_ Unify popup scrolling on shared scrolloff viewport by @chojs23

## [2.2.9] - 2026-06-29

### Bug Fixes

- Support 10ms Discord voice packets (#229) in [#229]https://github.com/chojs23/concord/pull/229 by @chojs23

### Documentation

- Update changelog by @chojs23
- Update readme by @chojs23

### Features

- Add a separate image quality option for the attachment viewer (#224) in [#224]https://github.com/chojs23/concord/pull/224 by @LmanTW
- Add support for disabling keymap shortcuts by @chojs23
- Make external media playback opt-in (#230) in [#230]https://github.com/chojs23/concord/pull/230 by @chojs23
- Add underline and strikethrough support to message formatting (#228) in [#228]https://github.com/chojs23/concord/pull/228 by @LmanTW

### Miscellaneous Tasks

- Remove legacy tests by @chojs23

### New Contributors

- @LmanTW made their first contribution in [#228]https://github.com/chojs23/concord/pull/228

## [2.2.8] - 2026-06-26

### Bug Fixes

- Fix double redraw by @chojs23
- Make config parsing field-level tolerant so one bad value no longer discards other by @chojs23

### Documentation

- Update readme by @chojs23
- Update readme by @chojs23

### Features

- Block send message dm to fresh user (#222) in [#222]https://github.com/chojs23/concord/pull/222 by @chojs23
- Add private/group dm voice call (#223) in [#223]https://github.com/chojs23/concord/pull/223 by @chojs23

### Miscellaneous Tasks

- Fmt by @chojs23

## [2.2.7] - 2026-06-24

### Bug Fixes

- Render overlay popups within the full frame area by @chojs23

### Features

- Update post create ui by @chojs23
- Add post actions by @chojs23
- Add thread actions (#215) in [#215]https://github.com/chojs23/concord/pull/215 by @chojs23
- Add threads and forums to channel switcher (#216) in [#216]https://github.com/chojs23/concord/pull/216 by @chojs23
- Add notification inbox (#217) in [#217]https://github.com/chojs23/concord/pull/217 by @chojs23

### Miscellaneous Tasks

- Fmt by @chojs23

### Performance

- Implement per-image placement-diff rendering by @chojs23

## [2.2.6] - 2026-06-22

### Features

- Image protocol pref (#209) in [#209]https://github.com/chojs23/concord/pull/209 by @chojs23

## [2.2.5] - 2026-06-21

### Documentation

- Update readme by @chojs23

### Features

- Add guild folder settings by @chojs23
- Use custom notification sound instead of system generated sound by @chojs23
- Add create post by @chojs23
- Add composer attachment preview by @chojs23

## [2.2.4] - 2026-06-19

### Bug Fixes

- Hide empty channel categories if user doesn't have permission (#203) in [#203]https://github.com/chojs23/concord/pull/203 by @chojs23
- Update guild folders and order by UserSettingsUpdate by @chojs23

### Features

- Rename folder by @chojs23
- Add suppress embeds (#205) in [#205]https://github.com/chojs23/concord/pull/205 by @chojs23

### Refactor

- Preserve boundary payloads consistently by @chojs23

### New Contributors

- @fuguesoft made their first contribution in [#200]https://github.com/chojs23/concord/pull/200

## [2.2.3] - 2026-06-18

### Bug Fixes

- Limit image protocol refresh to modal popup open/close by @chojs23
- Fix thread-kind reuse by @chojs23
- Fix mention detecting by authoritative Discord gateway fields (#198) in [#198]https://github.com/chojs23/concord/pull/198 by @chojs23

### Features

- Add sign-out feature (#202) in [#202]https://github.com/chojs23/concord/pull/202 by @chojs23

### Miscellaneous Tasks

- Extract app helper modules by @chojs23

### Refactor

- Split media cache modules by resource by @chojs23
- Refactor media structure and add jobs by @chojs23
- Extract dashboard event reducer by @chojs23
- Redesign modules by @chojs23
- Reuse message payloads in app events by @chojs23
- Merge presence updates into optional guild event by @chojs23
- Refactor some states duplication by @chojs23

## [2.2.2] - 2026-06-14

### Documentation

- Update readme by @chojs23

### Features

- Stream attachment saves with progress UI by @chojs23
- Add mpv video play (#182) in [#182]https://github.com/chojs23/concord/pull/182 by @chojs23

## [2.2.1] - 2026-06-12

### Bug Fixes

- Picker scroll by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Notify for active-channel messages while the terminal is unfocused (#177) in [#177]https://github.com/chojs23/concord/pull/177 by @cultlead3r
- Add built-in discord commands (#179) in [#179]https://github.com/chojs23/concord/pull/179 by @chojs23
- Persist TUI side pane visibility (#180) in [#180]https://github.com/chojs23/concord/pull/180 by @chojs23

## [2.2.0] - 2026-06-10

### Documentation

- Update homebrew installation by @chojs23
- Update image by @chojs23

### Features

- Wrap message text at word boundaries (#174) in [#174]https://github.com/chojs23/concord/pull/174 by @chojs23
- Use system keychain and move ui state to XDG_STATE_HOME (#173) in [#173]https://github.com/chojs23/concord/pull/173 by @chojs23

## [2.1.13] - 2026-06-07

### Bug Fixes

- _(tui)_ Preserve member search selection across member cache refreshes by @chojs23
- _(tui)_ Prevent popup residue on terminal images by @chojs23
- Retain member cache for more recent guilds by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Add --check-config validation command by @chojs23
- _(tui)_ Keep voice indicators visible after name truncation by @chojs23

## [2.1.12] - 2026-06-07

### Bug Fixes

- _(deps)_ Lock ratatui-image by @chojs23

### Miscellaneous Tasks

- _(ci)_ Remove legacy Darwin SDK framework inputs from Nix flake by @chojs23

## [2.1.11] - 2026-06-07

### Features

- Add version flag by @chojs23

### Miscellaneous Tasks

- Add npm installer (#165) in [#165]https://github.com/chojs23/concord/pull/165 by @chojs23

## [2.1.10] - 2026-06-06

### Bug Fixes

- Show macOS notifications on terminals that don't set TERM_PROGRAM set (#160) in [#160]https://github.com/chojs23/concord/pull/160 by @cultlead3r
- Fix slash command invocation to preserve selected command identity (#162) in [#162]https://github.com/chojs23/concord/pull/162 by @chojs23
- Highlight TypeScript code fences as JavaScript by @chojs23

### Features

- Add syntax highlighting (#158) in [#158]https://github.com/chojs23/concord/pull/158 by @ToborWinner
- Use pure rust syntect backend by @chojs23
- Add profile configuration (#163) in [#163]https://github.com/chojs23/concord/pull/163 by @chojs23

### New Contributors

- @cultlead3r made their first contribution in [#160]https://github.com/chojs23/concord/pull/160

## [2.1.9] - 2026-06-03

### Bug Fixes

- Force image protocol refresh after popup overlay changes (#154) in [#154]https://github.com/chojs23/concord/pull/154 by @chojs23
- Prevent half-page message scroll from skipping content (#155) in [#155]https://github.com/chojs23/concord/pull/155 by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Load newer message when message cache has gap (#153) in [#153]https://github.com/chojs23/concord/pull/153 by @chojs23
- Reconnect (#156) in [#156]https://github.com/chojs23/concord/pull/156 by @chojs23

### Refactor

- Unify notification audio playback by @chojs23

## [2.1.8] - 2026-06-01

### Bug Fixes

- Remove macos notification fallback by @chojs23

### Features

- Add emojis as links (#144) in [#144]https://github.com/chojs23/concord/pull/144 by @van-nessing
- Add Nitro-aware custom emoji handling by @chojs23
- Added option for notification icon (#148) in [#148]https://github.com/chojs23/concord/pull/148 by @ToborWinner
- Add composer option and move emoji_as_link to composer option by @chojs23

### New Contributors

- @ToborWinner made their first contribution in [#148]https://github.com/chojs23/concord/pull/148
- @van-nessing made their first contribution in [#144]https://github.com/chojs23/concord/pull/144

## [2.1.7] - 2026-05-29

### Bug Fixes

- Fix fenced code block rendering for pasted multi-block messages by @chojs23
- Fix owner/admin delete permission being mistaken for unknown state by @chojs23

### Features

- Add Discord message/member search (#141) in [#141]https://github.com/chojs23/concord/pull/141 by @chojs23

## [2.1.6] - 2026-05-29

### Bug Fixes

- _(voice)_ Isolate audio path on a dedicated runtime and pace sends off the mic clock (#138) in [#138]https://github.com/chojs23/concord/pull/138 by @ibarrick
- _(voice)_ Make audio transmit shutdown and pacing robust by @chojs23

### Features

- Add configurable real voice join and leave notification sounds (#139) in [#139]https://github.com/chojs23/concord/pull/139 by @chojs23

## [2.1.5] - 2026-05-28

### Bug Fixes

- Schedule read ack when catching up to latest messages by @chojs23

### Documentation

- Clarify keymap action names warning in README by @chojs23
- Document scoped pane action shortcuts as single-key only by @chojs23

### Features

- Add zoom feature for images and adjust sizing logic for images in popout window (#133) in [#133]https://github.com/chojs23/concord/pull/133 by @ibarrick
- Allow leaving of server (#129) in [#129]https://github.com/chojs23/concord/pull/129 by @nexxai
- Add goto key group by @chojs23
- Message action keymap by @chojs23

### Refactor

- Use generic popup by @chojs23
- Group tui runtime plumbing by @chojs23

### New Contributors

- @ibarrick made their first contribution in [#133]https://github.com/chojs23/concord/pull/133

## [2.1.4] - 2026-05-26

### Bug Fixes

- Add dependencies for cargo publish by @chojs23

### Features

- Update keymaps by @chojs23
- Show keymap help with active shortcut labels by @chojs23

## [2.1.3] - 2026-05-26

### Bug Fixes

- Enable voice playback by default by @chojs23

### Documentation

- Update README by @chojs23

## [2.1.2] - 2026-05-25

### Bug Fixes

- Mark threads created by the current user as joined by @chojs23

### Features

- Support pane resize keybinding by @chojs23
- Guild role by @chojs23
- Handle chnnel pins update event by @chojs23
- Add reaction shortcut for selected messages (#127) in [#127]https://github.com/chojs23/concord/pull/127 by @chojs23
- Handle discord gateway connection error by @chojs23

### Miscellaneous Tasks

- Add paths-ignore to ci workflow by @chojs23

## [2.1.1] - 2026-05-25

### Bug Fixes

- Fix expensive channel sidebar build by grouping joined threads once by @chojs23

### Documentation

- Update readme for keymap example by @chojs23
- Update readme for powershell installer by @chojs23

### Refactor

- Fixture builders by @chojs23

## [2.1.0] - 2026-05-24

### Bug Fixes

- Fix clippy build errors by @chojs23
- Fix non-Linux voice playback release builds by @chojs23
- URL picker from message action menu and preserve case-sensitive action shortcuts by @chojs23
- Allow key modifier for action shortcut by @chojs23
- Handle thread chnnel update events by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Keymap customization (#126) in [#126]https://github.com/chojs23/concord/pull/126 by @chojs23
- Support custom composer keymaps by @chojs23
- Subcommand picker by @chojs23
- Message pane actions by @chojs23
- Add quit command by @chojs23
- Add attachment viewer by @chojs23

### Miscellaneous Tasks

- Release cache warm by @chojs23

### Refactor

- Split Discord event payload types by @chojs23
- Move Discord module tests out of large files by @chojs23
- Move facade tests into child modules by @chojs23
- Split tui ui tests by @chojs23

## [2.0.7] - 2026-05-22

### Bug Fixes

- Avoid report all keys as escape code by @chojs23
- Improve clipboard paste priority by @chojs23
- Fix stale MESSAGE_ACK from reopening unread state (#119) in [#119]https://github.com/chojs23/concord/pull/119 by @chojs23
- _(tui)_ Keep guild filter pane width stable by @chojs23
- Fix forum preview message by @chojs23

### Documentation

- Update keybinding docs by @chojs23

### Features

- Add optional circular avatar masking (#121) in [#121]https://github.com/chojs23/concord/pull/121 by @StaszeKrk

### Refactor

- Refactor repeated test DTO by @chojs23
- Move tui state to client backend by @chojs23
- Move TUI backend request handling into Discord client by @chojs23

### New Contributors

- @StaszeKrk made their first contribution in [#121]https://github.com/chojs23/concord/pull/121
- @CX330Blake made their first contribution in [#117]https://github.com/chojs23/concord/pull/117

## [2.0.6] - 2026-05-21

### Bug Fixes

- Fix slash command guild scope payload by @chojs23

### Features

- Better server/channel collapsing (#105) in [#105]https://github.com/chojs23/concord/pull/105 by @nexxai
- Support slash commands (#90) in [#90]https://github.com/chojs23/concord/pull/90 by @nexxai

### Performance

- _(tui)_ Suppress image redraws for sidebar updates by @chojs23

### Refactor

- Group DashboardState internals into substates by @chojs23
- Split tui state test module by @chojs23

## [2.0.5] - 2026-05-20

### Documentation

- Update composer keybinding docs by @chojs23

### Features

- Handle MessageDeleteBulk event by @chojs23
- Add clipboard image paste (#114) in [#114]https://github.com/chojs23/concord/pull/114 by @chojs23
- Include embed URLs in open url picker (#115) in [#115]https://github.com/chojs23/concord/pull/115 by @chojs23

## [2.0.4] - 2026-05-20

### Bug Fixes

- _(tui)_ Detect URLs in reply quotes and forwarded messages (#107) in [#107]https://github.com/chojs23/concord/pull/107 by @SAY-5
- Use transient typing display names for TYPING_START by @chojs23
- Clear typing indicator when a typer sends a message by @chojs23
- Composer newline fallbacks (#112) in [#112]https://github.com/chojs23/concord/pull/112 by @chojs23
- Fix bold italic markdown rendering (#113) in [#113]https://github.com/chojs23/concord/pull/113 by @chojs23

### Documentation

- Require related issues for pr by @chojs23
- Update readme by @chojs23

### Features

- Add mute,deafen state on header by @chojs23
- Add ctrl+w composer word deletion by @chojs23

### Performance

- _(tui)_ Improve member sidebar loading and rendering by @chojs23

### New Contributors

- @SAY-5 made their first contribution in [#107]https://github.com/chojs23/concord/pull/107

## [2.0.3] - 2026-05-19

### Bug Fixes

- Stop auto-fetching visible user profiles by @chojs23
- Use gateway for fetch message authors info by @chojs23
- Dedupe message author member hydration by @chojs23
- Load pinned messages on demand by @chojs23
- Debounce member list subscriptions by @chojs23
- Fix forum preview author hydration through gateway by @chojs23
- Dedupe gateway channel subscriptions by @chojs23
- Cap reaction user pagination by @chojs23
- Dedupe duplicate voice state updates by @chojs23
- Op37 subscription dedupe reset by @chojs23

### Documentation

- Update changelog by @chojs23

### Features

- Change composer Ctrl+Backspace to delete words and Delete to remove attachments by @chojs23

### Miscellaneous Tasks

- Format by @chojs23

## [2.0.2] - 2026-05-19

### Bug Fixes

- Secure URL opening from messages by @chojs23
- Fix composer draft clearing on mouse focus change (#100) in [#100]https://github.com/chojs23/concord/pull/100 by @chojs23

### Features

- Add support for detecting links in messages and opening them in the default browser (#86) in [#86]https://github.com/chojs23/concord/pull/86 by @nexxai
- Focus next pane after selection (#102) in [#102]https://github.com/chojs23/concord/pull/102 by @chojs23
- Add query-based guild member search for mention autocomplete (#103) in [#103]https://github.com/chojs23/concord/pull/103 by @chojs23
- Improve channel switcher ranking and recents by @chojs23

### Performance

- Reduce Discord snapshot churn by @chojs23
- Reduce TUI redraw allocations by @chojs23
- Cache channel switcher items while open by @chojs23

## [2.0.1] - 2026-05-18

### Bug Fixes

- _(voice)_ Reduce microphone tearing during transmit (#96) in [#96]https://github.com/chojs23/concord/pull/96 by @chojs23

### Features

- Centralize app key handling and shortcut labels (#89) in [#89]https://github.com/chojs23/concord/pull/89 by @chojs23

### Miscellaneous Tasks

- Add system Opus to Nix build inputs by @chojs23
- Enable voice-playback for nix build by @chojs23
- Add Twilight attribution for Discord IDs (#95) by @chojs23

## [2.0.0] - 2026-05-17

### Bug Fixes

- Reconnect voice gateway after unexpected disconnect by @chojs23
- Mute voice playback while deafened by @chojs23
- Ignore silent RTP for remote speaking by @chojs23
- Show local speaking while alone in voice by @chojs23
- Keep local speaking visible during redraw debounce by @chojs23
- Show local mic activity before transmit confirmation by @chojs23
- Move composer cursor vertically (#82) in [#82]https://github.com/chojs23/concord/pull/82 by @chojs23
- Prefer text for native clipboard paste by @chojs23
- Stabilize voice sound (#84) in [#84]https://github.com/chojs23/concord/pull/84 by @chojs23
- Fix speaking state by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Join/Leave voice channel by @chojs23
- Add voice shutdown cleanup and active voice UI indicators by @chojs23
- Show voice connection status by @chojs23
- Add voice websocket connection by @chojs23
- Add DAVE signaling prototype using davey by @chojs23
- Add voice gateway lifecycle status reporting and cleanup hardening by @chojs23
- Add DAVE media-frame unwrap after RTP transport decrypt by @chojs23
- Add receive-only Opus decode worker by @chojs23
- Add optional feature-gated Discord voice playback backend by @chojs23
- Capture ALSA diagnostics into Concord logs by @chojs23
- Support u8 stream output by @chojs23
- Add local microphone transmit by @chojs23
- Gated capture-only microphone by @chojs23
- Resampling by @chojs23
- Highlight active voice speakers by @chojs23
- Active speaker state by @chojs23
- Add microphone sensitivity option by @chojs23
- Mic sensitivity by @chojs23
- Add voice channel join and leave sounds by @chojs23
- Add volume config and shortcut for voice action by @chojs23
- Voice chat (#78) in [#78]https://github.com/chojs23/concord/pull/78 by @chojs23
- Better clipboard (#81) by @chojs23

### Miscellaneous Tasks

- Remove performance measurement logs by @chojs23
- Add debug log for voice websocket by @chojs23
- Treat DaveOutboundNotReady as transient DAVE setup log noise when microphone transmit works by @chojs23
- Clippy by @chojs23

### Performance

- Reduce microphone transmit latency by dropping stale PCM frames by @chojs23

### Revert

- Remove redundant local speaking fallback fixes by @chojs23
- Clipboard (#83) in [#83]https://github.com/chojs23/concord/pull/83 by @chojs23

## [1.4.2] - 2026-05-16

### Bug Fixes

- _(search)_ Improve fuzzy search logic (#74) in [#74]https://github.com/chojs23/concord/pull/74 by @80avin

### Miscellaneous Tasks

- Remove temp diagnostic by @chojs23

### Performance

- Cache avatar render protocols by clipping and size to avoid per-frame re-encoding by @chojs23
- Cache message content row metrics to reduce repeated per-frame formatting by @chojs23
- Reduce channel upsert UI repair work by @chojs23

### New Contributors

- @80avin made their first contribution in [#74]https://github.com/chojs23/concord/pull/74

## [1.4.1] - 2026-05-15

### Bug Fixes

- Hydrate new forum post previews and make forum unread/read behavior match normal channels by @chojs23

### Documentation

- Update readme by @chojs23
- Add markdown example image by @chojs23

### Features

- Add already reacted emojis to top of picker list (attempt #2) (#64) in [#64]https://github.com/chojs23/concord/pull/64 by @nexxai
- Minimal markdown support by @chojs23
- Render voice channel participations by @chojs23
- Show live indicator for streaming voice participants by @chojs23

### Miscellaneous Tasks

- Add some comment for constants by @chojs23

### Performance

- Bound discord caches and split snapshot into selective areas by @chojs23

### Refactor

- Split DiscordState tests by @chojs23

## [1.4.0] - 2026-05-14

### Bug Fixes

- Update channel pane search and server header behavior by @chojs23
- Use XDG_CONFIG_HOME env for mac by @chojs23
- Usernames (#60) in [#60]https://github.com/chojs23/concord/pull/60 by @lisk77
- Fix visible member profile requests to follow rendered member rows by @chojs23
- Fix member pane emoji width overflow by @chojs23
- Keep timestamp-only embeds by @chojs23
- Preserve embed markdown details by @chojs23
- Remove r key reaction shortcut by @chojs23
- Modify image viewer size and allign image centered by @chojs23
- Clarify composer edit and reply modes by @chojs23
- Fix channel pane mouse row offset after guild header by @chojs23
- Align message action menu shortcuts with message pane shortcuts by @chojs23

### Documentation

- Update readme for message shortcut by @chojs23

### Features

- Expanding support for embedded content (#65) in [#65]https://github.com/chojs23/concord/pull/65 by @nexxai
- Add toast alarm by @chojs23

### Refactor

- Centralize display-name by @chojs23
- Remove configurable keybindings (#71) in [#71]https://github.com/chojs23/concord/pull/71 by @chojs23
- Remove redundant preview preset by @chojs23
- Refactor keyboard shortcuts by @chojs23

### New Contributors

- @SeniorMars made their first contribution in [#57]https://github.com/chojs23/concord/pull/57

## [1.3.3] - 2026-05-13

### Bug Fixes

- Align composer cursor with manual text wrapping (#50) in [#50]https://github.com/chojs23/concord/pull/50 by @AnalogCyan
- Fix composer multiline height wrapping to match rendered prefixes by @chojs23
- Message action menu mouse hitbox geometry by @chojs23

### Features

- Group messages based on sender (#56) in [#56]https://github.com/chojs23/concord/pull/56 by @nexxai
- Composer draft preservation (#61) in [#61]https://github.com/chojs23/concord/pull/61 by @chojs23
- Add Discord permission gates for message moderation actions (#62) in [#62]https://github.com/chojs23/concord/pull/62 by @chojs23
- Image viewer key helper by @chojs23
- Make message rows with larger avatars and stable selected grouped timestamps (#63) by @chojs23

### Refactor

- Refactor message row layout into modules and shared metrics by @chojs23
- Move forum-post viewport helpers by @chojs23
- Split discord state domain by @chojs23
- Split tui modules by @chojs23
- Gateway parser and TUI popup modules by @chojs23

### New Contributors

- @AnalogCyan made their first contribution in [#50]https://github.com/chojs23/concord/pull/50

## [1.3.2] - 2026-05-12

### Bug Fixes

- Activity emojis (#28) in [#28]https://github.com/chojs23/concord/pull/28 by @lisk77
- Align cursor position with newline-aware composer display (#45) in [#45]https://github.com/chojs23/concord/pull/45 by @kimjune01
- Fix reply edit state and complete reply attachment actions by @chojs23
- Reuse member presence marker for DM channel status dots by @chojs23
- Decoupe per-user note fetch from profile warm up by @chojs23
- Remove cached Discord state persistence (#52) in [#52]https://github.com/chojs23/concord/pull/52 by @chojs23

### Features

- Remove footer and last status by @chojs23
- Loading indicator by @chojs23
- Show offline members with an empty circle presence marker by @chojs23
- Surface unread channels and server-name search in channel switcher by @chojs23

### Miscellaneous Tasks

- Use git-cliff for changelog by @chojs23
- Add clippy check by @chojs23
- Clean up comments and simplify required context by @chojs23

### Refactor

- _(tui)_ Remove footer and popup hints (#43) in [#43]https://github.com/chojs23/concord/pull/43 by @chojs23
- Refactor activity rendering with typed ActivityRender struct (#44) in [#44]https://github.com/chojs23/concord/pull/44 by @chojs23
- Change broken dash by @chojs23

### Refacotr

- Rename leader action state and add context-specific action titles by @chojs23

### New Contributors

- @amiralimollaei made their first contribution in [#49]https://github.com/chojs23/concord/pull/49
- @kimjune01 made their first contribution in [#45]https://github.com/chojs23/concord/pull/45

## [1.3.1] - 2026-05-11

### Bug Fixes

- Fix test cache leakage (#31) in [#31]https://github.com/chojs23/concord/pull/31 by @chojs23
- Discord Gateway startup failure (#36) in [#36]https://github.com/chojs23/concord/pull/36 by @chojs23
- Fix muted channels contributing to server unread badges (#37) in [#37]https://github.com/chojs23/concord/pull/37 by @chojs23

### Documentation

- Update readme by @chojs23

### Features

- Add server mark-as-read & active channel ack debounce by @chojs23
- Display online and member count (#16) in [#16]https://github.com/chojs23/concord/pull/16 by @lisk77
- Prefs persistence (#25) in [#25]https://github.com/chojs23/concord/pull/25 by @TobyBridle
- Support muting channels and servers via actions (#26) in [#26]https://github.com/chojs23/concord/pull/26 by @nexxai
- Support all emojis for reactions (#30) in [#30]https://github.com/chojs23/concord/pull/30 by @nexxai
- Add emoji picker and autocomplete in composer (#34) in [#34]https://github.com/chojs23/concord/pull/34 by @chojs23

### Miscellaneous Tasks

- Remove cache warm by @chojs23

### Refactor

- Refactor quick reaction emoji labels to use emojis crate (#32) in [#32]https://github.com/chojs23/concord/pull/32 by @chojs23
- Remove dead test by @chojs23

## [1.3.0] - 2026-05-10

### Bug Fixes

- Prevent scrolling past last message (#12) in [#12]https://github.com/chojs23/concord/pull/12 by @lisk77
- Display of self mutuals (#14) in [#14]https://github.com/chojs23/concord/pull/14 by @lisk77

### Documentation

- Update README.md by @chojs23

### Features

- Support resizing panes (#18) in [#18]https://github.com/chojs23/concord/pull/18 by @nexxai
- _(composer)_ Add CTRL+Left, CTRL+Right word skip (#15) in [#15]https://github.com/chojs23/concord/pull/15 by @TobyBridle
- Add search to reaction picker + allow toggling of reactions (#19) in [#19]https://github.com/chojs23/concord/pull/19 by @nexxai
- Add fuzzy score helper (#21) in [#21]https://github.com/chojs23/concord/pull/21 by @chojs23
- Typo tolerant fuzzy (#22) in [#22]https://github.com/chojs23/concord/pull/22 by @chojs23

### Refactor

- _(composer)_ Use char-safe word boundary helpers (#20) in [#20]https://github.com/chojs23/concord/pull/20 by @chojs23
- Store app files under $XDG_CONFIG_HOME/concord (#23) in [#23]https://github.com/chojs23/concord/pull/23 by @chojs23

### New Contributors

- @lisk77 made their first contribution in [#14]https://github.com/chojs23/concord/pull/14
- @nexxai made their first contribution in [#19]https://github.com/chojs23/concord/pull/19
- @TobyBridle made their first contribution in [#15]https://github.com/chojs23/concord/pull/15

## [1.2.0] - 2026-05-09

### Documentation

- Update readme for upload attachment by @chojs23
- Remove some composer key usage by @chojs23

### Features

- Add leader by @chojs23
- Search channel with fuzzy by @chojs23
- Add new version available notice at header by @chojs23

### Miscellaneous Tasks

- Allign Release build toolchain with CI chace warmer by @chojs23

### Refactor

- Move options key to leader by @chojs23

## [1.1.2] - 2026-05-09

### Bug Fixes

- Redraw visible unread sidebar updates during image rendering by @chojs23
- Active-channel auto-ack by @chojs23

### Features

- Multipart file upload (#8) in [#8]https://github.com/chojs23/concord/pull/8 by @chojs23

### Miscellaneous Tasks

- Tighten dist profile with full LTO, single codegen unit, and strip by @chojs23

### Tests

- Consolidate redundant split tests by @chojs23

### Cd

- Protect release by @chojs23
- Improve build caching by @chojs23

## [1.1.1] - 2026-05-09

### Bug Fixes

- _(flake)_ Use crane (#4) in [#4]https://github.com/chojs23/concord/pull/4 by @M4jor-Tom
- Keep original image width:height ratio (#6) in [#6]https://github.com/chojs23/concord/pull/6 by @chojs23

### Documentation

- Add CONTRIBUTING.md by @chojs23
- Update readme by @chojs23
- Update readme by @chojs23

### Features

- Add terminal notification (#5) in [#5]https://github.com/chojs23/concord/pull/5 by @chojs23

### Miscellaneous Tasks

- Enable generated github release notes by @chojs23

### Cd

- Chain crates publish after release by @chojs23

### New Contributors

- @M4jor-Tom made their first contribution in [#4]https://github.com/chojs23/concord/pull/4

## [1.0.3] - 2026-05-08

### Bug Fixes

- Install rustls ring provider by @chojs23
- Surface user-account READY via raw JSON fallback and silence twilight deserialize errors by @chojs23
- Expand user-account fallback parser to cover guild, channel, message, and member events by @chojs23
- Make server folder toggles reliable by @chojs23
- Send raw user token for REST requests by @chojs23
- Start dashboard without message selection by @chojs23
- Wait for channel selection before showing messages by @chojs23
- Keep pane scrolling state-owned by @chojs23
- Align scroll height with pane content by @chojs23
- Keep startup channel pane inactive by @chojs23
- Preserve channel cursor across DM sorting by @chojs23
- Retry failed message history loads by @chojs23
- Require selected channel before composing by @chojs23
- Use text color for active selections by @chojs23
- Enable modified key reporting by @chojs23
- Keep proxy-only attachment URLs by @chojs23
- Disable attachment open shortcut by @chojs23
- Render image messages inline by @chojs23
- Render previews while scrolling by @chojs23
- Preview all visible images by @chojs23
- Keep image previews anchored by @chojs23
- Keep preview scrolling row-aware by @chojs23
- Dispatch image preview requests by @chojs23
- Scale image preview height by @chojs23
- Reduce wide preview spacing by @chojs23
- Avoid upscaling small previews by @chojs23
- Keep preview items within scroll bounds by @chojs23
- Preserve image previews in scrolloff by @chojs23
- Render clipped image previews by @chojs23
- Classify video attachments separately by @chojs23
- Skip videos in image preview layout by @chojs23
- Label video attachments in messages by @chojs23
- Handle QR captcha without browser fallback by @chojs23
- Align forwarded image preview targets by @chojs23
- Dim forwarded metadata line by @chojs23
- Separate reply preview author by @chojs23
- Label unsupported message types by @chojs23
- Filter message actions by subtype by @chojs23
- Remove poll results action by @chojs23
- Remove unavailable poll vote action by @chojs23
- Preserve newest messages during pagination by @chojs23
- Hide overflowing image previews by @chojs23
- Wrap message content lines by @chojs23
- Use display width for message wrapping by @chojs23
- Scroll messages by rendered line by @chojs23
- Clamp message scroll by rendered rows by @chojs23
- Separate message selection and viewport scroll by @chojs23
- Avoid message selection overflow by @chojs23
- Text clipping by @chojs23
- Use guild aliases for message authors by @chojs23
- Clip message rows by display width by @chojs23
- Remove some unnecessary env by @chojs23
- Use concord logging settings by @chojs23
- Use concord credential path by @chojs23
- Bottom align initial message viewport by @chojs23
- Hide avatar placeholder on message content rows by @chojs23
- Keep message highlight out of avatar column by @chojs23
- Remove bold from selection highlight by @chojs23
- Show message times in local timezone by @chojs23
- Align preview rows with rendered mentions by @chojs23
- Render mentions from message metadata by @chojs23
- Preserve mention metadata across merges by @chojs23
- Prefer guild aliases for mentions by @chojs23
- Normalize mention highlight ranges by @chojs23
- Add default app constructor by @chojs23
- Simplify mention highlight filtering by @chojs23
- Clear stale message update metadata by @chojs23
- Avoid download filename races by @chojs23
- Send real Discord replies by @chojs23
- Load custom guild emojis for reactions by @chojs23
- Bound image preview cache memory by @chojs23
- Move image preview decoding off tui loop by @chojs23
- Render user join messages by @chojs23
- Show known system message labels by @chojs23
- Cache Discord thread gateway channels by @chojs23
- Cache Discord member chunks by @chojs23
- Request members for active guilds by @chojs23
- Group members by Discord roles by @chojs23
- Truncate member names by display width by @chojs23
- Preserve DM recipient presence state by @chojs23
- Show DM recipients as members by @chojs23
- Color DM channels by recipient status by @chojs23
- Parse DM recipient presence updates by @chojs23
- Subscribe to active DM presence by @chojs23
- Hydrate active guild member lists by @chojs23
- Include self in group DM recipients by @chojs23
- Update poll vote state by @chojs23
- Submit poll votes together by @chojs23
- Process all member list sync ranges by @chojs23
- Receive unknown gateway events for member list updates by @chojs23
- Open member profile on enter or space by @chojs23
- Show loaded versus total guild members without full member loading by @chojs23
- Scope user profile cache by guild by @chojs23
- Show user profile load failures by @chojs23
- Update member totals on removal events by @chojs23
- Count fallback poll result votes by @chojs23
- Account for separators in image preview targets by @chojs23
- Hide channels that doesn't meet permission by @chojs23
- Guild user role by @chojs23
- Fix startup presense fallback by @chojs23
- Fix overflowing scrollbar by @chojs23
- Fix some ui by @chojs23
- Fall back when keyboard progressive enhancement unsupported by @chojs23
- Image blinking by @chojs23
- Message box by @chojs23
- Fix message viewport junmping with empty space by @chojs23
- Fix message viewport auto-follow by @chojs23
- Remove new dm by @chojs23
- Fix image flicker by suppressing redundant effect-driven redraws by @chojs23
- Clamp horizontal pane scrolling by @chojs23
- Remove inactive message scroll hint by @chojs23
- Preserve active guild mention style by @chojs23
- Prevent member activity row from overflowing panel by @chojs23
- Handle zero Discord snowflake parsing in gateway read state. by @chojs23
- Make qr code more scannable and fix partial paste issue by @chojs23
- Fix self-authored Discord messages being marked as unread by @chojs23

### Documentation

- Add curl install instructions by @chojs23
- Clarify release installer path by @chojs23
- Add example image by @chojs23
- Update readme by @chojs23
- Update example by @chojs23

### Features

- Add configuration and error foundation by @chojs23
- Add Discord gateway and messaging client by @chojs23
- Wire the app runtime to the Discord client by @chojs23
- Add credential-backed token config by @chojs23
- Add terminal dashboard and login UI by @chojs23
- Wire saved-token login into startup by @chojs23
- Store credentials in local file by @chojs23
- Add Discord state model by @chojs23
- Render Discord state panes by @chojs23
- Wire message composer commands by @chojs23
- Add QR code login flow with mode-select login screen by @chojs23
- Rebuild dashboard as Discord-style 4-pane layout with members and presence by @chojs23
- Extract guilds and DM channels from user-account READY and add gateway debug log by @chojs23
- Surface direct messages in the guild pane with @ channel prefix by @chojs23
- Group servers by Discord folders with collapsible headers by @chojs23
- Improve server folder tree rendering by @chojs23
- Store channel tree metadata by @chojs23
- Render collapsible channel tree by @chojs23
- Activate servers and channels on confirm by @chojs23
- Sort direct messages by latest message by @chojs23
- Add recent message history loading by @chojs23
- Add global file logging by @chojs23
- Sort direct messages by recent activity by @chojs23
- Add lazyagent-style message scrolling by @chojs23
- Use consistent scroll behavior across panes by @chojs23
- Clarify server and channel selection by @chojs23
- Mark active server in guild list by @chojs23
- Use four-pane dashboard layout by @chojs23
- Support multiline message input by @chojs23
- Preserve message attachment metadata by @chojs23
- Render message attachments in pane by @chojs23
- Open message attachments externally by @chojs23
- Load attachment preview data by @chojs23
- Render inline image previews by @chojs23
- Preserve forwarded message snapshots by @chojs23
- Preview forwarded attachments by @chojs23
- Render forwarded messages by @chojs23
- Add password login with MFA by @chojs23
- Preserve forwarded source metadata by @chojs23
- Render forwarded message cards by @chojs23
- Separate attachment summary lines by @chojs23
- Render Discord message types by @chojs23
- Render reply previews by @chojs23
- Render poll messages by @chojs23
- Add message actions for polls by @chojs23
- Paginate older message history by @chojs23
- Add partial clipping for inline image by @chojs23
- Render Discord-like message rows by @chojs23
- Render message avatars by @chojs23
- Render user mentions in messages by @chojs23
- Highlight current user mentions by @chojs23
- Add emoji reaction picker by @chojs23
- Support custom guild emoji reactions by @chojs23
- Show custom emoji images in picker by @chojs23
- Show reply target in composer by @chojs23
- Render Discord system message cards by @chojs23
- Queue guild member gateway requests by @chojs23
- Add guild member load command by @chojs23
- Cache Discord role metadata by @chojs23
- Store DM channel recipients by @chojs23
- Render DM recipients in member pane by @chojs23
- Add reaction pin and poll actions by @chojs23
- Render polls in boxed cards by @chojs23
- Render custom emoji on message by @chojs23
- List threads via channel actions menu by @chojs23
- Subscribe member list on guild switch by @chojs23
- Scroll member list subscription with viewport by @chojs23
- Split member sidebar into role online and offline groups by @chojs23
- Load and cache discord user profiles by @chojs23
- Capture friend relationships from ready by @chojs23
- Open user profile popup from message action menu by @chojs23
- Open user profile from member action menu by @chojs23
- Render profile avatar image inside the popup by @chojs23
- React to relationship add and remove dispatches by @chojs23
- Jump to mutual server from profile popup by @chojs23
- Change message author names to bold white and profile popup names to status-based color by @chojs23
- Add debug panel and youtube embed by @chojs23
- Gate sidebar with Discord's view-channel permission by @chojs23
- Add test log path by @chojs23
- Add scrollbar by @chojs23
- Thread box by @chojs23
- Improve forum by @chojs23
- Pane actions by @chojs23
- Add gateway reaction event handling by @chojs23
- Cd by @chojs23
- Mouse by @chojs23
- Handle large traffic event by @chojs23
- Migrated to use watch revision signal plus sequenced effect stream hybrid by @chojs23
- Selection with mouse by @chojs23
- Use iterm2 protocol for wezterm by @chojs23
- Fix some mouse interaction and optimize image redraw by @chojs23
- Render message inline emoji by @chojs23
- Multiple image viewer by @chojs23
- WIP message selection box by @chojs23
- Split forum posts by @chojs23
- Auto scroll by @chojs23
- Keep input mode by @chojs23
- Message update & delete by @chojs23
- New messages by @chojs23
- Download non-image attachments from message menu by @chojs23
- Render sticker-only messages instead of empty body by @chojs23
- Send DM from profile popup with m shortcut by @chojs23
- Render role mentions as @role-name with highlight by @chojs23
- Scroll-based profile popup with mouse wheel support by @chojs23
- Add client headers and cookie by @chojs23
- Channel tag by @chojs23
- Embed image resize + move emojj under image by @chojs23
- Unread/read channel by @chojs23
- Unread messages by @chojs23
- Add header by @chojs23
- Add option by @chojs23
- Add horizontal pane scrolling by @chojs23
- Highlight self reactions in yellow by @chojs23
- Show startup loading state by @chojs23
- Report startup token problems by @chojs23
- Show guild mention badges by @chojs23
- Add unread count for dm by @chojs23
- Action shortcuts by @chojs23
- User activity by @chojs23
- Add configurable image quality presets by @chojs23
- Nix flake by @chojs23

### Miscellaneous Tasks

- Initialize Rust application scaffold by @chojs23
- Clarify message input wording by @chojs23
- Show temporary message type prefix by @chojs23
- Rename package to concord by @chojs23
- Remove twilight by @chojs23
- Split some states by @chojs23
- Bump dependencies to latest by @chojs23
- Ui split by @chojs23
- Split tui modules by @chojs23
- Split discord gateway and state by @chojs23
- Fix some issues by @chojs23
- Remove clippy validation by @chojs23
- Split parser and redraw modules by @chojs23

### Performance

- Throttle inline image previews by @chojs23
- Bound attachment preview downloads by @chojs23
- Reduce retained media cache memory by @chojs23
- Bound older history retention by @chojs23
- Lower cache limits by @chojs23
- Resize discord cdn images by @chojs23
- Youtube embed thumbnail resizing by @chojs23

### Refactor

- Remove unused Discord state fields by @chojs23
- Sync viewport heights before rendering by @chojs23
- Compose message preview rows by @chojs23
- Use message capabilities for actions by @chojs23
- Construct app without config by @chojs23
- Remove startup config module by @chojs23
- Group message update state fields by @chojs23
- Remove dead attachment helpers by @chojs23
- Reuse message viewport bottom alignment by @chojs23
- Extract tui message formatting by @chojs23
- Split tui media target discovery by @chojs23
- Extract message viewport row scrolling by @chojs23
- Derive message height from formatter by @chojs23
- Unify message content span styling by @chojs23
- Extract image preview media cache by @chojs23
- Share emoji picker visible limit by @chojs23
- Split poll state by @chojs23
- Split message action state by @chojs23
- Split reaction state by @chojs23
- Split composer state by @chojs23

### Revert

- Remove latest-message direct message sorting by @chojs23

### Style

- Format mention highlight mapping by @chojs23
- Dim reply target composer hint by @chojs23
- Color role-grouped members by status by @chojs23

### Tests

- Cover raw ready custom emojis by @chojs23
- Cover cached thread channel deletion by @chojs23
- Replace Korean UI test fixtures by @chojs23
- Replace Korean TUI helper fixtures by @chojs23
- Simplify tui test helpers by @chojs23
- Reuse ui message content fixture by @chojs23

### Build

- Add TUI and keychain dependencies by @chojs23

### New Contributors

- @chojs23 made their first contribution
- @vncsalencar made their first contribution