Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
d44fa80
Remove invalid quotes from conversation
automated-signal Oct 24, 2025
9ebe8db
Ensure last message text is always updated
automated-signal Oct 24, 2025
7651231
Fix initial all chats folder params
automated-signal Oct 24, 2025
837b107
Simplify edit handling of attachments
automated-signal Oct 27, 2025
7353c81
Fix reference to build-localized-display-names script
automated-signal Oct 27, 2025
19c39d7
Find by username: Don't automatically add .01 discriminator
automated-signal Oct 27, 2025
fd65d2e
Upgrade electron to 38.4.0, electron-builder to 26.1.0
automated-signal Oct 27, 2025
199a64c
Revert "Support muting from AirPods on macOS"
indutny-signal Oct 28, 2025
5258bcd
Import WindowsNotifications unconditionally
automated-signal Oct 28, 2025
8281059
Fix badge counts for include muted setting
automated-signal Oct 28, 2025
b13f7ca
Use v2 endpoints for groups WebAPI
automated-signal Oct 28, 2025
e124f4d
Add message preview for polls
automated-signal Oct 28, 2025
2688111
Fix app icon for Linux adhoc builds
automated-signal Oct 28, 2025
5f572a5
Avoid incorrect use of preload cache
automated-signal Oct 28, 2025
9ea4fe5
Exclude our own conversation from connection count
automated-signal Oct 28, 2025
5464e99
Revert electron-builder to 26.0.14
automated-signal Oct 29, 2025
bea66c0
Allow .tsx files to be .std.tsx
automated-signal Oct 29, 2025
36677f5
Fix uncaught error in AttachmentCrypto
automated-signal Oct 29, 2025
fe87757
Use emoji sheet with fallback
automated-signal Oct 29, 2025
57d61f9
Show draftTimestamp in left pane preview
automated-signal Oct 29, 2025
fa2b952
Notification Profiles: Exclude silenced conversations from badge count
automated-signal Oct 29, 2025
4cf54f2
Fix chat folder settings title when editing folder
automated-signal Oct 29, 2025
860137f
Fix backup group update test cases
automated-signal Oct 29, 2025
94726b8
Update emoji-picker-react in sticker creator
automated-signal Oct 29, 2025
afa7269
Temporarily downgrade libsignal from 0.85.1 to 0.83.0
automated-signal Oct 29, 2025
b2f8f67
Chat folder fixes
automated-signal Oct 29, 2025
e421bca
Fix typing indicators for 1:1 conversations
automated-signal Oct 30, 2025
1b26b36
Run test-release in a temporary folder
automated-signal Oct 30, 2025
535ab28
Show contact modal on click when reviewing
automated-signal Oct 30, 2025
4165324
Update release notes
jamiebuilds-signal Oct 30, 2025
f7e4c0b
Fix lint
jamiebuilds-signal Oct 30, 2025
918e5a4
Update strings
jamiebuilds-signal Oct 30, 2025
24e1d84
7.78.0-beta.1
jamiebuilds-signal Oct 30, 2025
65d83bd
Refactor backup import/export options
automated-signal Oct 31, 2025
65617ef
Fix reply/quoting breaking for poll messages
automated-signal Oct 31, 2025
1c73663
Add backup support for polls
automated-signal Nov 3, 2025
30f0912
Fix non-qualified emoji values rendering as emoji in composer
automated-signal Nov 5, 2025
72e960a
Update poll receive feature flags
automated-signal Nov 5, 2025
ede10a7
Update strings
indutny-signal Nov 5, 2025
0604725
7.78.0
indutny-signal Nov 5, 2025
36876cd
Merge tag 'v7.78.0' of https://github.com/signalapp/Signal-Desktop in…
bellegarde-c Nov 7, 2025
01872d0
circleci: Initial config
bellegarde-c Dec 4, 2024
0736731
debian: Create package
bellegarde-c Dec 5, 2024
310c352
patches: Add fs-extra patch to fix image loader
bellegarde-c Apr 13, 2025
ce92231
app: Remove app updates check
bellegarde-c Jul 15, 2025
0ac163f
stylesheets: Tweak CSS for mobile
bellegarde-c Nov 6, 2025
15430a4
ts: Tweak conversation view for mobile phones
bellegarde-c Nov 6, 2025
aefc103
app: main: Simplify second instance startup
bellegarde-c Nov 5, 2025
ae17ed8
ts: components: SimpleQuillWrapper: Prevent auto-focus on mount for m…
bellegarde-c Jul 30, 2025
38fd81f
ts: ActiveWindowService: consider screensaver state in isActive()
bellegarde-c Aug 1, 2025
195dde0
app: Add D-Bus interface and wrapper to speed up secondary instance h…
bellegarde-c Aug 2, 2025
f136716
ts: util: buildExperiation: Never expire
bellegarde-c Nov 5, 2025
6f7c24f
ts: services: notifications: Show one notification per conversation
bellegarde-c Nov 5, 2025
dc2b48e
ts: components: fun: Disable autofocus
bellegarde-c Nov 5, 2025
2a44965
app: Disable background throttling
bellegarde-c Nov 5, 2025
acde09b
app: Remove systray support
bellegarde-c Nov 7, 2025
260475e
Bump actions/upload-artifact from 4.6.1 to 5.0.0
dependabot[bot] Nov 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: 2.1

setup: true

orbs:
continuation: circleci/continuation@0.1.2
droidian-buildd: droidian-releng/droidian-buildd-orb@volatile

jobs:
setup:
executor: continuation/default
resource_class: small
steps:
- droidian-buildd/checkout
- droidian-buildd/generate
- continuation/continue:
configuration_path: generated_config.yml

workflows:
setup:
jobs:
- setup:
filters:
tags:
only: /^droidian\/.*\/.*/

13 changes: 9 additions & 4 deletions .eslint/rules/file-suffix.js
Original file line number Diff line number Diff line change
Expand Up @@ -409,13 +409,13 @@ module.exports = {
const [, moduleName] = source.match(/^([^@\/]+|@[^\/]+\/[^\/]+)/);
if (NODE_PACKAGES.has(moduleName)) {
nodeUses.push(node);
} else if (source === 'react-dom/server') {
// no-op
} else if (
DOM_PACKAGES.has(moduleName) ||
source === 'react-dom/client'
) {
domUses.push(node);
} else if (source === 'react-dom/server') {
// no-op
} else if (!STD_PACKAGES.has(moduleName)) {
context.report({
node,
Expand Down Expand Up @@ -490,8 +490,13 @@ module.exports = {
expectedSuffix = 'std';
}

// All .std.tsx components should be .dom.tsx for now
if (expectedSuffix === 'std' && filename.endsWith('.tsx')) {
// All .tsx files should normally be .dom.tsx, but could also be
// .std.tsx.
if (
expectedSuffix === 'std' &&
filename.endsWith('.tsx') &&
fileSuffix !== 'std'
) {
expectedSuffix = 'dom';
}

Expand Down
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ module.exports = {
'ts/**/*.ts',
'ts/**/*.tsx',
'app/**/*.ts',
'app/**/*.tsx',
'build/intl-linter/**/*.ts',
],
parser: '@typescript-eslint/parser',
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ jobs:

- name: Upload benchmark logs on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
name: logs
path: artifacts
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ jobs:

- name: Upload artifacts on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
path: artifacts

Expand Down Expand Up @@ -234,7 +234,7 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
repository: 'signalapp/Signal-Message-Backup-Tests'
ref: '279370b21fd089956a581c3b027489594135998a'
ref: '455fbe5854bd3be5002f17ae929a898c0975adc4'
path: 'backup-integration-tests'

- run: xvfb-run --auto-servernum pnpm run test-electron
Expand All @@ -251,7 +251,7 @@ jobs:

- name: Upload artifacts on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
path: artifacts

Expand Down Expand Up @@ -321,7 +321,7 @@ jobs:

- name: Upload artifacts on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
path: artifacts

Expand Down Expand Up @@ -455,7 +455,7 @@ jobs:

- name: Upload mock server test logs on failure
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
name: logs-${{ matrix.workerIndex }}
path: artifacts
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/icu-book.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ jobs:

- name: Upload test artifacts
if: github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
name: desktop-test-icu
path: stories
compression-level: 9

- name: Upload release artifacts
if: github.event_name != 'workflow_dispatch'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v4
with:
name: desktop-${{ github.ref_name }}-icu
path: stories
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ legacy-peer-deps=true
public-hoist-pattern[]=*eslint-*
minimum-release-age=14400
minimum-release-age-exclude[]=@signalapp/*
minimum-release-age-exclude[]=electron
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22.18.0
22.20.0
1 change: 0 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ pnpm-lock.yaml

# Third-party files
node_modules/**
packages/*/node_modules/**
danger/node_modules/**
sticker-creator/node_modules/**
components/**
Expand Down
41 changes: 0 additions & 41 deletions ACKNOWLEDGMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20907,44 +20907,3 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

```

# Acknowledgements for @signalapp/mute-state-change

muted-state-change makes use of the following open source projects.

## bindings

(The MIT License)

Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## node-addon-api

The MIT License (MIT)

Copyright (c) 2017 [Node.js API collaborators](https://github.com/nodejs/node-addon-api#collaborators)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 changes: 20 additions & 5 deletions _locales/af-ZA/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -666,10 +666,10 @@
"messageformat": "Fout tydens stoor van kwitansie. Probeer asb. weer."
},
"icu:Toast--ChatFolderAddedChat": {
"messageformat": "Added to “{chatFolderName}”"
"messageformat": "Bygevoeg by “{chatFolderName}”"
},
"icu:Toast--ChatFolderRemovedChat": {
"messageformat": "Removed from “{chatFolderName}”"
"messageformat": "Verwyder uit “{chatFolderName}”"
},
"icu:Toast--ChatFolderCreated": {
"messageformat": "{chatFolderName} vouer bygevoeg"
Expand Down Expand Up @@ -1430,6 +1430,9 @@
"icu:Preferences__EditChatFolderPage__Title": {
"messageformat": "Skep 'n vouer"
},
"icu:Preferences__EditChatFolderPage__Title--EditingExistingChatFolder": {
"messageformat": "Wysig vouer"
},
"icu:Preferences__EditChatFolderPage__FolderNameField__Label": {
"messageformat": "Vouernaam"
},
Expand Down Expand Up @@ -2156,6 +2159,9 @@
"icu:startConversation--username-not-found": {
"messageformat": "{atUsername} is nie 'n Signal-gebruiker nie. Maak seker dat jy die volledige gebruikersnaam ingevoer het."
},
"icu:startConversation--username-not-valid": {
"messageformat": "{atUsername} is nie 'n geldige gebruikersnaam nie. Maak seker dat jy die volledige gebruikersnaam ingevoer het, gevolg deur sy stel syfers."
},
"icu:startConversation--phone-number-not-found": {
"messageformat": "Gebruiker nie gevind nie. \"{phoneNumber}\" is nie 'n Signal-gebruiker."
},
Expand Down Expand Up @@ -2309,6 +2315,9 @@
"icu:message--getNotificationText--stickers": {
"messageformat": "Plakkerboodskap"
},
"icu:message--getNotificationText--poll": {
"messageformat": "Meningsopname: {pollQuestion}"
},
"icu:message--getNotificationText--text-with-emoji": {
"messageformat": "{emoji} {text}"
},
Expand Down Expand Up @@ -5475,7 +5484,7 @@
"messageformat": "Toegelate kennisgewings"
},
"icu:NotificationProfiles--allowed-description": {
"messageformat": "Add people and groups who you want notifications from when this profile is on"
"messageformat": "Voeg mense en groepe by van wie jy kennisgewings wil ontvang wanneer hierdie profiel aktief is"
},
"icu:NotificationProfiles--allowed-add-label": {
"messageformat": "Voeg mense of groepe toe"
Expand Down Expand Up @@ -7259,9 +7268,15 @@
"messageformat": "Stel pasgemaakte kennisgewingprofiele op om te beheer van watter mense en groepe jy kennisgewings ontvang wanneer daardie profiele geaktiveer is."
},
"icu:WhatsNew__7.77-1": {
"messageformat": "Chat folders let you organize your organizations, group your groups, and individualize your individuals into unique folders that are easy to customize and rearrange. Display unread messages from your favorite people, filter by chat type (1-on-1 and groups), or create separate folders like \"Personal\" and \"Work\" so you can quickly see the messages that are relevant to you. Enable chat folders in Settings > Chats to get started."
"messageformat": "Jy kan nou jou kletse in unieke vouers organiseer wat maklik is om aan te pas en te herrangskik. Gebruik kletsvouers om ongeleesde boodskappe van jou gunstelingmense te vertoon, volgens kletstipe te filtreer (een-tot-een of groepe) of afsonderlike vouers soos \"Persoonlik\" of \"Werk\" te skep, sodat jy vinnig boodskappe kan sien wat vir jou toepaslik is. Aktiveer kletsvouers in Instellings > Kletse om te begin."
},
"icu:WhatsNew__7.77-2": {
"messageformat": "This update also includes a bugfix for an issue that prevented link previews from being generated when the message also included emoji characters. Thanks, <elias6></elias6>"
"messageformat": "Hierdie opdatering sluit ook 'n foutregstelling in vir 'n probleem wat verhoed het dat skakelvoorskoue gegenereer word indien die boodskap ook emoji-karakters ingesluit het. Dankie, <elias6></elias6>"
},
"icu:WhatsNew__7.78-1": {
"messageformat": "Toeganklikheidsverbeterings."
},
"icu:WhatsNew__7.78-2": {
"messageformat": "Ons het ook 'n fout reggestel wat kon verhoed dat kennisgewings in Windows verskyn."
}
}
25 changes: 20 additions & 5 deletions _locales/ar/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -666,10 +666,10 @@
"messageformat": "حدث خطأ أثناء حفظ الإيصال. يُرجى المُحاولة مرّة أخرى."
},
"icu:Toast--ChatFolderAddedChat": {
"messageformat": "Added to “{chatFolderName}"
"messageformat": "تمَّت الإضافة إلى \"{chatFolderName}\""
},
"icu:Toast--ChatFolderRemovedChat": {
"messageformat": "Removed from “{chatFolderName}"
"messageformat": "تمَّت الإزالة من \"{chatFolderName}\""
},
"icu:Toast--ChatFolderCreated": {
"messageformat": "مجلد {chatFolderName} مُضَاف"
Expand Down Expand Up @@ -1430,6 +1430,9 @@
"icu:Preferences__EditChatFolderPage__Title": {
"messageformat": "إنشاء مجلد"
},
"icu:Preferences__EditChatFolderPage__Title--EditingExistingChatFolder": {
"messageformat": "تعديل المجلد"
},
"icu:Preferences__EditChatFolderPage__FolderNameField__Label": {
"messageformat": "اسم المجلد"
},
Expand Down Expand Up @@ -2156,6 +2159,9 @@
"icu:startConversation--username-not-found": {
"messageformat": "لم يعُد {atUsername} من مُستخدِمي سيجنال. تأكَّد من إدخالك لاسم المُستخدِم الكامل."
},
"icu:startConversation--username-not-valid": {
"messageformat": "{atUsername} ليس اسم مُستخدِم صالح. تأكَّد من أنك أدخلت اسم المُستخدم كاملًا متبوعًا بمجموعة الأرقام الخاصة به."
},
"icu:startConversation--phone-number-not-found": {
"messageformat": "‫لم يُعثَر على المُستخدِم. إن « {phoneNumber} » ليس مُستخدِمًا لسيجنال."
},
Expand Down Expand Up @@ -2309,6 +2315,9 @@
"icu:message--getNotificationText--stickers": {
"messageformat": "رسالة مُلصَق"
},
"icu:message--getNotificationText--poll": {
"messageformat": "استطلاع: {pollQuestion}"
},
"icu:message--getNotificationText--text-with-emoji": {
"messageformat": "{emoji} {text}"
},
Expand Down Expand Up @@ -5475,7 +5484,7 @@
"messageformat": "الإشعارات المسموح بها"
},
"icu:NotificationProfiles--allowed-description": {
"messageformat": "Add people and groups who you want notifications from when this profile is on"
"messageformat": "أضِف الأشخاص والمجموعات التي تريد أن تستلم إشعارات من طرفهم عند تفعيل هذا الحساب الشخصي."
},
"icu:NotificationProfiles--allowed-add-label": {
"messageformat": "إضافة اﻷفراد أو المجموعات"
Expand Down Expand Up @@ -7259,9 +7268,15 @@
"messageformat": "قُم بإعداد ملفات إشعارات شخصية مُخصصة للتحكُّم في الأشخاص والمجموعات التي تتلقّى إشعارات منها عند تفعيل ذلك الملف الشخصي. أنشئ ملف إشعارات \"للعمل\" تُبقي فيه الأشخاص غير زملائك في العمل بعيدًا (باستثناء حبيبك/حبيبتك) وملفًا شخصيًا \"لوقت الراحة\" لا يضُم رئيسك في العمل. يُمكنك التبديل بين ملفات الإشعارات الشخصية وقتما شئت، أو إعداد جدول زمني لكي يتم ذلك تلقائيًا."
},
"icu:WhatsNew__7.77-1": {
"messageformat": "Chat folders let you organize your organizations, group your groups, and individualize your individuals into unique folders that are easy to customize and rearrange. Display unread messages from your favorite people, filter by chat type (1-on-1 and groups), or create separate folders like \"Personal\" and \"Work\" so you can quickly see the messages that are relevant to you. Enable chat folders in Settings > Chats to get started."
"messageformat": "يُمكنك الآن تنظيم محادثاتك داخل مجلدات سهلة التنظيم والتخصيص. استخدِم مجلدات الدردشة لعرض الرسائل غير المقروءة من الأشخاص المفضلين لديك. يمكنك فلترة الدردشات بحسب النوع سواء فردية أو جماعية، أو إنشاء مجلدات منفصلة مثل \"شخصي\" أو \"عمل\"، لتتمكّن من الوصول سريعًا إلى الرسائل التي تهمك. يمكنك تفعيل \"مجلدات الدردشة\" في \"الإعدادات\" > \"الدردشات\" للبدء."
},
"icu:WhatsNew__7.77-2": {
"messageformat": "This update also includes a bugfix for an issue that prevented link previews from being generated when the message also included emoji characters. Thanks, <elias6></elias6>"
"messageformat": "يتضمّن هذا التحديث أيضًا إصلاحًا لخلل كان يمنع ظهور عرض مُسبَق للروابط عند احتواء الرسالة على رموز تعبيرية أيضًا. شكرًا، <elias6></elias6>"
},
"icu:WhatsNew__7.78-1": {
"messageformat": "تحسينات إمكانية الوصول."
},
"icu:WhatsNew__7.78-2": {
"messageformat": "أصلحنا أيضًا خطًأ كان قد يمنع ظهور الإشعارات على نظام التشغيل ويندوز."
}
}
Loading
Loading