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

1 Like