Commit Graph
6693 Commits
Author SHA1 Message Date
shum 01b89d8ceb ci: publish packages after release PR 2026-10-12 14:05:49 +00:00
shum 03d14f387e ci: release nodejs add-on and open release PR 2026-10-12 14:05:48 +00:00
shum 40083b3f57 ci: add packages release script 2026-10-12 14:05:48 +00:00
shum 0a27d1a125 python: pin core libs release with sha-256 2026-10-12 10:42:23 +00:00
shum 6e25728ff4 nodejs: verify sha-256 of downloaded assets 2026-10-12 10:42:22 +00:00
shum 701e56cdae Merge branch 'master' into sh/nodejs-db
# Conflicts:
#	packages/simplex-chat-nodejs/src/download-libs.js
2026-10-12 08:20:26 +00:00
EvgenyandEvgeny @ SimpleX Chat 599076d7a2 packages: update nodejs libraries (#7690)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-12 09:14:37 +01:00
shum 1aac698068 nodejs: keep worker test output free of colors 2026-10-12 07:59:00 +00:00
shum f46f24b9b5 Merge branch 'master' into sh/nodejs-db
# Conflicts:
#	.github/workflows/build.yml
2026-10-12 07:59:00 +00:00
Evgeny Poberezkin 9711dcfc9c core: 7.1.0.11 (simplexmq 7.1.0.11) 2026-10-11 23:01:35 +01:00
EvgenyandEvgeny @ SimpleX Chat 64aa2825d5 core: release core library to simplex-chat-libs every time cabal version changes (#7687)
* core: release core library to simplex-chat-libs every time cabal version changes

* implement

* test build

* update libs release

* test library release

* create release commit, so the date is correct

* rework to create release in advance in maybe-release job

* remove test build

* move postgresql job back

* test build

* remove test build

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-11 22:01:22 +01:00
nahuhh 8ec8c451db core: fix slow group membership lookup (#7688) 2026-10-11 13:06:06 +01:00
EvgenyandEvgeny @ SimpleX Chat 07c363849b core, ui: invite member of one group to another group (#7682)
* rfc: invite member of one group to another group

* update

* update

* implement

* version

* update

* do not show error if contact was removed when joining group

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-11 09:50:42 +01:00
EvgenyandEvgeny @ SimpleX Chat 1053e9fb5c core: use simpler agent api (#7685)
* core: use simpler agent api

* simplexmq

* simplexmq, plan

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-10 23:30:31 +01:00
Narasimha-scandEvgeny Poberezkin d457bc18d2 ios: delete temp data from storage view (#7626)
* ios: delete temp data from storage view

The temp folder is the XFTP agent work directory and holds scratch
files for received-file encryption and roster transfers, so deleting it
under a running chat breaks those writes mid-flight. The button is only
enabled while chat is stopped, the same precondition core deleteStorage
relies on, and the row says how to stop chat.

* ios: show delete temp data alert over settings sheet

AlertManager presents from ContentView, which is behind the settings
sheet, so the confirmation never appeared. The alert now also warns
that interrupted transfers never complete and that videos in unsent
drafts, which live in the temp folder, are lost, and the caption names
the screen where chat is stopped.

* ios: say unsent draft videos are sent without the file

A draft video whose converted file was deleted from the temp folder is
still sent, as a preview with no file, so "lost" understated it.

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-10-10 22:38:14 +01:00
Narasimha-sc 7d8a174388 android: recognise passphrase fields as passwords for password managers (#7612)
* android: recognise passphrase fields as passwords for password managers

Passphrase fields used a hand-rolled VisualTransformation lambda, so Compose never
marked them as password fields: the autofill structure carried no hints and no
password inputType, and password managers could not identify them. The raw
passphrase was also exposed through the CopyText/ACTION_COPY accessibility action.

PassphraseField now declares an autofill content type and uses
PasswordVisualTransformation, which sets the password semantics Compose derives
that flag from.

Fields that create a passphrase declare NewPassword. Where no field would carry
plain password (first-time setup, hidden profile password) they declare both, as
managers do not recognise a form whose every field is newPassword. On the change
form the current-passphrase field supplies password, so the new fields declare
only newPassword - adding password there leaves the manager unable to tell which
field holds the new value and suppresses the save prompt.

* android: do not offer to save hidden profile passwords

Hidden profile password fields no longer declare an autofill content type.
Compose commits the autofill session, which shows the password manager's
save prompt, only after the last field with a content type leaves the
screen, so these fields never trigger it. A saved entry would reveal that
the hidden profile exists.

Rewrite the plan to match the code.
2026-10-10 21:57:12 +01:00
Narasimha-scandEvgeny Poberezkin afcaf22100 android, desktop: storage breakdown in developer options (#7603)
* android, desktop: storage breakdown in developer options

Port of the iOS Storage screen (#5529): lists each top-level entry of the app's data, config and temp folders with its recursive size, so it is possible to see what takes space.

* android, desktop: simplify storage view

Use DefaultProgressView, drop the bold total and redundant absoluteFile, and do not follow top-level symlinks (matches iOS; avoids counting the Android lib link).

* android, desktop: storage view: do not crash on names the JVM cannot convert to Path

Under a non-UTF-8 locale on Linux, File.toPath() throws InvalidPathException for a non-ASCII top-level name (e.g. a received file decrypted into tmpDir); log it and show 0 bytes. Also correct plan wording.

* android, desktop: storage view: fold path conversion into treeSize, use produceState

Also correct plan wording (du per-directory overhead, unlistable roots, Windows junctions).

* android, desktop: storage view: open as card screen like other settings screens

* android, desktop: storage view: list top-level entries as Path to keep their exact names

File.listFiles + toPath loses names that are not valid in the JVM file-name encoding (non-ASCII under a C locale, invalid UTF-8), so those entries showed 0 bytes. Files.newDirectoryStream keeps the raw bytes.

* android, desktop: storage view: normalize root paths before dropping nested roots

A root spelled with .. (e.g. XDG_DATA_HOME=/x/data/../tmp) compared as nested in another root and its size was shown nowhere.

* android, desktop: document storage view in spec and product docs

* android, desktop: storage view: single catch when listing a root

* android, desktop: do not log file paths in storage view

The walk's IOException messages contain the full path, which in tmpDir can be a received file's original name.

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-10-10 21:55:08 +01:00
Narasimha-scandEvgeny Poberezkin d72f68e6dc android, desktop: free strings returned by the core (#7595)
The core allocates every chat_* response with malloc and passes ownership to
the caller, as iOS does in API.swift. Both JNI bindings copied the bytes into a
Java string and dropped the pointer, so every command, event and file read
leaked its whole response into the C allocator - invisible to both the JVM and
the Haskell heap profiler.

Desktop frees in decode_to_utf8_string, the funnel every entry point already
goes through. Android has no such funnel because NewStringUTF is called inline,
so decode_and_free is added and the call sites routed through it. chatReadFile
frees directly on both.

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-10-10 19:08:35 +01:00
EvgenyandEvgeny @ SimpleX Chat 2e56d32b52 core: badge presentations in profiles (#7573)
* badge presentation in groups

* fix tests

* badge presentations in profiles

* update simplexmq

* change types

* badge profile presentations

* improvements

* remove proof from cards, send owner public key for channel to relay

* add test

* merge migrations

* update

* prevent fallback to PHTest

* fixes

* many fixes

* fixes

* fixes

* cleanup

* improve

* query plans

* fix test

* diff

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-10 17:48:45 +01:00
Narasimha-sc 74c6b9d930 android: show attachment options above the keyboard (#7570) 2026-10-10 17:02:40 +01:00
shum f41595d61e support bot: document add-on override 2026-10-10 12:27:31 +00:00
shum 932388ca32 calculator bot: load libs and add-on in image 2026-10-10 12:27:31 +00:00
shum e9bad6d1f9 ci: build nodejs add-on for libs release 2026-10-10 12:27:31 +00:00
shum 6f2fb68b2d nodejs: download prebuilt add-on at runtime 2026-10-10 12:27:31 +00:00
shum f9071033c0 Merge branch 'master' into sh/nodejs-db
# Conflicts:
#	packages/simplex-chat-nodejs/README.md
#	packages/simplex-chat-nodejs/src/download-libs.js
2026-10-10 11:52:33 +00:00
spaced4ndy 7c2c7503f2 ui: do not show "No relays" while leaving a channel (#7673) 2026-10-09 10:56:00 +00:00
EvgenyandEvgeny @ SimpleX Chat 10166454fd website: add sitemap, robots, llms.txt and markdown pages (#7670)
* website: markdown pages for llms

* website: add sitemap, robots, llms.txt and markdown pages

* faster site generation

* more faster

* faster

* update

* optimize build

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-09 07:53:40 +01:00
EvgenyandEvgeny @ SimpleX Chat f924d233e4 core: fix encoding for name proof (#7672)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-09 07:48:04 +01:00
EvgenyandEvgeny @ SimpleX Chat f2b3fe385c core: remove legacy field to support contact connections in groups (#7671)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-09 07:00:27 +01:00
EvgenyandEvgeny @ SimpleX Chat 9c9c86f9c0 core, ui: fix profiles, add error alerts (#7663)
* core, ui: fix profiles, add error alerts

* simplify

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 22:53:59 +01:00
EvgenyandEvgeny @ SimpleX Chat a24a3b1911 website: redirect page (#7667)
* website: redirect page

* script

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 18:10:37 +01:00
EvgenyandEvgeny @ SimpleX Chat 64d68ff710 core: fix test (#7666)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 17:11:46 +01:00
EvgenyandEvgeny @ SimpleX Chat 96970373b0 core: add status when switching queue (#7664)
* core: add status when switching queue

* fix

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 16:31:29 +01:00
EvgenyandEvgeny @ SimpleX Chat 0c1ffa65bc core: group fixes/improvements (#7660)
* core: group fixes/improvements

* Large messages dropped by relays and hosts (the same 15602 limit was applied, without accounting for forwarding header)
* Members below v18 did not receive forwarded messages or history in p2p groups.
* Join confirmations near the size limit could fail.
* SMP servers are limited to 2 host names each.

* simplify

* remove legacy forwarding and history support

* only restrict p2p groups

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-08 15:06:18 +01:00
sh dd7768e543 android, desktop: upgrade moko-resources to 0.27.1 (#7661) 2026-10-08 12:32:57 +00:00
sh 40478c1c45 android: target API 36, AGP 8.10.1 (#7656)
* android: migrate back handling to callbacks

* android: target API 36, AGP 8.10.1

* android: opt out of predictive back app-wide
2026-10-07 10:30:26 +01:00
Evgeny Poberezkin 84f73ce8b8 website: update crowdfunding page 2026-10-07 09:53:45 +01:00
EvgenyandEvgeny @ SimpleX Chat df95de8a2c tests, fix: execute in parallel, send connected events after creating chat items, fix race when merging multiple members to one contact (#7500)
* tests: execute in parallel

* remove race in terminal

* fix some tests

* stop chat controller on exit

* fix more tests

* fix tests

* query plans

* update simplexmq

* update direct-sqlcipher

* fix tests

* query plans

* ios: update core

* fix tests

* update simplexmq and direct-sqlcipher, fixes

* simplexmq

* update simplexmq

* parallel channel tests

* update tests

* fix tests

* fix tests

* query plans

* fix test

* more tests in CI

* use ram drive in CI

* fix tests, fix directory deleting voice file before it is uploaded

* fix query

* fix query to use index

* link contact and channel owner profile when connecting via a signed link

* update simplexmq, fix ghc 8.10.7

* fix tests

* avoid double stop

* query plans

* fix more test races

* more test fixes

* fix queries

* fixes

* more fixes

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-07 08:12:02 +01:00
Evgeny Poberezkin 680790695e core: update simplexmq 2026-10-05 11:45:16 +01:00
EvgenyandEvgeny @ SimpleX Chat 905df659d3 ios: show error when random database passphrase generation fails (#7621)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-05 09:46:55 +01:00
spaced4ndyandEvgeny Poberezkin 86671a1699 core, ui: confirm before connecting a call answered without e2e encryption (#7647)
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-10-05 09:45:57 +01:00
Evgenyandshum b79223fe5c core: call media key HKDF, expire stale calls (#7642)
* core: call media key HKDF, expire stale calls

* core: expire stale calls in bulk SQL

* core: reduce call tests

* core: remove periodic call cleanup

* core: expire calls with DELETE RETURNING

* core: skip call item update when none expired

---------

Co-authored-by: shum <github.shum@liber.li>
2026-10-04 18:44:52 +01:00
a9322ff32c android: prevent access to chat list when accepting call in locked state (#7627)
* android: prevent access to chat list when accepting call in locked state

* android: request auth on resume during a call

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: shum <github.shum@liber.li>
2026-10-04 12:07:39 +01:00
shandNarasimha-sc be05a46628 android: StrongBox for new keystore keys, show key storage level (#7637)
* android: create new keystore keys in StrongBox

* android: show keystore key storage level

* ui: save keystore key before marking it stored

* android: show keystore storage level in the footer text instead of a separate row

* android: return keystore storage label, drop enum

---------

Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-10-04 10:47:46 +01:00
1a969a6cb9 core, ui: remove database backups after key changes (#7628)
* core, ui: remove database backups after key changes

* ui: delete database backups on chat start without delaying encryption marker reset

Keeping encryptionStartedAt set until chat start made DatabaseErrorView show
"The attempt to change database passphrase was not completed" with a Restore
button after every successful passphrase change when the passphrase is not
stored. Restore the marker handling from master and delete backups
unconditionally after chat starts.

* another flag

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-10-03 16:56:58 +01:00
Evgenyandshum ec1effd5da website: allowlist raster data URIs in previews (#7643)
Co-authored-by: shum <github.shum@liber.li>
2026-10-03 15:12:06 +01:00
SimpleX Chat 51630d61ef 7.1-beta.6: android 386, desktop 167, ios 362 v7.1.0-beta.6 2026-10-03 13:33:46 +00:00
Evgeny Poberezkin f8c43bf0ef core: 7.1.0.10 2026-10-03 11:07:23 +01:00
Evgeny Poberezkin 6b596c0c35 Merge branch 'stable' 2026-10-03 08:05:19 +01:00
EvgenyandNarasimha-sc 53e6d435bc android, desktop: blur media thumbnails in reply quotes and the chat list (#7639)
"Blur media" hid images and videos in a chat but showed the same media
sharp as the thumbnail of a quoted message and as the last message's
image, video or link preview in the chat list.

Small views are now blurred with the same reveal as chat media. They are
resampled relative to the width they are drawn at, so a thumbnail is
blurred as much on screen as media in a chat, and drawn as the centre
crop the thumbnail shows. In-chat media keeps the same blur.

Blurring the chat list also needs: each last message gets its own blur
state, loaded chat-list videos use it and hide their full-screen play
button while blurred, a right-click on a thumbnail no longer leaves it
revealed on desktop, and leaving a chat mid-scroll no longer undoes
reveals in the list on Android.

Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-10-03 07:17:20 +01:00