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_hostparameter defaults to127.0.0.1if 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.envset 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.shcan be used. The script usesdirenv execto ensure that HLS runs inside the development environment. Withoutdirenvthis 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.elfile 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
hackagePinsarray 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
gitPinsarray 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.