Giter VIP home page Giter VIP logo

simplexmq's Introduction

build GitHub downloads GitHub release Join on Reddit Follow on Mastodon

| 30/03/2023 | EN, FR, CZ, PL |

SimpleX logo

SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!

       

Welcome to SimpleX Chat!

  1. 📲 Install the app.
  2. ↔️ Connect to the team, join user groups and follow our updates.
  3. 🤝 Make a private connection with a friend.
  4. 🔤 Help translating SimpleX Chat.
  5. ⚡️ Contribute and help us with donations.

Learn more about SimpleX Chat.

Install the app

iOS app   Android app   F-Droid   iOS TestFlight   APK

  • 🖲 Protects your messages and metadata - who you talk to and when.
  • 🔐 Double ratchet end-to-end encryption, with additional encryption layer.
  • 📱 Mobile apps for Android (Google Play, APK) and iOS.
  • 🚀 TestFlight preview for iOS with the new features 1-2 weeks earlier - limited to 10,000 users!
  • 🖥 Available as a terminal (console) app / CLI on Linux, MacOS, Windows.

Connect to the team

You can connect to the team via the app using "chat with the developers button" available when you have no conversations in the profile, "Send questions and ideas" in the app settings or via our SimpleX address. Please connect to:

  • to ask any questions
  • to suggest any improvements
  • to share anything relevant

We are replying the questions manually, so it is not instant – it can take up to 24 hours.

If you are interested in helping us to integrate open-source language models, and in joining our team, please get in touch.

Join user groups

You can join the groups created by other users via the new directory service. We are not responsible for the content shared in these groups.

Please note: The groups below are created for the users to be able to ask questions, make suggestions and ask questions about SimpleX Chat only.

You also can:

  • criticize the app, and make comparisons with other messengers.
  • share new messengers you think could be interesting for privacy, as long as you don't spam.
  • share some privacy related publications, infrequently.
  • having preliminary approved with the admin in direct message, share the link to a group you created, but only once. Once the group has more than 10 members it can be submitted to SimpleX Directory Service where the new users will be able to discover it.

You must:

  • be polite to other users
  • avoid spam (too frequent messages, even if they are relevant)
  • avoid any personal attacks or hostility.
  • avoid sharing any content that is not relevant to the above (that includes, but is not limited to, discussing politics or any aspects of society other than privacy, security, technology and communications, sharing any content that may be found offensive by other users, etc.).

Messages not following these rules will be deleted, the right to send messages may be revoked, and the access to the new members to the group may be temporarily restricted, to prevent re-joining under a different name - our imperfect group moderation does not have a better solution at the moment.

You can join an English-speaking users group if you want to ask any questions: #SimpleX users group

There is also a group #simplex-devs for developers who build on SimpleX platform:

  • chat bots and automations
  • integrations with other apps
  • social apps and services
  • etc.

There are groups in other languages, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users:

#SimpleX-DE (German-speaking), #SimpleX-ES (Spanish-speaking), #SimpleX-FR (French-speaking), #SimpleX-RU (Russian-speaking), #SimpleX-IT (Italian-speaking).

You can join either by opening these links in the app or by opening them in a desktop browser and scanning the QR code.

Follow our updates

We publish our updates and releases via:

Make a private connection

You need to share a link with your friend or scan a QR code from their phone, in person or during a video call, to make a connection and start messaging.

The channel through which you share the link does not have to be secure - it is enough that you can confirm who sent you the message and that your SimpleX connection is established.

Make a private connection Conversation Video call

After you connect, you can verify connection security code.

User guide (NEW)

Read about the app features and settings in the new User guide.

Help translating SimpleX Chat

Thanks to our users and Weblate, SimpleX Chat apps, website and documents are translated to many other languages.

Join our translators to help SimpleX grow!

locale language contributor Android and iOS website Github docs
🇬🇧 en English
ar العربية jermanuts android app
-
website
🇧🇬 bg Български android app
ios app
🇨🇿 cs Čeština zen0bit android app
ios app
website
🇩🇪 de Deutsch mlanp android app
ios app
website
🇪🇸 es Español Mateyhv android app
ios app
website
🇫🇮 fi Suomi android app
ios app
website
🇫🇷 fr Français ishi_sama android app
ios app
website
🇮🇱 he עִברִית android app
-
🇭🇺 hu Magyar android app
-
🇮🇹 it Italiano unbranched android app
ios app
website
🇯🇵 ja 日本語 android app
ios app
website
🇳🇱 nl Nederlands mika-nl android app
ios app
website
🇵🇱 pl Polski BxOxSxS android app
ios app
🇧🇷 pt-BR Português android app
-
website
🇷🇺 ru Русский android app
ios app
🇹🇭 th ภาษาไทย titapa-punpun android app
ios app
🇹🇷 tr Türkçe android app
ios app
🇺🇦 uk Українська android app
ios app
website
🇨🇳 zh-CHS 简体中文 sith-on-mars

Float-hu
android app
ios app
 


website

Languages in progress: Arabic, Japanese, Korean, Portuguese and others. We will be adding more languages as some of the already added are completed – please suggest new languages, review the translation guide and get in touch with us!

Contribute

We would love to have you join the development! You can help us with:

  • share the color theme you use in Android app!
  • writing a tutorial or recipes about hosting servers, chat bot automations, etc.
  • contributing to SimpleX Chat knowledge-base.
  • developing features - please connect to us via chat so we can help you get started.

Help us with donations

Huge thank you to everybody who donated to SimpleX Chat!

We are prioritizing users privacy and security - it would be impossible without your support.

Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure.

Your donations help us raise more funds - any amount, even the price of the cup of coffee, would make a big difference for us.

It is possible to donate via:

  • GitHub (commission-free) or OpenCollective (~10% commission).
  • Bitcoin: bc1qd74rc032ek2knhhr3yjq2ajzc5enz3h4qwnxad
  • Monero: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt
  • BCH: bitcoincash:qq6c8vfvxqrk6rhdysgvkhqc24sggkfsx5nqvdlqcg
  • Ethereum: 0xD9ee7Db0AD0dc1Dfa7eD53290199ED06beA04692
  • USDT:
    • Ethereum: 0xD9ee7Db0AD0dc1Dfa7eD53290199ED06beA04692
  • Solana: 7JCf5m3TiHmYKZVr6jCu1KeZVtb9Y1jRMQDU69p5ARnu
  • please ask if you want to donate any other coins.

Thank you,

Evgeny

SimpleX Chat founder

Contents

Why privacy matters

Everyone should care about privacy and security of their communications - innocuous conversations can put you in danger even if there is nothing to hide.

One of the most shocking stories is the experience of Mohamedou Ould Salahi that he wrote about in his memoir and that is shown in The Mauritanian movie. He was put into Guantanamo camp, without trial, and was tortured there for 15 years after a phone call to his relative in Afghanistan, under suspicion of being involved in 9/11 attacks, even though he lived in Germany for the 10 years prior to the attacks.

It is not enough to use an end-to-end encrypted messenger, we all should use the messengers that protect the privacy of our personal networks - who we are connected with.

SimpleX approach to privacy and security

Complete privacy of your identity, profile, contacts and metadata

Unlike any other existing messaging platform, SimpleX has no identifiers assigned to the users - not even random numbers. This protects the privacy of who are you communicating with, hiding it from SimpleX platform servers and from any observers. Read more.

The best protection against spam and abuse

As you have no identifier on SimpleX platform, you cannot be contacted unless you share a one-time invitation link or an optional temporary user address. Read more.

Complete ownership, control and security of your data

SimpleX stores all user data on client devices, the messages are only held temporarily on SimpleX relay servers until they are received. Read more.

Users own SimpleX network

You can use SimpleX with your own servers and still communicate with people using the servers that are pre-configured in the apps or any other SimpleX servers. Read more.

Frequently asked questions

  1. How SimpleX can deliver messages without any user identifiers? See v2 release announcement explaining how SimpleX works.

  2. Why should I not just use Signal? Signal is a centralized platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.

  3. How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identities? Although these platforms do not require a real identity, they do rely on anonymous user identities to deliver messages – it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.

News and updates

Recent and important updates:

Jun 4, 2024. SimpleX network: private message routing, v5.8 released with IP address protection and chat themes

Apr 26, 2024. SimpleX network: legally binding transparency, v5.7 released with better calls and messages.

Mar 23, 2024. SimpleX network: real privacy and stable profits, non-profits for protocols, v5.6 released with quantum resistant e2e encryption and simple profile migration.

Mar 14, 2024. SimpleX Chat v5.6 beta: adding quantum resistance to Signal double ratchet algorithm.

Jan 24, 2024. SimpleX Chat: free infrastructure from Linode, v5.5 released with private notes, group history and a simpler UX to connect.

Nov 25, 2023. SimpleX Chat v5.4 released: link mobile and desktop apps via quantum resistant protocol, and much better groups.

Sep 25, 2023. SimpleX Chat v5.3 released: desktop app, local file encryption, improved groups and directory service.

Jul 22, 2023. SimpleX Chat: v5.2 released with message delivery receipts.

May 23, 2023. SimpleX Chat: v5.1 released with message reactions and self-destruct passcode.

Apr 22, 2023. SimpleX Chat: vision and funding, v5.0 released with videos and files up to 1gb.

Mar 1, 2023. SimpleX File Transfer Protocol – send large files efficiently, privately and securely, soon to be integrated into SimpleX Chat apps..

Nov 8, 2022. Security audit by Trail of Bits, the new website and v4.2 released.

Sep 28, 2022. v4.0: encrypted local chat database and many other changes.

All updates

⚡ Quick installation of a terminal app

curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/stable/install.sh | bash

Once the chat client is installed, simply run simplex-chat from your terminal.

simplex-chat

Read more about installing and using the terminal app.

SimpleX Platform design

SimpleX is a client-server network with a unique network topology that uses redundant, disposable message relay nodes to asynchronously pass messages via unidirectional (simplex) message queues, providing recipient and sender anonymity.

Unlike P2P networks, all messages are passed through one or several server nodes, that do not even need to have persistence. In fact, the current SMP server implementation uses in-memory message storage, persisting only the queue records. SimpleX provides better metadata protection than P2P designs, as no global participant identifiers are used to deliver messages, and avoids the problems of P2P networks.

Unlike federated networks, the server nodes do not have records of the users, do not communicate with each other and do not store messages after they are delivered to the recipients. There is no way to discover the full list of servers participating in SimpleX network. This design avoids the problem of metadata visibility that all federated networks have and better protects from the network-wide attacks.

Only the client devices have information about users, their contacts and groups.

See SimpleX whitepaper for more information on platform objectives and technical design.

See SimpleX Chat Protocol for the format of messages sent between chat clients over SimpleX Messaging Protocol.

Privacy and security: technical details and limitations

SimpleX Chat is a work in progress – we are releasing improvements as they are ready. You have to decide if the current state is good enough for your usage scenario.

We compiled a glossary of terms used to describe communication systems to help understand some terms below and to help compare advantages and disadvantages of various communication systems.

What is already implemented:

  1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for n users there can be up to n * (n-1) message queues.
  2. End-to-end encryption in each message queue using NaCl cryptobox. This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
  3. Double ratchet end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with forward secrecy (each message is encrypted by its own ephemeral key) and break-in recovery (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial key agreement, initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
  4. Additional layer of encryption using NaCL cryptobox for the messages delivered from the server to the recipient. This layer avoids having any ciphertext in common between sent and received traffic of the server inside TLS (and there are no identifiers in common as well).
  5. Several levels of content padding to frustrate message size attacks.
  6. All message metadata, including the time when the message was received by the server (rounded to a second) is sent to the recipients inside an encrypted envelope, so even if TLS is compromised it cannot be observed.
  7. Only TLS 1.2/1.3 are allowed for client-server connections, limited to cryptographic algorithms: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448.
  8. To protect against replay attacks SimpleX servers require tlsunique channel binding as session ID in each client command signed with per-queue ephemeral key.
  9. To protect your IP address all SimpleX Chat clients support accessing messaging servers via Tor - see v3.1 release announcement for more details.
  10. Local database encryption with passphrase - your contacts, groups and all sent and received messages are stored encrypted. If you used SimpleX Chat before v4.0 you need to enable the encryption via the app settings.
  11. Transport isolation - different TCP connections and Tor circuits are used for traffic of different user profiles, optionally - for different contacts and group member connections.
  12. Manual messaging queue rotations to move conversation to another SMP relay.
  13. Sending end-to-end encrypted files using XFTP protocol.
  14. Local files encryption.

We plan to add:

  1. Senders' SMP relays and recipients' XFTP relays to reduce traffic and conceal IP addresses from the relays chosen, and potentially controlled, by another party.
  2. Post-quantum resistant key exchange in double ratchet protocol.
  3. Automatic message queue rotation and redundancy. Currently the queues created between two users are used until the queue is manually changed by the user or contact is deleted. We are planning to add automatic queue rotation to make these identifiers temporary and rotate based on some schedule TBC (e.g., every X messages, or every X hours/days).
  4. Message "mixing" - adding latency to message delivery, to protect against traffic correlation by message time.
  5. Reproducible builds – this is the limitation of the development stack, but we will be investing into solving this problem. Users can still build all applications and services from the source code.

For developers

You can:

If you are considering developing with SimpleX platform please get in touch for any advice and support.

Please also join #simplex-devs group to ask any questions and share your success stories.

Roadmap

  • ✅ Easy to deploy SimpleX server with in-memory message storage, without any dependencies.
  • ✅ Terminal (console) client with groups and files support.
  • ✅ One-click SimpleX server deployment on Linode.
  • ✅ End-to-end encryption using double-ratchet protocol with additional encryption layer.
  • ✅ Mobile apps v1 for Android and iOS.
  • ✅ Private instant notifications for Android using background service.
  • ✅ Haskell chat bot templates.
  • ✅ v2.0 - supporting images and files in mobile apps.
  • ✅ Manual chat history deletion.
  • ✅ End-to-end encrypted WebRTC audio and video calls via the mobile apps.
  • ✅ Privacy preserving instant notifications for iOS using Apple Push Notification service.
  • ✅ Chat database export and import.
  • ✅ Chat groups in mobile apps.
  • ✅ Connecting to messaging servers via Tor.
  • ✅ Dual server addresses to access messaging servers as v3 hidden services.
  • ✅ Chat server and TypeScript client SDK to develop chat interfaces, integrations and chat bots (ready for announcement).
  • ✅ Incognito mode to share a new random name with each contact.
  • ✅ Chat database encryption.
  • ✅ Automatic chat history deletion.
  • ✅ Links to join groups and improve groups stability.
  • ✅ Voice messages (with recipient opt-out per contact).
  • ✅ Basic authentication for SMP servers (to authorize creating new queues).
  • ✅ View deleted messages, full message deletion by sender (with recipient opt-in per contact).
  • ✅ Block screenshots and view in recent apps.
  • ✅ Advanced server configuration.
  • ✅ Disappearing messages (with recipient opt-in per-contact).
  • ✅ "Live" messages.
  • ✅ Contact verification via a separate out-of-band channel.
  • ✅ Multiple user profiles in the same chat database.
  • ✅ Optionally avoid re-using the same TCP session for multiple connections.
  • ✅ Preserve message drafts.
  • ✅ File server to optimize for efficient and private sending of large files.
  • ✅ Improved audio & video calls.
  • ✅ Support older Android OS and 32-bit CPUs.
  • ✅ Hidden chat profiles.
  • ✅ Sending and receiving large files via XFTP protocol.
  • ✅ Video messages.
  • ✅ App access passcode.
  • ✅ Improved Android app UI design.
  • ✅ Optional alternative access password.
  • ✅ Message reactions
  • ✅ Message editing history
  • ✅ Reduced battery and traffic usage in large groups.
  • ✅ Message delivery confirmation (with sender opt-out per contact).
  • ✅ Desktop client.
  • ✅ Encryption of local files stored in the app.
  • ✅ Using mobile profiles from the desktop app.
  • ✅ Private notes.
  • ✅ Improve sending videos (including encryption of locally stored videos).
  • ✅ Post-quantum resistant key exchange in double ratchet protocol.
  • ✅ Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
  • 🏗 Improve stability and reduce battery usage.
  • 🏗 Improve experience for the new users.
  • 🏗 Large groups, communities and public channels.
  • Privacy & security slider - a simple way to set all settings at once.
  • SMP queue redundancy and rotation (manual is supported).
  • Include optional message into connection request sent via contact address.
  • Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.).
  • Feeds/broadcasts.
  • Ephemeral/disappearing/OTR conversations with the existing contacts.
  • Privately share your location.
  • Web widgets for custom interactivity in the chats.
  • Programmable chat automations / rules (automatic replies/forward/deletion/sending, reminders, etc.).
  • Privacy-preserving identity server for optional DNS-based contact/group addresses to simplify connection and discovery, but not used to deliver messages:
    • keep all your contacts and groups even if you lose the domain.
    • the server doesn't have information about your contacts and groups.
  • High capacity multi-node SMP relays.

Disclaimers

SimpleX protocols and security model was reviewed, and had many breaking changes and improvements in v1.0.0.

The security audit was performed in October 2022 by Trail of Bits, and most fixes were released in v4.2.0 – see the announcement.

SimpleX Chat is still a relatively early stage platform (the mobile apps were released in March 2022), so you may discover some bugs and missing features. We would really appreciate if you let us know anything that needs to be fixed or improved.

The default servers configured in the app are provided on the best effort basis. We are currently not guaranteeing any SLAs, although historically our servers had over 99.9% uptime each.

We have never provided or have been requested access to our servers or any information from our servers by any third parties. If we are ever requested to provide such access or information, we will be following due legal process.

We do not log IP addresses of the users and we do not perform any traffic correlation on our servers. If transport level security is critical you must use Tor or some other similar network to access messaging servers. We will be improving the client applications to reduce the opportunities for traffic correlation.

Please read more in Privacy Policy.

Security contact

Please see our Security Policy on how to report security vulnerabilities to us. We will coordinate the fix and disclosure.

Please do NOT report security vulnerabilities via GitHub issues.

License

AGPL v3

iOS app   Android app   F-Droid   iOS TestFlight   APK

simplexmq's People

Contributors

angerman avatar avently avatar dpwiz avatar epoberezkin avatar markaleksanderh avatar samsapti avatar sethforprivacy avatar shumvgolove avatar space-d-n avatar spaced4ndy avatar tcely avatar tristancacqueray avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

simplexmq's Issues

"extra-libraries: crypto" error causes docker build to fail

Starting with a fresh git clone of the stable branch, running a docker build as follows will fail;

' docker buildx build -t smp:SomeHash --build-arg APP="smp-server" --build-arg APP_PORT="5223" .`

with

590.1 Configuring library for simplexmq-5.4.0.7..
591.5 Error: cabal-3.10.1.0: Missing dependency on a foreign library:
591.5 * Missing (or bad) C library: crypto

I tried adding libssl-dev and libssl3 to the Dockerfile, but the same error would manifest itself. Thinking that maybe the changes introduced in commit c22c15a were to blame, I removed lines 163-164 in simplexmq.cabal. This advanced the docker build process further until I reached the following error

718.8 cbits/sha512.c:1:10: error:
718.8      fatal error: openssl/sha.h: No such file or directory
718.8         1 | #include <openssl/sha.h>
718.8           |          ^~~~~~~~~~~~~~~
718.8   |
718.8 1 | #include <openssl/sha.h>
718.8   |          ^
718.8 compilation terminated.

Now knowing that eliminating the extra "library check" allowed cabal to get further along until the reason for the check in the first place appeared, I added line 163-164 back in, but also added extra-lib-dirs: option as a new line 165 thinking maybe the libs weren't in the include directory for some reason.

extra-lib-dirs:
   /usr/include/openssl/
   /usr/include/x86_64-linux-gnu/openssl/
   /usr/lib/x86_64-linux-gnu/
  /lib/x86_64-linux-gnu/

But now we get right back to the original error. At this point, I am not sure where to proceed next.
running on upto date Debian 12 and Docker engine 24.0.7

Let me know if you need additional information.

SMP or XFTP server address avoiding it ends with the port number

I had to set up SMP and XFTP servers on a different port instead of the default ones because the default (especially 443 is already taken by another service).
Thus, the server (SMP or XFTP) address finishes with @domain:portnumber.
Is there any way to avoid the server address finishing as mentioned below, with @domain:portnumber?
I mean, modifying some parameters somewhere.

Support newer GHCs

It seems that through the dependency memory == 0.15, this package is restricted to GHC 8.10, which is very old. To make contributions easier, it would be great to support at least GHC 9.4.

Error starting the systemd xftp-server on Ubuntu 22.04

On Ubuntu server 22.04, I installed firstly the SMP service and then the XFTP one, following the instructions published on https://simplex.chat/docs

Regarding XFTP, I followed the instructions here: https://simplex.chat/docs/xftp-server.html
I ran the init command in the following format sudo su xftp -c "xftp-server init -l --fqdn mydomain -q '20gb' -p /srv/xftp/", and it seemed all ok.
I created the systemd file by pasting what is at point 5 here https://simplex.chat/docs/xftp-server.html

When I run sudo systemctl start xftp-server.service I receive an error, and running systemctl status xftp-server.service I see the following:

○ xftp-server.service - XFTP server systemd service
     Loaded: bad-setting (Reason: Unit xftp-server.service has a bad unit file setting.)
     Active: inactive (dead) since Sun 2023-06-04 16:34:28 CEST; 19min ago
   Main PID: 1027086 (code=killed, signal=TERM)
        CPU: 50ms

Jun 04 16:33:41 vps-fe63ca00 xftp-server[1027086]: [INFO 2023-06-04 16:33:41 +0200 src/Simplex/FileTransfer/Server/Env.hs:88] Total / available storage: 21474836480 / 21474836480
Jun 04 16:33:42 vps-fe63ca00 xftp-server[1027086]: [INFO 2023-06-04 16:33:41 +0200 src/Simplex/Messaging/Transport/Server.hs:87] binding to [::]:5443
Jun 04 16:33:49 vps-fe63ca00 systemd[1]: /etc/systemd/system/xftp-server.service:9: Failed to resolve unit specifiers in [ -e "/var/opt/simplex-xftp/file-server-store.log" ] && cp "/var/opt/simplex-x>
Jun 04 16:33:49 vps-fe63ca00 systemd[1]: xftp-server.service: Unit configuration has fatal error, unit will not be started.
Jun 04 16:34:28 vps-fe63ca00 systemd[1]: Stopping XFTP server systemd service...
Jun 04 16:34:28 vps-fe63ca00 xftp-server[1027086]:
Jun 04 16:34:28 vps-fe63ca00 systemd[1]: xftp-server.service: Deactivated successfully.
Jun 04 16:34:28 vps-fe63ca00 systemd[1]: Stopped XFTP server systemd service.
Jun 04 16:41:22 vps-fe63ca00 systemd[1]: /etc/systemd/system/xftp-server.service:9: Failed to resolve unit specifiers in [ -e "/var/opt/simplex-xftp/file-server-store.log" ] && cp "/var/opt/simplex-x>
Jun 04 16:41:22 vps-fe63ca00 systemd[1]: xftp-server.service: Unit configuration has fatal error, unit will not be started.

However, if I run sudo su xftp -c "xftp-server start" the server starts and I see the following:

[INFO 2023-06-04 17:09:13 +0200 src/Simplex/FileTransfer/Server/Env.hs:88] Total / available storage: 21474836480 / 21474836480
[INFO 2023-06-04 17:09:13 +0200 src/Simplex/Messaging/Transport/Server.hs:87] binding to [::]:port

I removed the port number for security reasons.

From the systemd side, if I edit the systemd file and comment the row ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex-xftp/file-server-store.log" ] && cp "/var/opt/simplex-xftp/file-server-store.log" "/var/opt/simplex-xftp/file-server-store.log.$(date +'%FT%T')"' it works fine.

I tested the xftp address on the app, and the result is Ok.
I have some doubts related to that systemd row I commented on.

I appreciate any help you can provide.

Dependency problem while resolving dependencies of simplexmq

While trying to create the FreeBSD port for simplexmq, I've encountered this problem:

$ make cabal-configure
cd /usr/ports/net-im/hs-simplexmq/work/simplexmq-5.4.0 &&  /usr/bin/env XDG_DATA_HOME=/usr/ports/net-im/hs-simplexmq/work  XDG_CONFIG_HOME=/usr/ports/net-im/hs-simplexmq/work  XDG_CACHE_HOME=/usr/ports/net-im/hs-simplexmq/work/.cache  HOME=/usr/ports/net-im/hs-simplexmq/work PATH=/usr/local/libexec/ccache:/usr/ports/net-im/hs-simplexmq/work/.bin:/home/yuri/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin PKG_CONFIG_LIBDIR=/usr/ports/net-im/hs-simplexmq/work/.pkgconfig:/usr/local/libdata/pkgconfig:/usr/local/share/pkgconfig:/usr/libdata/pkgconfig MK_DEBUG_FILES=no MK_KERNEL_SYMBOLS=no SHELL=/bin/sh NO_LINT=YES PREFIX=/usr/local  LOCALBASE=/usr/local  CC="cc" CFLAGS="-O2 -pipe  -fstack-protector-strong -fno-strict-aliasing "  CPP="cpp" CPPFLAGS=""  LDFLAGS=" -fstack-protector-strong " LIBS=""  CXX="c++" CXXFLAGS="-O2 -pipe -fstack-protector-strong -fno-strict-aliasing  "  MANPREFIX="/usr/local" CCACHE_DIR="/tmp/.ccache" BSD_INSTALL_PROGRAM="install  -s -m 555"  BSD_INSTALL_LIB="install  -s -m 0644"  BSD_INSTALL_SCRIPT="install  -m 555"  BSD_INSTALL_DATA="install  -m 0644"  BSD_INSTALL_MAN="install  -m 444" XDG_DATA_HOME=/usr/ports/net-im/hs-simplexmq/work/cabal-home XDG_CONFIG_HOME=/usr/ports/net-im/hs-simplexmq/work/cabal-home XDG_CACHE_HOME=/usr/ports/net-im/hs-simplexmq/work/cabal-home HOME=/usr/ports/net-im/hs-simplexmq/work/cabal-home cabal build --dry-run --disable-benchmarks --disable-tests --flags="-relocatable"    exe:smp-agent exe:smp-server
Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] trying: aeson-2.2.1.0 (user goal)
[__1] trying: template-haskell-2.19.0.0/installed-2.19.0.0 (dependency of
aeson)
[__2] next goal: simplexmq (user goal)
[__2] rejecting: simplexmq-5.4.0.7 (conflict:
template-haskell==2.19.0.0/installed-2.19.0.0, simplexmq =>
template-haskell>=2.20 && <2.21)
[__2] skipping: simplexmq-1.1.0, simplexmq-1.0.2, simplexmq-1.0.0,
simplexmq-0.5.2, simplexmq-0.5.1, simplexmq-0.5.0, simplexmq-0.4.1,
simplexmq-0.4.0, simplexmq-0.3.2, simplexmq-0.3.1 (has the same
characteristics that caused the previous version to fail: excludes
'template-haskell' version 2.19.0.0)
[__2] fail (backjumping, conflict set: simplexmq, template-haskell)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: simplexmq, aeson, template-haskell

*** Error code 1

Stop.

It doesn't like template-haskell for some reason.

Version: 5.4.0
hs-cabal-install-3.10.1.0_3
ghc-9.4.6
FreeBSD 14.0

docker build fails

Current stable (a1e5697) and master (4c0b8a3) docker build fails:

$ docker build --build-arg="APP=smp-server" --build-arg="APP_PORT=3456" .

cabal-3.6.2.0: Missing dependency on a foreign library:
* Missing (or bad) C library: crypto

Building sqlcipher-simple with openssl flag separately on Ubuntu 22.04 with installed openssl succeeds, but the resulting libHSsqlcipher-simple-0.4.18.1-inplace-ghc8.10.7.so attempts to link to both libcrypto.so.3 and libcrypto.so.1.1 where the latter doesn't exist.

Question: many old "smp-server-store.log" files - safe to delete?

Hi,

Since I create a backup of my server every night and shut down the server to do this, "smp-server-store.log.*" files are created daily.

smp-server-store logs

  • What do these files contain and why are they necessary?
  • Can these files be deleted without causing problems?
  • Do the files have an impact on performance if a large number of them have accumulated?

Many thanks for your help.

Impossible to add SMP or XFT address with the onion address if ports are not those by default

I had to set SMP/XFTP different ports from those by default because other services already took them.
I also set TOR and have an address for SMP and XFTP.
So I have the SMP/XFTP addresses like smp/xftp://<fingerprint>@<public_hostname:port>.
When I go into the settings of the SimpleX Chat app to create a new SM/XFTP server, I add the address smp/xftp://<fingerprint>@<public_hostname:port>[,<onion_hostname>] but unfortunately the field "Test server" is not active.
I had to delete the TOR address to become active in the feature "Test server", and only in this way, it works.
I suggest reviewing this configuration because it limits who cannot use the default ports.

[Docker] Trying to set up SimpleXFTPServer

Hi there, i've been having problems with the server not initializing the config file properly while using it in a docker compose.
My OS: Debian GNU/Linux 12 (bookworm) x86_64 6.1.0-9-cloud-amd64
Docker Version: 24.0.2 with docker compose version v2.18.1
I've been getting the output SimpleX XFTP server v1.0.0 Fingerprint: [RETRACTED] xftp-server: no key port in section TRANSPORT CallStack (from HasCallStack): error, called at src/Simplex/Messaging/Server/CLI.hs:161:14 in simplexmq-5.1.1-inplace:Simplex.Messaging.Server.CLI
My full docker-compose is

version: '3.3'
services:
    smp-server:
        restart: unless-stopped
        environment:
            - ADDR=[RETRACTED]
            - PASS=[RETRACTED]
        ports:
            - '5223:5223'
        volumes:
            - '$HOME/simplex/smp/config:/etc/opt/simplex'
            - '$HOME/simplex/smp/logs:/var/opt/simplex'
        image: 'simplexchat/smp-server:latest'

    xftp-server:
        restart: unless-stopped
        environment:
            - ADDR=[RETRACTED]
            - QUOTA=10GB
        ports:
            - '443:443'
        volumes:
            - '$HOME/simplex/xftp/config:/etc/opt/simplex-xftp'
            - '$HOME/simplex/xftp/logs:/var/opt/simplex-xftp'
            - '$HOME/simplex/xftp/files:/srv/xftp'
        image: 'simplexchat/xftp-server:latest'

Any thoughts?

Nix smp server package

Would be nice to have the smp server packaged in a flake here or downstream in Nixpkgs.

Docker buid option 1 broken (stable branch)

Thanks for this great project! I encountered this trying to deploy the server.

While the option 2 works, trying to do option 1:

DOCKER_BUILDKIT=1 docker build -t smp-server -f smp-server-build.Dockerfile .

eventually fails in step 12/19:

Step 12/19 : RUN cabal install
 ---> Running in d2870e8c3044
cabal: Could not resolve dependencies:
[__0] next goal: aeson (user goal)
[__0] rejecting: aeson-2.1.1.0, aeson-2.1.0.0 (constraint from user target
requires ==2.0.3.0)
[__0] trying: aeson-2.0.3.0
[__1] trying: base-4.16.4.0/installed-4.16.4.0 (dependency of aeson)
[__2] trying: simplexmq-3.3.1 (user goal)
[__3] next goal: memory (dependency of simplexmq)
[__3] rejecting: memory-0.18.0 (conflict: simplexmq => memory>=0.15 && <0.16)
[__3] skipping: memory-0.17.0, memory-0.16.0 (has the same characteristics
that caused the previous version to fail: excluded by constraint '>=0.15 &&
<0.16' from 'simplexmq')
[__3] rejecting: memory-0.15.0 (conflict: base==4.16.4.0/installed-4.16.4.0,
memory => base>=4.9 && <4.15)
[__3] skipping: memory-0.14.18, memory-0.14.17, memory-0.14.16,
memory-0.14.15, memory-0.14.14, memory-0.14.13, memory-0.14.12,
memory-0.14.11, memory-0.14.10, memory-0.14.9, memory-0.14.8, memory-0.14.7,
memory-0.14.6, memory-0.14.5, memory-0.14.4, memory-0.14.3, memory-0.14.2,
memory-0.14.1, memory-0.14, memory-0.13, memory-0.12, memory-0.11,
memory-0.10, memory-0.9, memory-0.8, memory-0.7, memory-0.6, memory-0.5,
memory-0.4, memory-0.3, memory-0.2, memory-0.1 (has the same characteristics
that caused the previous version to fail: excludes 'base' version 4.16.4.0)
[__3] fail (backjumping, conflict set: base, memory, simplexmq)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, memory, simplexmq, aeson
Try running with --minimize-conflict-set to improve the error message.

The command '/bin/sh -c cabal install' returned a non-zero code: 1
Time: 0h:04m:23s                                                                           

error during build v3.4.0

I am getting the following error message:

simplexmq   > [61 of 62] Compiling Simplex.Messaging.Agent
simplexmq   >
simplexmq   > /tmp/stack-ec22fe5140a42eee/simplexmq-3.4.0/src/Simplex/Messaging/Agent.hs:1377:23: error:
simplexmq   >     • Variable not in scope:
simplexmq   >         flushTBQueue :: TBQueue (ConnId, NtfSupervisorCommand) -> STM a0
simplexmq   >     • Perhaps you want to add ‘flushTBQueue’ to the import list
simplexmq   >       in the import of ‘Control.Concurrent.STM’
simplexmq   >       (src/Simplex/Messaging/Agent.hs:84:1-41).
simplexmq   >      |
simplexmq   > 1377 |   void . atomically . flushTBQueue $ ntfSubQ ns
simplexmq   >      |

Probably due to changes in commit d9a0e78

Image on Docker Hub not atomatically updated

The Docker image that's available on Docker Hub is currently on version 4.3.1, i.e. 3 versions behind. Do you guys have plans to keep it up to date, or is the intention that SMP server operators should build the Docker image themselves?

If it's of any help, I can make a PR with a GitHub Actions workflow to automatically build and push a Docker image on every release. Let me know what you think.

Unable to build docker images on Apple Silicon [to build ARM image for start9 marketplace]

Hi! I'm busy exploring the idea of packaging SimpleXMQ for the start9 marketplace (will run in the beta marketplace for a while at first).

One of the things that is required is an ARM docker image. I've been able to update the build.Dockerfile, however the updates are pretty substantial.

I'd like to get this merged in or supported however, since without it keeping the start9 package in sync with upstream changes of smp-server is going to be challenging.

What's the best way to get feedback from you guys on this - shall I open a PR with my modified build.Dockerfile and a description of the changes?

systemd service smp-server.service cannot start

My smp-server does not start at boot.

systemctl status smp-server.service gives this output:

Nov 06 22:59:09 simplex smp-server[1367]: Fingerprint: ***********************************
Nov 06 22:59:09 simplex smp-server[1367]: Server address: smp://******************************************
Nov 06 22:59:09 simplex smp-server[1367]: Store log: /var/opt/simplex/smp-server-store.log
Nov 06 22:59:09 simplex smp-server[1367]: Listening on port 5223 (TLS)...
Nov 06 22:59:09 simplex smp-server[1367]: expiring messages after 21 days
Nov 06 22:59:09 simplex smp-server[1367]: not expiring inactive clients
Nov 06 22:59:09 simplex smp-server[1367]: creating new queues requires password
Nov 06 22:59:09 simplex smp-server[1367]: smp-server: /var/opt/simplex/smp-server-store.log: openFile: permission denied (Permission denied)
Nov 06 22:59:09 simplex systemd[1]: smp-server.service: Main process exited, code=exited, status=1/FAILURE
Nov 06 22:59:09 simplex systemd[1]: smp-server.service: Failed with result 'exit-code'.

I useed the installation script on Debian 12.
It seems like user permission problem for the smp user

Here is the systemd script:

[Unit]
Description=SMP server

[Service]
User=smp
Group=smp
Type=simple
ExecStart=/usr/local/bin/smp-server start
ExecStopPost=/usr/local/bin/simplex-servers-stopscript smp-server
LimitNOFILE=65535
KillSignal=SIGINT
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

How can I get around this?
I recently ran the update script, didnt help.

If I run smp-server start as root then the server starts fine.
Also if I comment out the user and group lines in the servic file, the server runs fine.
But I do not want to run it as root, so how do I fix the permissions?

Add IPv6 support

Currently, none of the official relay servers (smp4.simplex.im - smp10.simplex.im) have a AAAA DNS record, making them only reachable via IPv4. Adding IPv6 connectivity helps keeping long-term connections (e.g. from Android clients) alive. This allows to reduce the frequency of keepalive messages and in turn helps conserving battery space.

To deploy IPv6, the server code needs to be able to handle IP addresses in IPv6 format. Then IPv6 has to be added to the servers and announced with AAAA DNS records.
The clients may also need software changes to actually use IPv6.

Add the ability to configure server actions when using the entire quota

Add a setting to the config file: delete old files when using the entire quota for uploading media?
If the administrator sets "on", the old media will be deleted when the threshold value is reached.
If the administrator sets "off", then the server, if the threshold value is reached, will return the error "it is impossible to send a file" and each file will be stored for its maximum period (specified in the config)

Can't Connect to Server (Docker)

I am using Simplex 4.3 beta to check if I have connection to my self hosted local docker server but I cannot pass the check. I used the following docker commands:

docker run -d \
      --name smp-server \
      -e addr=192.168.2.57 \
      -p 5223:5223 \
      -v ${PWD}/scripts/docker/config:/etc/opt/simplex \
      -v ${PWD}/scripts/docker/logs:/var/opt/simplex \
      smp-server

Then smp-server init and smp-server start. Then trying to connect with smp://[email protected]. I think a docker-compose would be helpful for newcomers like myself. Thanks

Improvements for Downstream Packaging

As mentioned in #731 (comment) [*] there are multiple areas that could use cleaning up and documentation in order to make it easier for packaging and deploying the simplexmq servers.

[*]

hardcoded file-system paths, the user is expected to initalize it by running it as root, and the configuration isn't documented.

xftp-server: no key port in section TRANSPORT

Testing out simplex server via docker on debian 12:

docker run -d \
    -e "ADDR=simplex.zaggy.nl:443" \
    -e "QUOTA=10G" \
    -p 443:443 \
    -v $HOME/simplex/xftp/config:/etc/opt/simplex-xftp:z \
    -v $HOME/simplex/xftp/logs:/var/opt/simplex-xftp:z \
    -v $HOME/simplex/xftp/files:/srv/xftp:z \
    simplexchat/xftp-server:latest

xftp-server doesn’t start?

 sudo docker logs -f 0a39a2593aad
SimpleX XFTP server v1.0.1
Fingerprint: sO2YvijAQzsf6apAg1vdlqjHLES1PVp5Nu-OYL6dQ_8=
xftp-server: no key port in section TRANSPORT
CallStack (from HasCallStack):
  error, called at src/Simplex/Messaging/Server/CLI.hs:161:14 in simplexmq-5.3.0.1-inplace:Simplex.Messaging.Server.CLI

smp-server-download.Dockerfile does not verify smp-server binary

I just recently rebuilt the docker container running my smp-server, and encountered a failure mode when building the -download docker image. If github throttles you or there's some other network error when you attempt to download, the result is that your smp-server binary might just be a bad server response in a text file 😄

# cat /usr/bin/smp-server
<?xml version="1.0" encoding="utf-8"?><Error><Code>ServerBusy</Code><Message>Egress is over the account limit.
RequestId:f4b4d993-b01e-006c-0778-d3c9f2000000
Time:2022-09-28T20:26:34.2999215Z</Message></Error>

The result is the rather obtuse log message when the entrypoint tries to execute the bad text file:

/usr/bin/smp-server: 1: Syntax error: redirection unexpected

One solution to this might be publishing a shasum of the smp-server binary as an asset on your github releases, and then comparing that hash with the downloaded binary in the -download.Dockerfile build to ensure that your downloaded binary matches what you expect.

HandshakeFailed

Hi!

Set up a smp-server 4.0 following this: https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md

In the init I used the IP to my VPS.
The server are starting just fine but there are this error message repeating:
exception: HandshakeFailed (Error_Packet_unexpected "Alert13 [(AlertLevel_Fatal,UnknownCa)]" " expected: handshake 13")

Tested to delete everything and re-init without any change.

When I connect a simplex-chat CLI om my computer I get this:

exception: HandshakeFailed (Error_Protocol ("certificate has unknown CA",True,UnknownCa))

I used to run smp-server 3.4.0 just fine

Something with 4.0 (or maybe my setup only)?

ntf server ?

Hello,

How to use, configure the ntf server and incorporate it with the smp server, the xftp server and simplex-chat ? I don't find doc about it.

Thank you for your help.

Documentation

While viewing the code and examples for simplex-chat and simplexmq. I understand that there are a few command with one being Ping. I tried a telnet session to the server with a successful connection but trying different cases of Ping, the server continued to close the session. Is there any documentation on how to connect to the server to create connections and send messages?

Error Adding my own XFTP server

I have succesfully configured my own SMP and XFTP server in Ubuntu. In the android app, I am able to add the SMP server. However, when I try to add the XFTP server I have the following problem.

I am able to add it, and test it. But at the moment of saving them I get the message (translate from spanish)

Error saving SMP servers: Make sure the addresses of the XFTP server have the correct format, and separated by commas and are not duplicated.

I believe this is a bug in the program at the moment of saving them.
Thanks for your excellent work!

DigitalOcean droplet server does not work

Summary

smp-server binary from the release page with BuildID cd99e16fec87f49fbfc352350b688e9f90f36e56 DOES work.
smp-server binary from the DigitalOcean droplet with BuildID 9dcbeeef5875acc615c486a4c55be8b125592628 DOES NOT work.

What i did

I used the simplex digital Ocean droplet and run it.
Then i downloaded the simplex-chat (client application) and tried to connect it to my new server (running on digital ocean).
unfortunately this did not work. I got the following error message:

me@mybox:~$ simplex-chat -s smp://[email protected]
option -s: @: Failed reading: satisfyWith

How i found out

When i tried the same thing with one of the offical server, it works.

I downloaded the server binary from the release page and started it locally on my computer.
I connected to my local instance, did work, as seen below.

me@mybox:~/$ simplex-chat -s smp://[email protected]
SimpleX Chat v1.0.0
db: /home/me/.simplex/simplex_v1_chat.db, /home/me/.simplex/simplex_v1_agent.db
type "/help" or "/h" for usage info
[...]

Next thing i did was to check if the local server binary is the same as the one in the digital ocean droplet.
Turns out it is not.

root@simplex:~# file /opt/simplex/bin/smp-server
/opt/simplex/bin/smp-server: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9dcbeeef5875acc615c486a4c55be8b125592628, stripped

The local server binary (downloaded from the release page) is different from the above.

me@mybox:~/Downloads$ file smp-server-ubuntu-20_04-x86-64 
smp-server-ubuntu-20_04-x86-64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=cd99e16fec87f49fbfc352350b688e9f90f36e56, stripped

After finding out that the binaries from the release page and the droplet are different i just uploaded the release binary into my droplet and overwrote /opt/simplex/bin/smp-server.

After replacing the smp-server binary from the droplet with the one from the release page it also works for me with my digital ocean droplet. I think the digital ocean droplet needs some love and a binary to be updated.

P.S. Thank you for that software project, i like it.

Security and Privacy Properties of Groups

I'm curious to understand just how it is that groups work, and what that means for their security and privacy properties. For individual connections, this is all pretty well documented and clear. For groups, it doesn't seem quite as clear to me exactly what compromises or concerns their may be. It also isn't quite clear where groups are built on top of primitives, or if there are specific parts of the primitives that are indented for group behaviors. It seems like the Open Connections RFC describes the current approach, and an "introduction" based approach was considered but eventually rejected?

SMP server fingerprint

Hello all,

I have just recently (read as of today) deployed Simplexmq server using docker on Ubuntu 20.04.

While playing around with the terminal app on Mac and the iOS app chatting back and forth with myself to test different features and gauge how responsive my hardware was, I wanted to test whether or not improperly configured credentials would cause an error to be reported in either app.

When connecting to my own docker deployed smp server correctly, everything works fine as expected. However, when I malformed the fingerprint part of the smp address (for example, smp://[email protected] where the letter E was substituted with another value) the connection still succeeded with no error message in either terminal or iOS app.

The only time I noticed there was a problem was when I would use the "/fr" command to pull in an image. At that point, the terminal app would complain about exception: HandshakeFailed (Error_Protocol ("certificate has unknown CA",True,UnknownCa)).

Am I missing a configuration option or a different way of building the docker image, or is this the correct operation? I was under the impression that the fingerprint part of the smp:// address was to insure that no MITM could have somehow interjected themselves. But if I supply a completely wrong fingerprint, both clients connect and exchange messages just fine with each other, at least until file transfer.

During TLS handshake the client must validate that the fingerprint of the online server certificate is equal to the serverIdentity the client received as part of SMP server address; if the server identity does not match the client must abort the connection.

  • edit 2
  • after looking into issue #328, If the fingerprint is malformed, then the /c command does indeed fail with the same message as described above. So it seems that even though I am able to connect with the wrong fingerprint, I am unable to use the self-hosted server correctly. I still seem to believe, correct me if I am wrong, that the terminal app and iOS app should still report an error and refuse to save the SMP server address or give an error if the smp://fingerprint@fqdn has an improperly transcribed fingerprint.

Server components not listening to ipv4 (ipv6 compatability issue)

With the introduction of ipv6 support, the server components (smp and xftp) do not listen to ipv4 any more. The server components bind to their respective ports on ipv6, but not on ipv4. If ipv6 is disabled on the server, the smp and xftp components fail to start. In my tests the last fully working smp-server version is v4.4.1. I suspect, it's some kind of regression with ipv6 support.

Subject field

The ability to add a subject to a message and have this field be encrypted.

This can allow for the protocol to also be used as an email like protocol, not just a messaging protocol.

Help Running on Oracle Cloud Free Tier

I can't get it running on Oracle Cloud Free Tier on Debian 11. Also a few questions about how to deploy.

  1. I setup with docker-compose. I changed XFTP server to port 5224. I left localhost in here but used my domain name when trying to use them in SimpleX android app.
version: '3.3'
services:
    smp-server:
        environment:
            - ADDR=localhost
#            - PASS=password
        ports:
            - '5223:5223'
        volumes:
            - '$HOME/simplex/smp/config:/etc/opt/simplex:z'
            - '$HOME/simplex/smp/logs:/var/opt/simplex:z'
        image: 'simplexchat/smp-server:latest'

    xftp-server:
        environment:
            - ADDR=localhost
            - QUOTA=1048576
        ports:
            - '5224:443'
        volumes:
            - '$HOME/simplex/xftp/config:/etc/opt/simplex-xftp:z'
            - '$HOME/simplex/xftp/logs:/var/opt/simplex-xftp:z'
  1. For XFTP is quota in MBs or KBs?
  2. Do you need to run this behind a reverse proxy? or open ports?
  3. I tried running them behind Caddy but didn't work in SimpleX. I tried SMP server with just an open port and SimpleX app gave me a red X.

[Docker] Server is not initialized - Unraid

I am trying to deploy this on my unraid server.

I have used all your variables/port/env within the docker section

Unraid doesn't appear to allow :z so i have these as RW

i am getting constant container reboots.

I can see the logs get generated and it advises

Error: server is not initialized (/etc/opt/simplex/smp-server.ini does not exist).
Run `smp-server init`.

I can't run the init command manually in the docker as its constantly rebooting.

Any suggestions? should I be setting a PUID or PGID or UMASK?

Restructure repos

  • Protocol name. SMP or SMQ?
  • rename repo simplex-messaging -> SimplexMQ
  • publish hackage lib
  • move dog-food to protocol repo
  • rename repo protocol -> chat
  • move protocol docs to SimplexMQ

SimpleX uses previously configured SMP servers when custom SMP server is entered for previously created contacts

Im actually not entirely sure if this is an issue or my fault.
Sry in advance, if i just didnt understand something crucial.

So i've setup a SMP Server on Ubuntu 2204 LTS using the latest binary,
like its described in the Documentation, and in General this all seems to be fine:

Jul 25 18:41:58 systemd[1]: Started Simplex SMP Server.
Jul 25 18:41:58 smp-server[2068]: SMP server v3.1.2
Jul 25 18:41:58 smp-server[2068]: Fingerprint: (removed, not for the public....)
Jul 25 18:41:58 smp-server[2068]: Store log disabled.
Jul 25 18:41:58 smp-server[2068]: Listening on port 5223 (TLS)...
Jul 25 18:41:58 smp-server[2068]: not expiring inactive clients
Jul 25 18:41:58 smp-server[2068]: server stats log enabled: /var/opt/simplex/smp-server-stats.daily.log

I entered the SMP server in my terminal Client, as well as in my Android App using smp://@:5223, ofc replaced with my individual fingerprint and ip.
Both clients accepted it.

Now i wanted to test if the messages are delivered over my server,
so i turned off the Terminal Cient, and sent a Message from my Android Device.
Then i turned off Simplex Chat on Android in the Settings, and enabled my Terminal Client,
and reveived the message, so it must have passed some server, as no direct connection should have been possible. Alright.

Then i tried same again, but turned off my SMP Server before, and miraculously the messages still arrived, without P2P connection, and SMP Server turned off? So i thought there must be some fallback, even if you have customized a own SMP, is that right?
How can i ensure, that my own SMP Server ist used? (at least if both chat partners customized the same one) Or did i just get wrong, how this whole System works?

I also tried it, with having my phone in the mobile network, and Terminal Application in my home wifi, getting the same result.

Thanks in advance for any ideas :)

Edit:
I know this is supposed to be decentralized, but at least i thought it would dispatch my messages over my server if i customize one...

Chat prototype - v0.3 release

  • e2e encryption
  • command authentication
  • include authtag inside encrypted part and pad messages for e2e #61
  • transport encryption #65
  • tcp connection management - heartbeat, detect disconnection #59
  • terminal editing
  • save messages #45
  • delivery notifications
  • executables in releases #76 #84
  • auto-subscribe to connected contacts #70
  • SMP protocol - align with the implementation
  • agent protocol - finalize
  • basic terminal mode #71, enforced basic mode, no utf8 support warning #77
  • separate DB connection per agent client #60
  • agent error handling and errors sent to the client #101 #102
  • initialize database via an absolute path, e.g. in home folder #74
  • deploy new server version
  • key serialisation format (server key files, invitation, database) #98
  • binary key in transport handshake #105
  • fix non deterministic tests #99
  • mitigate timing attack on SMP command signature verification
  • SMP server deployment - md file
  • installation instructions / script

Docker Hub: support arm64 builds

Currently, Docker workflow supports building and pushing only amd64 images to Docker Hub, since compiling arm64 binaries with qemu/docker results in OOM, even on powerful machines with 32Gb RAM. Let's figure out the best way to support arm64.

Currently, proposed solutions:

  • Integrate with CircleCI workflow
    • Requires separate workflow, not compatible with GitHub actions.
    • Requires 3 CI jobs: two for creating amd64 and arm64 respectfully and one for combining this images into manifest.
      Source: Multi-Arch Build With Docker Buildx and CircleCi
    • Simplex Chat need to apply for free tier plan for Open Source projects.
  • Selfhost Github runner on aarch64 hardware.
    • Need to figure out where to host arm server.
    • Set up Github runner (pretty straightforward).
    • Adjust docker-image.yml

xftp-ubuntu-20_04-x86-64 recv , cannot specify the xftp server (-s option missing).

Hello,

With the command "xftp-ubuntu-20_04-x86-64 send", we can send specify the xftp server with -s option but with the command "xftp-ubuntu-20_04-x86-64 recv", we cannot:

ludeti@FiercePC:~/Apps$ ./xftp-ubuntu-20_04-x86-64 recv --help
Usage: xftp-ubuntu-20_04-x86-64 recv FILE [DIR] [-r|--retry RETRY] [--tmp TMP]
[-v|--verbose] [-y|--yes]
Receive file

Available options:
FILE File description file
DIR Directory to save file (default: system Downloads
directory)
-r,--retry RETRY Number of network retries (default: 3)
--tmp TMP Directory for temporary encrypted file (default:
system temp directory)
-v,--verbose Verbose output
-y,--yes Yes to questions
-h,--help Show this help text
ludeti@FiercePC:~/Apps$ ./xftp-ubuntu-20_04-x86-64 send --help
Usage: xftp-ubuntu-20_04-x86-64 send FILE [DIR] [-n COUNT] [-s|--servers SERVER]
[-r|--retry RETRY] [--tmp TMP]
[-v|--verbose]
Send file

Available options:
FILE File to send
DIR Directory to save file descriptions (default: current
directory)
-n COUNT Number of recipients (default: 1)
-s,--servers SERVER Semicolon-separated list of XFTP server(s) to use
(each server can have more than one hostname)
-r,--retry RETRY Number of network retries (default: 3)
--tmp TMP Directory for temporary encrypted file (default:
system temp directory)
-v,--verbose Verbose output
-h,--help Show this help text

Regards,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.