Avatar compatibility issue between XEP-0084 and XEP-0153 in Openfire Community 5.0.3

Hello Ignite Realtime community,

I’m experiencing an avatar interoperability issue in Openfire Community Edition 5.0.3 and would appreciate your guidance.

Problem Description:
Different XMPP clients are using different avatar standards:

  • Conversations client uses XEP-0084 (User Avatar)

  • Psi client uses XEP-0153 (vCard-Based Avatar)
    As a result, avatars are not visible across these clients.

What I’ve Investigated:

  1. XEP-0398 (User Avatar to vCard Conversion) seems to be the proper solution

  2. This feature is marked as “Advanced Server Supported” (Enterprise Edition only)

  3. I found references to an “Avatar Synchronization Plugin” on GitHub, but the links appear to be broken/dead

  4. Openfire Community Edition 5.0.3 doesn’t have built-in XEP-0398 support

Questions:

  1. Is there any official or community solution for avatar synchronization in Community Edition?

  2. Was there ever a working plugin for this, and if so, is it available somewhere?

  3. Are there any configuration workarounds to enable basic avatar compatibility?

  4. Would developing a custom plugin be the only option for Community Edition users?

Environment:

  • Openfire 5.0.3 Community Edition

  • Mixed client environment (Conversations, Psi, others)

Thank you for any insights or suggestions!

XEP-0398 is already implemented from Openfire 5.0.1 +. However i confess that there might be some issues going on. Since sometimes i can see Guus avatar, and sometimes it becomes a G. maybe it might also be a client, updating the avatar from other than what was uploaded or something. hard to track down, maybe upload an avatar(on Conversations, or PSI) then keep looking at the logs, and log in with the other client.

Dear Zoidberg,

Thank you for your helpful response! I’ve done some investigation based on your suggestions and wanted to share my findings about why Psi doesn’t see avatars from Conversations.

Problem root cause (based on my investigation):

  1. Conversations uses XEP-0084 (PEP avatars) published to ofPubsubItem table:

    text

Node: urn:xmpp:avatar:data
Payload: <data xmlns="urn:xmpp:avatar:data">/9j/4AAQSkZJRg... (base64 JPEG)
Node: urn:xmpp:avatar:metadata  
Payload: <metadata><info type="image/jpeg" bytes="8800"... />
  1. Psi uses XEP-0153 (vCard-based avatars) looking in ofVCard table.

  2. Database queries confirmed:

    sql

-- User 'active' (Conversations client):
SELECT * FROM ofPubsubNode WHERE serviceID='active@xmpp.free' AND nodeID LIKE '%avatar%';
-- Returns: urn:xmpp:avatar:data, urn:xmpp:avatar:metadata

SELECT username FROM ofVCard WHERE username='active';
-- Returns: NO RECORD (empty)

-- User 'psi' (Psi client):  
SELECT username, LENGTH(vcard) FROM ofVCard WHERE username='psi';
-- Returns: psi | 15023 (has vCard)

Key findings:

  • active@xmpp.free (Conversations): Has PEP avatar but NO vCard

  • psi@xmpp.free (Psi): Has BOTH PEP avatar AND vCard

Conclusion: Avatars exist in PEP but aren’t synchronized to vCard.


Why XEP-0398 isn’t working for me:

Although Openfire 5.0.3 should support XEP-0398 (Avatar Conversion), I’m experiencing either:

  1. Synchronization isn’t activated/configured properly

  2. Or there’s a bug in the specific implementation

Proposed solutions:

  1. Short-term: Manual sync from ofPubsubItem to ofVCard via script/SQL

  2. Long-term:

    • Configure XEP-0398 in Openfire (if configurable)

    • Develop simple plugin for automatic PEP↔vCard sync

Question: Could you clarify how to activate/verify XEP-0398 in Openfire 5.0.3? I couldn’t find documentation on this specific feature configuration.

Thanks again for your assistance!

I will try to bring this up with Guus(the developer who introduced this feature, and one of the main developers for Openfire). But since we are at this New year period and so on, might take a while. I did test this feature in the past, and it was working, however i see that neither Gajim or Conversations are acknowledging the feature. I am wondering if i am misremember testing it or if something else is going wrong.

But AFAIK there is no setting, it should work right out of the bat. and should work both ways right? Vcard to PEP and vice versa(not sure didnt read the spec).

Sorry i was incorrect. there is a system property, create this property, and set its value to false
avatar.xep0398.disabled If you can, after creating it restart the server, and test it(probably need to upload avatar again?), then let us know(if not much trouble).
[edited] Sorry, after reviewing, i discovered that it is enabled by default. so should work. :frowning:
And Openfire is really not advertising this feature(at least mine).

Dear Zoidberg,

Thank you for the clarification about the system property. I’ve conducted further investigation and would like to share some surprising findings that might help understand the root cause.

Initial Assumption (Incorrect):

I initially believed that Conversations stores avatars exclusively in PEP (without vCard synchronization), and my database queries seemed to confirm this:

  • active@xmpp.free (Conversations user): Had PEP avatars but NO vCard entry

  • psi@xmpp.free (Psi user): Had BOTH PEP avatars AND vCard

Weekend Development & Discovery:

Over the weekend, I attempted to write a plugin (though I must admit I’m not very skilled at plugin development) to copy PEP avatar data to vCard. Despite struggling with the JSP management page (which I couldn’t get working properly), the core functionality worked:

Current Database State:

PEP Entry (from ofPubsubItem):

text

id: e99a162864238a66a305d80043ac4aad3ec77278
creationDate: 001767627492653
payload_size: 8894 bytes
preview: <data xmlns="urn:xmpp:avatar:data">/9j/4AAQSkZJRgABAQ...

vCard Entry (from ofVCard):

text

username: active
vcard_size: 8950 bytes  
preview: <vCard xmlns="vcard-temp"><PHOTO xmlns="">...

The plugin successfully copied the PEP avatar to the vCard table.

Current Behavior:

  1. Psi client: NOW DISPLAYS the avatar correctly (using vCard)

  2. Conversations client: STILL DOES NOT DISPLAY the avatar

  3. Another.im (Conversations fork): Same issue - no avatar display

Key Questions & Observations:

1. Where does Conversations look for avatars?

If Conversations truly uses only PEP (XEP-0084) as previously assumed, then:

  • Why doesn’t it display the avatar that’s clearly present in ofPubsubItem?

  • Is there a configuration issue or bug in Conversations’ PEP subscription?

2. Possible Scenarios:

A) Conversations has a bug in PEP avatar retrieval
B) Conversations uses a different PEP node or expects different data format
C) There’s a subscription/notification issue in Openfire’s PEP implementation
D) Conversations might actually be checking vCard as a fallback (and finding the converted avatar), but still not displaying it for some reason

2 Likes

I don’t have any avatars. Only the avatar in the client where I installed it, on the exact device where I installed it. However, the avatar is in the database in urn:xmpp:avatar:data.

OF: 5.0.3 - 5.0.4
JDK: Eclipse 21
OS: Windows Server 2025
Default installation.
Clients: Gajim and Conversation.

Dear MaxIn,

Thank you for sharing your experience. I completely understand your frustration, as I’ve encountered the exact same issue with avatars in Openfire 5.0.3–5.0.4.

Over the past few weeks, I also tried to solve the problem by writing a custom plugin that copies avatar data between database tables (ofPubsubItemofVCard). Technically, the plugin works — the data gets copied correctly. However, even with that in place, the avatar synchronization between clients (Conversations, Gajim, Psi) remains broken. So unfortunately, a simple database workaround is not enough.

At this point, I’ve come to the sad conclusion that the development team either lacks the resources or the priority to fix this issue properly. I’ve been using Openfire since version 3 and have always appreciated the project, but this avatar interoperability problem seems to have no real solution in the Community Edition.

Because of this, I’ve started evaluating other XMPP servers. In my recent tests with alternative servers (I won’t name them here to avoid advertising), avatar exchange between Conversations, Gajim, and other clients worked out of the box without any extra plugins or hacks.

I truly hope the Openfire team will prove me wrong and address XEP-0398 implementation in a future release. But for now, I’m seriously considering migrating away from Openfire, and it breaks my heart to say this after so many years of loyal use.

Best regards,
Alexandr

1 Like

Thanks. I tried everything too, and nothing worked. It’s really disappointing that Openfire treats its customers this way. I can’t use another server. I need a Windows one, while other powerful and efficient ones run on Linux (I tried it and liked it). I’ll wait and see if they fix it someday. It’s not a big deal to me, I just don’t understand why….