Commit Graph

3271 Commits

Author SHA1 Message Date
Evgeny Poberezkin
4d267b6ca1 6.5-beta.7: android 339, desktop 134 2026-04-04 21:28:09 +01:00
Evgeny Poberezkin
de09eca6ab ios: 6.5-beta.7 (build 324) 2026-04-04 20:32:23 +01:00
Evgeny Poberezkin
825a63d3d2 ios: update core library 2026-04-04 19:38:44 +01:00
Evgeny
63682f9141 ui: "create public channel" labels (#6749) 2026-04-04 18:04:01 +01:00
Evgeny Poberezkin
ef57d84479 desktop: fix chat view processing all mouse move events 2026-04-04 17:17:04 +01:00
Evgeny Poberezkin
67c5d75633 Merge branch 'master' into chat-relays 2026-04-03 21:25:41 +01:00
Evgeny
4545fdd0a9 desktop: support sending voice messages, use shared VLC media-player factory (#6739)
* desktop: support sending voice messages

* alert for unsupported platforms

* dont record on error

* better initialization

* desktop: use shared VLC media-player factory (#6741)

* desktop: use shared VLC media-player factory

* fix factory

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-04-03 21:24:08 +01:00
Narasimha-sc
bcdc8effe5 fix: jump to quoted message in search and content filter (#6721)
* fix: jump to quoted message in search and content filter

When tapping a quoted message during search or content filter,
scrollToItem bailed out silently instead of navigating to the message.
Load around the target without search/filter params using
openAroundItemId, which closes search/filter and positions at the
target.

Fixes the overly broad guard added in 219381f9 (#5315).

* remove logs

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-04-03 21:22:51 +01:00
Evgeny
8167f7c2ab core: add fields to chat relay profiles; remove unique name requirement; update relay profile in relay address link data (#6743)
* core: add fields to chat relay profiles

* wip

* wip

* fix

* fix

* fix

* enable tests

* schema

* api

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2026-04-03 12:42:43 +00:00
spaced4ndy
0ca7cdaf1d Merge branch 'master' into chat-relays 2026-04-03 14:08:46 +04:00
Evgeny
bb6fb8f2e9 desktop: select text in messages (#6725)
* desktop: text selection plan

* update the plan

* desktop: text selection

* improve

* state management

* fix selection tracking

* rewrite

* revert

* update plan

* new implementation

* fix

* fix 2, logs

* fix 3, logging

* better cursor position

* fix last character highlight and one-line message selection

* fix copied text

* fix copy order for multi-message copy

* position copy button

* better copy button position

* moare better

* copy position

* condition

* debug copy

* comment more

* copy button fix

* minor fixes

* fix ranges

* refactor

* clip copy button

* refactor 2

* refactor 3

* clean up

* refactor event handling

* toast on copy

* copy actual message text with links

* move copy button in z-order

* move more

* try alignment

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-04-02 22:32:00 +01:00
spaced4ndy
a14a66db14 core, ui: chat relay test (#6736) 2026-04-02 15:36:36 +00:00
spaced4ndy
42fe94752c core, ui: public group profile wip (#6734) 2026-04-01 14:17:27 +00:00
Narasimha-sc
3f86a7bb62 ui: fix filter button appearing before call buttons during active call (#6733)
During an active call, the content filter button appeared before the
call timer and end call button in the toolbar. Move the content filter
button after chat-type specific buttons so call controls always appear
first.
2026-03-31 21:39:55 +01:00
spaced4ndy
dfd8e224f6 core, ui: prohibit to invite contact to channel (#6731) 2026-03-31 11:31:09 +00:00
Evgeny Poberezkin
a5f606f44a Merge branch 'master' into chat-relays 2026-03-31 08:52:24 +01:00
Evgeny Poberezkin
580e781a66 6.5-beta.6: android 338, desktop 133 2026-03-30 21:04:15 +01:00
Evgeny Poberezkin
85f44cfb3e ios: 6.5-beta.6 (build 323) 2026-03-30 20:57:18 +01:00
Evgeny Poberezkin
8bc0c974df ios: update core library 2026-03-30 19:26:28 +01:00
Evgeny Poberezkin
4db9319c40 Merge branch 'stable' 2026-03-30 18:14:17 +01:00
Evgeny
b24d003a83 ios: constrain image height in layout (#6732)
* ios: constrain image height in layout

* refactor

* video aspect

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-30 18:00:14 +01:00
build
462e47bacd v6.4.11: android 336, desktop 132 2026-03-30 13:59:04 +01:00
Evgeny
c3663ae285 android, desktop: constrain image sizes for previews (#6726)
* android, desktop: constrain image sizes for previews

* use correct JSON parser

* more JSON fixes

* constrain ratio in image decoder

* constrain max height in layout

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-30 12:24:16 +01:00
spaced4ndy
2fc24f8b64 ui: show user incognito profile in channels (#6727) 2026-03-30 11:17:59 +00:00
spaced4ndy
929783eb6c core: relay key and member id as immutable relay link data (#6713) 2026-03-30 10:48:39 +00:00
spaced4ndy
c33c343ccd Merge branch 'master' into chat-relays 2026-03-30 12:33:20 +04:00
Evgeny
f51d8a5a87 core: open chat on "new" unread items (contigous unread aread in the end) (#6724)
* core: open chat on "new" unread items (contigous unread aread in the end)

* move

* ui: match first unread logic with core

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-29 21:38:41 +01:00
Evgeny
f0a3d163dd android, desktop: icon for swipe to reply (#6723)
* remove swipe icon

* icon for swipe to reply

* fix

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-29 17:33:18 +01:00
Evgeny
9c189ede32 ios: swipe to reply (#6720)
* ios: swipe to reply

* update

* less travel

* reduce max shift

* adjust swipe travel

* android: icon on swipe to reply

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-29 14:57:42 +01:00
Evgeny Poberezkin
133f8d89e6 ios: update core library 2026-03-29 13:54:43 +01:00
Evgeny
94dd27b774 ui: translations (#6718)
* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Czech)

Currently translated at 99.0% (2499 of 2523 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (German)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2523 of 2523 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Czech)

Currently translated at 99.0% (2499 of 2523 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (German)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2523 of 2523 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (German)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (Greek)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/el/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.3% (2170 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (Polish)

Currently translated at 87.0% (1902 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Polish)

Currently translated at 90.1% (1968 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Arabic)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Czech)

Currently translated at 99.0% (2500 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Czech)

Currently translated at 56.9% (1243 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/

* Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 85.2% (2152 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/

* Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 85.7% (2165 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2525 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Japanese)

Currently translated at 78.8% (1992 of 2525 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2184 of 2184 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (German)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (Czech)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Greek)

Currently translated at 100.0% (2526 of 2526 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/el/

* process localizations

* cs typo

* cs space

* hu changes

Co-authored-by: Evgeny <evgeny@poberezkin.com>

* hu revert

Co-authored-by: Evgeny <evgeny@poberezkin.com>

* it typo

* pl corrections

Co-authored-by: Evgeny <evgeny@poberezkin.com>

* export ios localizations

* translation corrections

---------

Co-authored-by: summoner001 <summoner@disroot.org>
Co-authored-by: No name <usir.alerts@onionmail.org>
Co-authored-by: zenobit <zenobit@disroot.org>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: chamdim <chamdim@protonmail.com>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: Yay <zero-ranch-bronco@duck.com>
Co-authored-by: Kszyche <kszychamejl@int.pl>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: hugoalh <hugoalh@users.noreply.hosted.weblate.org>
Co-authored-by: Miyu Sakatsuki <miyu-sakatsuki@outlook.jp>
Co-authored-by: Omikorin <6079265+Omikorin@users.noreply.github.com>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-29 12:08:31 +01:00
Narasimha-sc
34ad395acb ui: jump to filtered message in chat history (#6715)
Show Go button on content-filtered messages (images, links, voice, etc.)
to navigate to the message in the full unfiltered chat history.
Reuses existing search Go button and openAroundItemId mechanism.
2026-03-28 20:16:14 +00:00
Narasimha-sc
f4e2ccc9dc fix: jump to message in search fails for messages high up in timeline (#6714)
closeSearch() added onSearchValueChanged("") in d30dde5 (content filter
feature) which triggers async apiFindMessages — this clears the items
that openChat just loaded around the target and replaces them with
initial messages. Skip the reload when openAroundItemId is already set.
2026-03-28 12:27:21 +00:00
spaced4ndy
30386178ec Revert "core: relay key and member id as immutable relay link data (#6711)"
This reverts commit d665b1f5d8.
2026-03-28 14:03:09 +04:00
spaced4ndy
d665b1f5d8 core: relay key and member id as immutable relay link data (#6711) 2026-03-28 09:51:50 +00:00
Narasimha-sc
b0e6a7bfc1 ui: call button in toolbar with audio/video submenu, filter in menu on mobile (#6700)
* ui: call button in toolbar with audio/video submenu, filter in menu on mobile

- Call button always outside three-dots menu; tapping it opens a submenu
  with Audio call and Video call options (both Android/iOS and desktop)
- Desktop: two toolbar buttons — Filter + Call
- Android/iOS: call button in toolbar; filter options move into the
  three-dots menu below a divider line
- Groups: filter button always in toolbar on all platforms
- Edge case: when calls are disabled/unavailable for a contact, the call
  button is hidden and the filter button is shown in its place in the
  toolbar instead

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ui: call button before filter button on desktop toolbar

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-03-28 07:26:16 +00:00
spaced4ndy
80eb678892 ui: prefer selecting relays from different operators when creating channel (#6668) 2026-03-27 10:31:12 +00:00
spaced4ndy
5e9c84fa21 desktop, android: smaller icon for channels (#6709) 2026-03-26 07:47:23 +00:00
Narasimha-sc
427ce1b3ff directory: show knocking status in listings, trigger re-review on knocking change (#6695)
* directory: show knocking status in listings, trigger re-review on knocking change

- fix sameProfile to include memberAdmission so toggling knocking triggers re-review and regenerates the web listing JSON
- show "Knocking: enabled" in bot search results and /list output
- show "Knocking: enabled" in web directory UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* directory: rename "Knocking: enabled" to "Member admission: enabled"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* directory: member admission must trigger review

* update text, refactor

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-03-24 20:01:58 +00:00
spaced4ndy
93cfc76947 Merge branch 'master' into chat-relays 2026-03-24 22:04:00 +04:00
spaced4ndy
779dd38257 ui: downgrade warning (#6704) 2026-03-24 18:03:22 +00:00
spaced4ndy
58f47cbadf core, ui: channel subscriber count (#6696) 2026-03-24 10:54:32 +00:00
Evgeny Poberezkin
5fc7560df9 Merge branch 'master' into chat-relays 2026-03-21 18:07:26 +00:00
Evgeny @ SimpleX Chat
a8a8883027 core, ui, website: small text markdown (#6697)
* core: small text markdown

* ios: small markdown

* desktop, android: small markdown

* fix font size

* small markdown on website

* update ios core library

* update bot api docs

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-03-21 18:06:23 +00:00
Evgeny
2db92ff6ed core: group member/owner keys for signing important messages (#6597)
* rfc: member keys

* update plan

* new encoding for message batches

* send new batch encoding in relay-based groups

* mvp launch plan

* update plan

* core: verify group member keys (#6669)

* core: verify group member keys

* refactor, process forwards

* refactor parsing

* refactor parsing 2

* refactor parser 3

* update rfc

* simplify

* simplify

* log tag

* refactor tag logging

* refactor withVerifiedSig

* simplify

* refactor more

* comment

* fix encoding

* fix sending as group for the new binary batch encoding

* unify types

* update api docs

* clean up

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

* core: signing messages with member keys (#6675)

* core: signing messages with member keys (types)

* sign messages

* refactor batching

* better

* refactor

* remove unused Eq

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

* core: forward signed messages as unchanged binary strings (#6678)

* core: forward signed messages as unchanged binary strings

* refactor

* consolidate types

* refactor VerifiedMsg

* refactor more

* undo rename

Co-authored-by: Evgeny <evgeny@poberezkin.com>

* update schema and plans

* add signed status to chat items and events

* test signed chat items

* unify parser

* PostgreSQL fix, remove unused fields, option to send inline files in the tests

* change inline files config

* revert inline config change

* use different characters in batch encoding, to avoid conflict with inline files

* fix test, api docs, query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-03-16 10:46:35 +00:00
spaced4ndy
4e16792ddc desktop, android: channels and chat relays ui (#6670) 2026-03-13 11:59:29 +00:00
spaced4ndy
2ada82b589 Merge branch 'master' into chat-relays 2026-03-13 14:04:00 +04:00
spaced4ndy
62fe23f008 android, desktop: fix opening pending connection from chat list (#6674) 2026-03-13 10:03:17 +00:00
spaced4ndy
a4f3e21490 ios: relay failure indication (#6665) 2026-03-09 15:48:22 +00:00
spaced4ndy
7ac901587a Merge branch 'master' into chat-relays 2026-03-06 19:27:07 +04:00