This is not just a CLI as the name of the repository suggest. However, the project had started as a CLI.
WARNING: This is an unofficial client of Wire, please use it only with a server which allows unofficial clients (or this client in particular) in its terms and conditions.
- Provide an Electron free way to communicate using Wire on a desktop.
- Provide an automation friendly way to use the Wire backend as a "user" (not "bot"/"service").
- Provide a truly configurable client, so the user can be in control of where and how to store the data.
- Discover problems with libraries/tooling in the Haskell eco-system and fix them.
Feature | wire-cli | wire-gui |
---|---|---|
Registration | βοΈ | β |
Search another user | βοΈ | β |
Connections | βοΈ | β |
Create conversations | βοΈ | β |
Discover conversations | βοΈ | βοΈ |
Manage conversations | β | β |
Send text message | βοΈ | βοΈ |
Receive text message | βοΈ | βοΈ |
E2EE message exchange (Proteus) | βοΈ | βοΈ |
Proteus session reset | β | β |
E2EE messaging (MLS) | β | β |
Mark as read/unread | β | β |
Read reciepts | β | β |
Delivery receipts | β | β |
Send/Recieve Assets | β | β |
Voice Mesages | β | β |
Notifications | βοΈ | β |
Update profile data | β | β |
Calling | β | β |
Storage: Directory full of JSON Files | βοΈ | βοΈ |
Storage: Sqlite | β | β |
Storage: Remote RDBMS (mysql/postgres) | β | β |
Storage: encryption at rest | β | β |
Backup/Restore | β | β |
Restore from Android/iOS/Web backups | β | β |
Search local messages | β | β |
Tag/tokenize images/videos/pdfs/links for search | β | β |
Logging | β | β |
Legalhold | β | β |
Login with SSO | β | β |
Team management | β | β |
- nix-flakes
- direnv (optional)
NOTE All commands are to be run from root of this repo.
-
How to get a development shell with direnv?
direnv allow
-
How to get a development shell without direnv?
nix develop
-
How to run unit tests from development shell?
make test-unit
-
How to run integration tests from development shell?
When targetting "demo" setup defined in the wire-server repository:
make test-int-demo demo_host=<ip_addr>
The
demo_host
parameter defaults to127.0.0.1
if not specified.When targetting a deployed wire-server, the tests can use the "backdoor" basic auth to talk to nginz. This requires the nginz helm chart deployed with
nginx_conf.env
set tostaging
. Once such an environment is available, the tests can be run like this:make test-int-kube \ kube_nginz_host=nginz-https.<domain> \ kube_nginz_port=443 \ kube_backdoor_nginz_user=<name> \ kube_backdoor_nginz_password=<password>
-
How to run haskell-language-server (HLS) so it uses dev-shell?
To ensure that haskell-language-server executes in development environment
lsp-wrapper.sh
can be used. The script usesdirenv exec
to ensure that HLS runs inside the development environment. Withoutdirenv
this can be done usingnix develop
, but at this point it is not very clear how to do this.With emacs and direnv, this
.dir-local.el
file works:((haskell-mode . ((lsp-haskell-server-path . "/<path-to-wire-cli-repo>/lsp-wrapper.sh"))))
-
How to pin a haskell package to a particular hackage version?
Add something like this to
hackagePins
array in./pins.yaml
:- package: <package-name> version: <version>
-
How to pin a haskell package to a particular commit in git?
Add something like this to
gitPins
array in./pins.yaml
:- location: <https://server/owner/repo> commit: <sha> # Only required if the cabal file is not at the root of repo subdirs: - <some-subdir> - <another-subdir>
-
How to format code?
Using
ormolu
.