Magnus Henoch announced a few days ago that he was working on an ejabberd implementation for JEP-163 (Personal Eventing Protocol), the protocol formerly known as SPPS. I found a bit of spare time today to finish the real (as opposed to pseudo-) PEP implementation in Psi, while Magnus fixed some things on the server side. The implementation isn’t available publically yet (since no server supports it anyway), but interested server developers are of course always welcome to ask for a snapshot.
Because PEP makes it a lot easier to track subscriptions, we moved away from JEP-173 (Pubsub Subscription Storage) for storing our subscriptions. Instead, we query PubSub affiliations explicitly when the user needs them, as can be seen here. The only thing the user still needs to do manually is select what information from which contacts he/she wants. We will make it possible to avoid this as well by giving the option to automatically subscribe to contacts, although this requires us to keep track of all subscriptions locally (to make it feasible bandwidth-wise). However, note that even with local subscription tracking, having many contacts with PEP-enabled clients connected to PEP-disabled servers will waste a lot of bandwidth if you want auto-subscribe (as they will require you to query PEP server support every time). One way to overcome this is for a client to only publish PEP support capabilities if its server supports it (which Psi currently does).