That’s correct, depending on server features and client features, messages may or may not reach you or your contacts when one of you is offline. Most servers to implement XEP-0160 (offline messages) these days as well as MAM (XEP-0313), so the chances of messages NOT being stored by the server when a contact is offline are low.
The issue comes from libpurple and Conversations supporting only one or the other, and hard choices that have to be made by the server admins. In my case since my server is not used by many people, we chose to apply the fix below to send ALL messages straight to MAM rather than the offline messages storage, which hurts libpurple but helps Conversations.
I’m assuming most servers probably use the default, which is to store in offline messages store first, which hurts Conversations but helps most clients.
Hopefully Conversations adds support for Offline Messages soon…
Here is the fix I applied on my own server to send all messages to MAM, which Conversations can handle (but libpurple cannot). Since my main clients are Gajim (on desktop) and ChatSecure (on iOS), this was no problem:
Based on this https://conversations.im/#xmpp , Conversations still doesn’t support XEP-0160 (offline messages).
None of this helps the OMEMO situation though, which IMO is a lot worse when it comes to libpurple+Lurch… I really should raise yet another issue on the Lurch github. I wonder if Purism has been trying it out and encountered these kinds of issues?