This repository contains the Gluon Wave Application, which is using the Signal protocol with Java and JavaFX.
We highly recommend to read this README first. Gluon Wave is a technical project, in an experimental phase. We hope it can serve many people and help achieve the goals of the Signal Foundation. At this moment though, you should not expect top-quality from this project. If you're not scared by that, and want to go to the download page immediately, here you go: https://github.com/gluonhq/wave-app/releases/tag/v1.0.5
Signal is an encryption tool enabling end-to-end encryption. Messages sent via the Signal Protocol are encrypted by the sender, and decrypted by the recipient, using a combination of clever techniques including Extended Triple Diffie-Hellman and Double Ratchet.
The Signal protocol and its implementations are open-source and free to use (as long as the GPL license is respected). Signal respects users privacy and is not showing ads. Signal is a non-profit organisation, and accepts donations.
In order to use Signal, you need to install it on your phone first. Go to https://signal.org/download/ and follow the links for Android or iOS. Once you are using Signal on your phone, you can pair other devices, e.g. your desktop or laptop, and use Signal on those devices as well -- using the same account as the one you use on your phone. Currently, there is an electron-based desktop application that you can use on your system. The Wave Application in the repository you're currently looking at is a Java and JavaFX based alternative for this electron based application.
We didn't have to start from scratch when writing this application. There is a Java implementation of the Signal protocol that is (or was) used by the Android client. That implementation served as the basis for the Java API's we needed for the Wave Application. We made a number of changes though, since we don't have to worry about Android restrictions. We rather use the latest Java, as developed in the OpenJDK. We forked the Signal repositories and updated them to Java 17. The access to the Signal Protocol is defined in the Gluon Equation project, which can be found at https://github.com/gluonhq/equation.git .
The application in this repository uses the libraries described in the previous section, and creates a JavaFX user interface around them.
You can run Gluon Wave in 3 ways:
- Download and run the native executables for Windows, Mac or Linux
- Download and run the jpackaged installers for Windows, Mac or Linux
- Build the code from this repository and run it.
The first 2 options don't require a JVM at runtime. You can get the latest development versions and instructions from https://github.com/gluonhq/wave-app/releases/tag/v1.0.5
Keep in mind that this is a developer project, and you should not use this for critical/production purposes
The first option leverages the Java packager that is part of the JDK distributions. The second option leverages GraalVM native-image.
- Set
JAVA_HOME
to a JDK 11+ - Install all sub-projects in local maven repository:
mvn clean install
- Execute the application:
cd App && mvn gluonfx:run
-
Download the latest version of GraalVM from Gluon and unpack it like you would any other JDK.
-
Set
GRAALVM_HOME
environment variable to the GraalVM installation directory:
export GRAALVM_HOME=path-to-graalvm-directory
- Native build the application:
mvn gluonfx:build -pl App
- Once the build is successful, the native image be executed by:
mvn gluonfx:nativerun -pl App
There are a bunch of known and unknown issues, which you can report in the issue tracker of this repository.
- No support for groups
- No support for attachments
- No support for stickers
... but that is just a matter of time.
Below is a list of frequently asked questions / issues one might face during running ChatApp from source:
This error comes when the app is started, but you waited too long to scan the QR code
This error normally occurs due to "Rate Limit Exceeded", which means that scanning was tried too often. You need to allow it to cool down and try again after 1 or 2 minutes.
If all goes well, after the QR code is scanned, you should see your contact list in a few
seconds. Sometimes, the contact sync requests isn't received.
Current workaround is to close the application and start it again.
If that doesn't work, remove all your linked devices from mobile app, remove ~/.signalfx
directory and restart the application.
We're excited you're reading until here! We recommend that you fork this repository, and change whatever you want. You can work on a different theme, by modifying the CSS files. You can create a different layout, by modifying the FXML files. Or you can modify the flow and logic, by modifying the Java files.