README.md

  1# Conversations
  2
  3Conversations: the very last word in instant messaging
  4
  5[![Google Play](http://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=eu.siacs.conversations)
  6
  7![screenshots](https://raw.githubusercontent.com/siacs/Conversations/master/screenshots.png)
  8
  9## Design principles
 10
 11* Be as beautiful and easy to use as possible without sacrificing security or
 12  privacy
 13* Rely on existing, well established protocols (XMPP)
 14* Do not require a Google Account or specifically Google Cloud Messaging (GCM)
 15* Require as few permissions as possible
 16
 17## Features
 18
 19* End-to-end encryption with either [OTR](https://otr.cypherpunks.ca/) or [OpenPGP](http://www.openpgp.org/about_openpgp/)
 20* Sending and receiving images
 21* Indication when your contact has read your message
 22* Intuitive UI that follows Android Design guidelines
 23* Pictures / Avatars for your Contacts
 24* Syncs with desktop client
 25* Conferences (with support for bookmarks)
 26* Address book integration
 27* Multiple accounts / unified inbox
 28* Very low impact on battery life
 29
 30
 31### XMPP Features
 32
 33Conversations works with every XMPP server out there. However XMPP is an
 34extensible protocol. These extensions are standardized as well in so called
 35XEP's. Conversations supports a couple of these to make the overall user
 36experience better. There is a chance that your current XMPP server does not
 37support these extensions; therefore to get the most out of Conversations you
 38should consider either switching to an XMPP server that does or — even better —
 39run your own XMPP server for you and your friends. These XEP's are:
 40
 41* XEP-0065: SOCKS5 Bytestreams (or mod_proxy65). Will be used to transfer
 42  files if both parties are behind a firewall (NAT).
 43* XEP-0163: Personal Eventing Protocol for avatars
 44* XEP-0198: Stream Management allows XMPP to survive small network outages and
 45  changes of the underlying TCP connection.
 46* XEP-0280: Message Carbons which automatically syncs the messages you send to
 47  your desktop client and thus allows you to switch seamlessly from your mobile
 48  client to your desktop client and back within one conversation.
 49* XEP-0237: Roster Versioning mainly to save bandwidth on poor mobile connections
 50* XEP-0313: Message Archive Management synchronize message history with the
 51  server. Catch up with messages that were sent while Conversations was
 52  offline.
 53* XEP-0352: Client State Indication lets the server know whether or not
 54  Conversations is in the background. Allows the server to save bandwidth by
 55  withholding unimportant packages.
 56* XEP-0191: Blocking command lets you blacklist spammers or block contacts
 57  without removing them from your roster.
 58
 59## Team
 60
 61#### Head of Development
 62
 63* [Daniel Gultsch](https://github.com/inputmice)
 64
 65#### Code Contributions
 66
 67(In order of appearance)
 68
 69* [Rene Treffer](https://github.com/rtreffer)
 70* [Andreas Straub](https://github.com/strb)
 71* [Alethea Butler](https://github.com/alethea)
 72* [M. Dietrich](https://github.com/emdete)
 73* [betheg](https://github.com/betheg)
 74* [Sam Whited](https://github.com/SamWhited)
 75
 76#### Logo
 77* [Ilia Rostovtsev](https://github.com/qooob) (Progress)
 78* [Diego Turtulici](http://efesto.eigenlab.org/~diesys) (Original)
 79
 80#### Translations
 81Translations are managed on [Transifex](https://www.transifex.com/projects/p/conversations/)
 82
 83## FAQ
 84
 85### General
 86
 87#### How do I install Conversations?
 88
 89Conversations is entirely open source and licensed under GPLv3. So if you are a
 90software developer you can check out the sources from GitHub and use ant to
 91build your apk file.
 92
 93The more convenient way — which not only gives you automatic updates but also
 94supports the further development of Conversations — is to buy the App in the
 95Google [Play Store](https://play.google.com/store/apps/details?id=eu.siacs.conversations).
 96
 97Buying the App from the Play Store will also give you access to our [beta test](#beta).
 98
 99#### I don't have a Google Account but I would still like to make a contribution
100
101I accept donations over PayPal, Bitcoin and Flattr. For donations via PayPal you
102can use the email address `donate@siacs.eu` or the button below.
103
104[![Donate with PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CW3SYT3KG5PDL)
105
106**Disclaimer:** I'm not a huge fan of PayPal and their business policies. For
107larger contributions please get in touch with me beforehand and we can talk
108about bank transfer (SEPA).
109
110My Bitcoin Address is: `1NxSU1YxYzJVDpX1rcESAA3NJki7kRgeeu`
111
112
113[![Flattr this!](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=inputmice&url=http%3A%2F%2Fconversations.siacs.eu&title=Conversations&tags=github&category=software)
114
115#### How do I create an account?
116
117XMPP, like email, is a federated protocol which means that there is not one
118company you can create an 'official XMPP account' with. Instead there are
119hundreds, or even thousands, of provider out there. To find one use a web search
120engine of your choice. Or maybe your university has one. Or you can run your
121own. Or ask a friend to run one. Once you've found one, you can use
122Conversations to create an account. Just select 'register new account on server'
123within the create account dialog.
124
125#### Where can I set up a custom hostname / port
126Conversations will automatically look up the SRV records for your domain name
127which can point to any hostname port combination. If your server doesn’t provide
128those please contact your admin and have them read
129[this](http://prosody.im/doc/dns#srv_records)
130
131#### Conversations doesn't work for me. Where can I get help?
132
133You can join our conference room on `conversations@conference.siacs.eu`.
134A lot of people in there are able to answer basic questions about the usage of
135Conversations or can provide you with tips on running your own XMPP server. If
136you found a bug or your app crashes please read the Developer / Report Bugs
137section of this document.
138
139#### I need professional support with Conversations or setting up my server
140
141I'm available for hire. Contact me at `inputmice@siacs.eu`.
142
143#### How does the address book integration work?
144
145The address book integration was designed to protect your privacy. Conversations
146neither uploads contacts from your address book to your server nor fills your
147address book with unnecessary contacts from your online roster. If you manually
148add a Jabber ID to your phones address book Conversations will use the name and
149the profile picture of this contact. To make the process of adding Jabber IDs to
150your address book easier you can click on the profile picture in the contact
151details within Conversations. This will start an "add to address book" intent
152with the JID as the payload. This doesn't require Conversations to have write
153permissions on your address book but also doesn't require you to copy/paste a
154JID from one app to another.
155
156#### I get 'delivery failed' on my messages
157
158If you get delivery failed on images it's probably because the recipient lost
159network connectivity during reception. In that case you can try it again at a
160later time.
161
162For text messages the answer to your question is a little bit more complex.
163When you see 'delivery failed' on text messages, it is always something that is
164being reported by the server. The most common reason for this is that the
165recipient failed to resume a connection. When a client loses connectivity for a
166short time the client usually has a five minute window to pick up that
167connection again. When the client fails to do so because the network
168connectivity is out for longer than that all messages sent to that client will
169be returned to the sender resulting in a delivery failed.
170
171Other less common reasons are that the message you sent didn't meet some
172criteria enforced by the server (too large, too many). Another reason could be
173that the recipient is offline and the server doesn't provide offline storage.
174
175Usually you are able to distinguish between these two groups in the fact that
176the first one happens always after some time and the second one happens almost
177instantly.
178
179#### Where can I see the status of my contacts? How can I set a status or priority?
180
181Statuses are a horrible metric. Setting them manually to a proper value rarely
182works because users are either lazy or just forget about them. Setting them
183automatically does not provide quality results either. Keyboard or mouse
184activity as indicator for example fails when the user is just looking at
185something (reading an article, watching a movie). Furthermore automatic setting
186of status always implies an impact on your privacy (are you sure you want
187everybody in your contact list to know that you have been using your computer at
1884am‽).
189
190In the past status has been used to judge the likelihood of whether or not your
191messages are being read. This is no longer necessary. With Chat Markers
192(XEP-0333, supported by Conversations since 0.4) we have the ability to **know**
193whether or not your messages are being read.  Similar things can be said for
194priorities. In the past priorities have been used (by servers, not by clients!)
195to route your messages to one specific client. With carbon messages (XEP-0280,
196supported by Conversations since 0.1) this is no longer necessary. Using
197priorities to route OTR messages isn't practical either because they are not
198changeable on the fly. Metrics like last active client (the client which sent
199the last message) are much better.
200
201Unfortunately these modern replacements for legacy XMPP features are not widely
202adopted. However Conversations should be an instant messenger for the future and
203instead of making Conversations compatible with the past we should work on
204implementing new, improved technologies and getting them into other XMPP clients
205as well.
206
207Making these status and priority optional isn't a solution either because
208Conversations is trying to get rid of old behaviours and set an example for
209other clients.
210
211#### Conversations is missing a certain feature
212
213I'm open for new feature suggestions. You can use the [issue tracker][issues] on
214GitHub.  Please take some time to browse through the issues to see if someone
215else already suggested it. Be assured that I read each and every ticket. If I
216like it I will leave it open until it's implemented. If I don't like it I will
217close it (usually with a short comment). If I don't comment on an feature
218request that's probably a good sign because this means I agree with you.
219Commenting with +1 on either open or closed issues won't change my mind, nor
220will it accelerate the development.
221
222#### You closed my feature request but I want it really really badly
223
224Just write it yourself and send me a pull request. If I like it I will happily
225merge it if I don't at least you and like minded people get to enjoy it.
226
227#### I need a feature and I need it now!
228
229I am available for hire. Contact me via XMPP: `inputmice@siacs.eu`
230
231### Security
232
233#### Why are there two end-to-end encryption methods and which one should I choose?
234
235In most cases OTR should be the encryption method of choice. It works out of the
236box with most contacts as long as they are online. However PGP can, in some
237cases, (message carbons to multiple clients) be more flexible.
238
239#### How do I use OpenPGP
240
241Before you continue reading you should note that the OpenPGP support in
242Conversations is experimental. This is not because it will make the app unstable
243but because the fundamental concepts of PGP aren't ready for widespread use.
244The way PGP works is that you trust Key IDs instead of JID's or email addresses.
245So in theory your contact list should consist of Public-Key-IDs instead of
246JID's. But of course no email or XMPP client out there implements these
247concepts. Plus PGP in the context of instant messaging has a couple of
248downsides: It is vulnerable to replay attacks, it is rather verbose, and
249decrypting and encrypting takes longer than OTR. It is however asynchronous and
250works well with message carbons.
251
252To use OpenPGP you have to install the open source app
253[OpenKeychain](www.openkeychain.org) and then long press on the account in
254manage accounts and choose renew PGP announcement from the contextual menu.
255
256#### How does the encryption for conferences work?
257
258For conferences the only supported encryption method is OpenPGP (OTR does not
259work with multiple participants). Every participant has to announce their
260OpenPGP key (see answer above). If you would like to send encrypted messages to
261a conference you have to make sure that you have every participant's public key
262in your OpenKeychain. Right now there is no check in Conversations to ensure
263that. You have to take care of that yourself. Go to the conference details and
264touch every key id (The hexadecimal number below a contact). This will send you
265to OpenKeychain which will assist you on adding the key.  This works best in
266very small conferences with contacts you are already using OpenPGP with. This
267feature is regarded experimental. Conversations is the only client that uses
268XEP-0027 with conferences. (The XEP neither specifically allows nor disallows
269this.)
270
271### Development
272
273<a name="beta"></a>
274#### Beta testing
275If you bought the App on [Google Play](https://play.google.com/store/apps/details?id=eu.siacs.conversations)
276you can get access to the latest beta version by joining the
277[Conversations Beta Testers](https://plus.google.com/communities/107649347599361240873)
278community on Google+ and then using [this link](https://play.google.com/apps/testing/eu.siacs.conversations)
279to sign up for the beta test.
280
281#### How do I build Conversations
282
283Make sure to have ANDROID_HOME point to your Android SDK
284
285    git clone https://github.com/siacs/Conversations.git
286    cd Conversations
287    ./gradlew build
288
289
290[![Build Status](https://travis-ci.org/siacs/Conversations.svg?branch=development)](https://travis-ci.org/siacs/Conversations)
291
292### How do I update/add external libraries?
293
294If the library you want to update is in Maven Central or JCenter (or has its own
295Maven repo), add it or update its version in `build.gradle`. If the library is
296in the `libs/` directory, you can update it using a subtree merge by doing the
297following (using `minidns` as an example):
298
299    git remote add minidns https://github.com/rtreffer/minidns.git
300    git fetch minidns
301    git merge -s subtree minidns master
302
303To add a new dependency to the `libs/` directory (replacing "name", "branch" and
304"url" as necessary):
305
306    git remote add name url
307    git merge -s ours --no-commit name/branch
308    git read-tree --prefix=libs/name -u name/branch
309    git commit -m "Subtree merged in name"
310
311#### How do I debug Conversations
312
313If something goes wrong Conversations usually exposes very little information in
314the UI (other than the fact that something didn't work). However with adb
315(android debug bridge) you squeeze some more information out of Conversations.
316These information are especially useful if you are experiencing trouble with
317your connection or with file transfer.
318
319    adb -d logcat -v time -s conversations
320
321#### I found a bug
322
323Please report it to our [issue tracker][issues]. If your app crashes please
324provide a stack trace. If you are experiencing misbehaviour please provide
325detailed steps to reproduce. Always mention whether you are running the latest
326Play Store version or the current HEAD. If you are having problems connecting to
327your XMPP server your file transfer doesn’t work as expected please always
328include a logcat debug output with your issue (see above).
329
330[issues]: https://github.com/siacs/Conversations/issues