Page MenuHomePhabricator

Springboard - an extension for managing extensions and skins in a wiki
Closed, ResolvedPublic

Description

Springboard (https://www.mediawiki.org/wiki/Extension:Springboard)

The idea is to develop an extension for installing extensions and skins in MediaWiki from the web interface. We aim to add compatibility checks based on MediaWiki releases, and automating tasks like maintenance script (update.php) execution and enabling extensions or skins. This tool would significantly reduce the learning curve for new contributors and users. Additionally, the extension would identify the prerequisite extensions for a specific extension/skin thereby preventing common errors. We also have a plan for supporting extensions and skin upgrades, but we might pick it up post the hackathon due to the time consumption of other priority features. Originally conceived as part of the 2010 Google Summer of Code program (https://www.mediawiki.org/wiki/Google_Summer_of_Code/Past_projects#Extension_management_platform), the project faced technical challenges that hindered its completion. The major reason for the failure is due to the approach of making it "too smart" by stepping into web scraping and other experimental routes for installation. We plan to use a like YAML file for defining the versions and other meta data required. It's easy to update and contribute to, and also, doesn't get too complicated on the go. Reviving and completing this initiative would greatly help users to customize their MediaWiki setups effortlessly, fostering a more inclusive and user-friendly ecosystem.

Planned features

  • Install extensions / skins using UI
    • Procurement through Git
    • Enable / disable extensions and skins
    • Extension maintenance script (update.php) execution to create necessary tables

Future enhancements

  • Handle extension and skin upgrades
  • Manage extensions / skins installed through the general way

Strategy
An extension consuming a YAML based storage for storing and retrieving extensions' / skins' information like repository links, versions and branches (MW specific).

A consensus-based listing of the ideal revision to use for the extensions and skins based on the MediaWiki version, will be used for procuring the extensions/skins from their repositories.

YAML Example

extensions:
    - Cargo:
          branch: master
          commit: a2865938165c1389d852df762f8c85073859e5dd
    - WatchAnalytics:
          branch: master
          commit: 72b70a667a26bbde0a3cf93fc79747aae08fca32
          update: true # (if maintenance update script needs to be run)
    - ApprovedRevs:
          branch: master
          commit: 53b67bf7e1e8ac3d20c2fd41ad2ab1c708c045a6
          requires:
              - ABC
skins:
    - chameleon:
          commit: f34a56528ada14ac07e1b03beda41f775ef27606
          repository: https://github.com/ProfessionalWiki/chameleon
    - Refreshed:
          commit: 86f33620f25335eb62289aa18d342ff3b980d8b8

Screenshots

Extensions tab -

Screenshot 2025-05-04 at 10.59.49 AM.png (1×2 px, 392 KB)

Skins tab -
Screenshot 2025-05-04 at 11.00.44 AM.png (1×2 px, 297 KB)

Event Timeline

It sounds like lots of the previous discussion around this idea has been to do with how to decide which version of an extension to install. But are there details about how the actual installation process will work? That feels like the harder thing, security-wise. There are plenty of other PHP applications that do it (WordPress, Dokuwiki, Matomo…), I'd imagine some ideas could be gained from them.

That sounds fine for third parties, at Wikimedia I think traditional update methods should continue to be used due to the great SysAdmin team that exists, but for novice people or those with little knowledge of complex technical topics it is better to have a Package Manager style on the frontend like Wordpress as @Samwilson mentions and the person receives notifications of stable or unstable updates as is done in other CMS.

I don't think this proposed extension is intended to be used for Wikimedia sites, or probably in any wiki farm situation. It does seem like small simple wikis would benefit from a web-based upgrader.

I would love something like this for Wikibase Suite.

Techwizzie renamed this task from An extension for installing extensions and skins to Springboard - an extension for managing extensions and skins in a wiki.May 4 2025, 8:01 AM
Techwizzie changed the task status from Open to In Progress.
Techwizzie updated the task description. (Show Details)

This appears in the MediaWiki master code

[09397088972a30085328fe3b] /wiki/Special:Springboard Error: Class "Html" not found

Backtrace:

from /mediawiki/w/extensions/Springboard/includes/SpecialSpringboard.php(58)
#0 /mediawiki/w/includes/specialpage/SpecialPage.php(734): MediaWiki\Extension\Springboard\SpecialSpringboard->execute()
#1 /mediawiki/w/includes/specialpage/SpecialPageFactory.php(1738): MediaWiki\SpecialPage\SpecialPage->run()
#2 /mediawiki/w/includes/actions/ActionEntryPoint.php(499): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#3 /mediawiki/w/includes/actions/ActionEntryPoint.php(143): MediaWiki\Actions\ActionEntryPoint->performRequest()
#4 /mediawiki/w/includes/MediaWikiEntryPoint.php(202): MediaWiki\Actions\ActionEntryPoint->execute()
#5 /mediawiki/w/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#6 {main}

Used installed version:
MW core (a8c56cc9ff109698f15a7af3ebaac35f1f586356)
PHP 8.4.6
MariaDB 10.11.11

This appears in the MediaWiki master code

[09397088972a30085328fe3b] /wiki/Special:Springboard Error: Class "Html" not found

Backtrace:

from /mediawiki/w/extensions/Springboard/includes/SpecialSpringboard.php(58)
#0 /mediawiki/w/includes/specialpage/SpecialPage.php(734): MediaWiki\Extension\Springboard\SpecialSpringboard->execute()
#1 /mediawiki/w/includes/specialpage/SpecialPageFactory.php(1738): MediaWiki\SpecialPage\SpecialPage->run()
#2 /mediawiki/w/includes/actions/ActionEntryPoint.php(499): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#3 /mediawiki/w/includes/actions/ActionEntryPoint.php(143): MediaWiki\Actions\ActionEntryPoint->performRequest()
#4 /mediawiki/w/includes/MediaWikiEntryPoint.php(202): MediaWiki\Actions\ActionEntryPoint->execute()
#5 /mediawiki/w/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#6 {main}

Used installed version:
MW core (a8c56cc9ff109698f15a7af3ebaac35f1f586356)
PHP 8.4.6
MariaDB 10.11.11

Thank you for pointing it out! It seems we needed a full namespace import for recent versions of MW. We have updated the code and feel free to try out already

I have made a PR on Github correcting said error and it currently works now

We can model an automatic distribution using the Wikimedia Gerrit API to update frequently

@Danielyepezgarces - do you mean, in order to update the revision of each extension/skin automatically? If so, I disagree: part of the promise of this extension is predictability, which is tied in with security - so the revisions used should change (a) infrequently and (b) with some amount of oversight.

@Danielyepezgarces - do you mean, in order to update the revision of each extension/skin automatically? If so, I disagree: part of the promise of this extension is predictability, which is tied in with security - so the revisions used should change (a) infrequently and (b) with some amount of oversight.

Well, I'm not saying that it updates automatically every time a commit comes out, but rather that there is an update period, for example, once or twice a month, or if the user prefers to exist when only the branch is changed, for example, between 1_43 and 1_44.

Well, regardless of the update frequency, I still think human review is required for any update - and that's doubly true for a new MediaWiki version, since some extensions take time to support a new version (if they ever do).

Well, for the extensions included in MediaWiki or any made by the WMF staff, this manual review is not required. I'll give you the ones made by third parties.

Leaving the topic aside, I think we need to expand on the topic of localization, regarding buttons and other texts.

I certainly agree with that! There's still a lot of room for improvement.

@Techwizzie: Thanks for participating in the Hackathon! We hope you had a great time.

  • If this task was being worked on and resolved at the Hackathon: Please change the task status to resolved via the Add Action...Change Status dropdown, and make sure that this task has a link to the public codebase.
  • If this task is still valid and should stay open: Please add another active project tag to this task, so others can find this task (as likely nobody in the future will look back at the Hackathon workboard when trying to find something they are interested in).
  • In case there is nothing else to do for this task, or nobody plans to work on this task anymore: Please set the task status to declined.

Thank you,
Phabricator housekeeping service