Skip to:
Content

BuddyPress.org

Opened 3 weeks ago

Last modified 3 weeks ago

#8148 new enhancement

A new direction regarding optional components management

Reported by: imath Owned by:
Milestone: 6.0.0 Priority: normal
Severity: normal Version:
Component: Core Keywords: has-patch
Cc:

Description

In short: I’m suggesting to progressively migrate optional components as BuddyPress plugins, starting by making the BP Attachments component (I’m working on for 6.0.0) a plugin.

Why?

  1. BuddyPress is becoming a really huge plugin (zip is 3 MO which represent 1/4 of WordPress size), making us hesitant about adding new components.
  2. Only keeping the Core + Members components in BuddyPress can open new opportunities for hesitant users who only need to organize users on the front-end (or to build on top of a lightweight BuddyPress).
  3. We could welcome new components & contributors to improve BuddyPress popularity. Being listed into the “BuddyPress” Plugins sub directory could be very interesting for developers.
  4. Components could evolved at a different rhythm than core and be updated as soon as they need to be.
  5. Users would have a real and wider choice for their community site: they could trust “BuddyPress supported components” packaged as plugins.
  6. We have a strength: the WordPress Plugins Directory API, making it very easy to install new components, we just need to list the ones we support to ease their discoverability. (Some alternative paid softwares do not have this advantage).
  7. It seems the natural evolution of Components when we look at the Components management screen which look like the Plugins management screen.
  8. With the “space economy” we could include new tools like an API to handle huge upgrades which would be very interesting for any plugins.

How ?

  • A simple JSON file hosted into the assets directory of our WP repository (like this one) would be enough to build the BuddyPress Components directory.
  • The BuddyPress Components directory replaces the “retired” view of our Components Management screen.
  • A simplified installation/activation process so that it’s not taking too long for users to add new components to their community site.
  • The attached patch can give you a better idea of how it could look like. Below is a link to a video demonstration of it.

https://vimeo.com/367830458

Possible steps

  • 6.0.0: no more new components into Core. BP Attachments is the first Component as a plugin. It's easily installable from the BuddyPress Components directory.
  • 7.0.0: the Site Tracking and Private Message components migrate as plugin,
  • 8.0.0: the Friends and Account Settings components migrate as plugins.
  • 9.0.0: the Notifications and Groups components migrate as plugins.
  • 10.0.0: the Activity component migrates as a plugin.

Let’s talk about it!

Attachments (1)

8148.patch (24.0 KB) - added by imath 3 weeks ago.

Download all attachments as: .zip

Change History (3)

@imath
3 weeks ago

#1 @johnjamesjacoby
3 weeks ago

I'm going to provide a series of responses. Anything that reads as me disagreeing, is just me poking holes in ideas to try and have a dialog, and isn't meant to be shutting anything down or being negative.

  1. The hugeness shouldn't bother us. BuddyPress provides immense value at a third the size of WordPress. This was an original concern with the folks working on BP Media, needing to package huge codecs and such. It could easily be that for BP Attachments, too. But... things are what they are. If it takes 50MB to solve the problem correctly, so be it!
  1. Core + Members doesn't really provide a whole lot of intrinsic value, because those Members still can't do anything but comment. They won't even have profiles (well... they'll still have the non-extended ones, provided that still works!)
  1. This was always a great idea, and one I'd like to see come back somehow. It's somewhat of a maintenance burden, about the size of what the Plugin Review team does already. To fully implement this, we'd likely want to communicate what our intentions are, and make sure to be available to them.
  1. If a component inside of BuddyPress needed love, and if we had the time, we could release a new version with enhancements to any core component at any time. Everything being in a monolithic repository hasn't prevented progress yet. Similar to WordPress, I believe there is still immense value in everything being "packaged" together natively, rather than requiring additional research & discovery.
  1. In an ideal world, every component could have alternatives, including Core & Members. If these components are "native applications" inside of BuddyPress, they should be hot-swappable, to allow some other different/better component to take their place. Deep within the Core of BuddyPress, this is actually achievable, though I've seen zero people take advantage of this ability or API.
  1. Absolutely agree with this. Leveraging the existing WordPress.org plugins repository is definitely the way to do this. There's literally nothing currently to gain in maintaining a separate system.
  1. The Components admin screen was specifically modeled after the Plugins screen, so that it would feel familiar. Many different plugins with their own ecosystems have invented much more tailored UI than what BuddyPress has, but I'm generally not a fan of introducing more things to interface with unless they are solving other real problems, like accessibility, etc... I'm all for making these use a card-like UI, but we should hug closely to existing conventions and try not to be too inventive.
  1. People are able to use the WordPress.org repository currently, and we had previously pulled plugins in tagged with "buddypress" into a page on buddypress.org/plugins, but the duplication and fragmentation was weird and unappealing to most users. In addition, we used to use BuddyPress Groups and Group Forums to give them all a place to offer support. All of this is still re'doable, but it's hard to know if these are things we need again, or things we could do, or want, etc...

#2 @imath
3 weeks ago

Thanks a lot for your feedbacks @johnjamesjacoby 😍 I agree we need time to discuss about this suggestion.

BuddyPress provides immense value at a third the size of WordPress

I agree 💯

I think there are 2 ways: the BuddyPress or JetPack way (everything is inside) and the WooCommerce way (uses Plugins and includes a specific Plugins directory). Both ways have advantages and disadvantages of course.

(The funny thing about this suggestion is that it first came up to my mind because of a very limited configured server, I wasn't able to install BuddyPress because its size exceeded the Max Upload file size allowed 😆. I guess this must be very unusual in most cases).

I believe there is still immense value in everything being "packaged" together natively, rather than requiring additional research & discovery

Having features inside external plugins does not necessarily mean there are not there when you activate BuddyPress. For instance when you install WooCommerce you silently get additional plugins (JetPack, WooCommerce Services, the Gateway extension plugin, etc) corresponding to your payment options and the first settings you selected during the installation process.

So we can still have the default components there as plugins on first install, and make sure to fetch the needed plugins if the ones activated are no more included during an upgrade.

It also does not mean BuddyPress plugins would be maintained in external repositories. I believe we can & should carry on maintaining all existing and new components from this SVN repository.

The main difference from having everything packaged against available as plugins would be modularity. With the Plugins way, you can easily remove/replace a feature completely.

I simply believe moving to a Components as Plugins model is giving us and users more freedom.

More freedom for users because:

  • they can get what they need at any time without extra "dormant" features they don't need.
  • they can have more choices and trust these choices because they are powered & maintained by the BuddyPress community.

More freedom for us because we can try new things without being limited with backward compatibility. There's now a huge gap between WordPress 5.+ and WordPress 4.7 (the version we need to still support) and the gap is increasing fast. Having plugins evolving on their side could allow us to keep a version making sure to satisfy our back compatibility requirements (because I agree it's important) and introduce new versions to satisfy the users who would like to enjoy the latest and innovative features or "breaking" changes.

Having a separate & more BuddyPress focused place to install BuddyPress components can give some new interests to BuddyPress plugin developers: today as you said the WordPress.org Plugin Directory "tag" system is not reliable (mostly because of people abusing it probably), that's why I've used a specific hand made selection of plugins using a JSON file. We only need to make sure this file is hosted outside of the BuddyPress plugin to easily update it without updating BuddyPress. The assets sub directory of our WordPress.org repo seems a nice place to host it.

It's also a way to show we are very open (I know we already are) and welcoming new contributors seems very important because unfortunately we're not eternals and what matters most is the project & not the individuals contributing to it.

To fully implement this, we'd likely want to communicate what our intentions are, and make sure to be available to them.

Absolutely. If some new contributors were interested to have their plugin listed into the "BuddyPress sub directory" or if we were asking a plugin author to be listed into it, my suggestions about this would be that this would require these authors an "agreement" asking them:

  • to join the team,
  • to contribute to BuddyPress Core codebase and new BuddyPress Core or BuddyPress plugins versions beta tests,
  • to contribute to documentations & support forums.
  • to provide at least 3 years of Plugins maintenance and to find a successor when they have no more time to maintain the plugin.
  • Components as plugins listed should always be fully featured, free and without any ads.
  • TBD.

One another advantage of only having Core + Members: it would allow some plugins to use BuddyPress to provide their front end users profile. For instance, users are often asking me "Why do I get BuddyPress users profiles, WooCommerce users profiles (or account), ACF users profiles etc.. Why isn't it possible to have a unique profile ?"

People are able to use the WordPress.org repository currently... we used to use BuddyPress Groups and Group Forums to give them all a place to offer support

Yes well, I'd say having more than 54,000 plugins available in the WordPress.org repository is great but it's also a problem for the reasons you mentioned. Discovering trustable BuddyPress plugins is hard for users. There's a project to have a Blocks directory, I think it makes sense for us to have a BuddyPress Components Plugins subdirectory inside of the WordPress site BuddyPress is activated on. I don't think we need to provide something more on BuddyPress.org for example.

but I'm generally not a fan of introducing more things to interface with unless they are solving other real problems, like accessibility, etc... I'm all for making these use a card-like UI, but we should hug closely to existing conventions and try not to be too inventive

Like the the video demonstration shows: it can simply be a replacement of the "retired" tab. I know there is a screen in the video/patch showing a card style UI, but this screen it there to quickly benefit from the WordPress "shiny updates" feature and more precisely from their installing queue management. I agree we should simplify this screen and make it look like our Components management interface.

Of course I'm not sure the "Plugins way" is the best way, I feel it can improve our modularity. Whatever road we'll take I'm totally fine with it 👌.

I'm happy to continue the conversation about this suggestion 😉

Note: See TracTickets for help on using tickets.