Plugins Site Update: The Old Is New Again

Posted on by

We’ve gotten a lot of feedback since last week’s announcement about the plugins site’s unfortunate tumble into oblivion, and I’d like to address a few of the most important concerns that have surfaced since.

“Could you make the old backup available for posterity?”

Yes. We can — and have. Over the weekend, we restored the most recent backup we had, and the original site is now living at archive.plugins.jquery.com; you should be able to browse through everything that’s there to your heart’s content. We also applied the most recent user information we had, so if you had an account on the old site at any point in the last year, it should still work. However, the site is closed to new user registrations. If you really need a new account, please get in touch with me personally and I can get that straightened out for you. We’ve also set up a redirect, so that if you should encounter any links to plugins.jquery.com in your browsing, you’ll (hopefully) end up at the corresponding page in the archive.

Just get a backup from the Wayback Machine!

While the Internet Archive has cached versions of content that was updated more recently than last October, we just don’t have the people-power to re-create the lost posts manually in the new archive site. If you have an account, you can feel free to add “new” or old plugins, or update existing ones, should you desire to. However, this archive will not be indexed by search engines.

If you hate CMS-es so much, what’s with WordPress?

We’re in the middle of a network-wide redesign, and WordPress offers us a valuable set of tools when it comes to theming, searching, and serving a group of sites. Our new motto, however, is pull requests, not passwords; we’re implementing theming, documentation, plugins, and more in such a way that contribution will not actually require an account on our CMS at all. As I outlined in the initial post, the plugin submission process will only involve adding a post-receive hook to your repository. In the event of a similar catastrophe, we’re made sure we’ll be able to replay the entire plugin contribution history and get the site back up to speed right away. Our goal is to leverage the WordPress features we find useful without it serving as a barrier to entry or as the canonical warehouse of content. If you are of the mind that WordPress is always a bad idea, no matter what, no matter how, you’re certainly entitled to that opinion, but at this point, it’s not particularly beneficial to the conversation.

Git(Hub) is hard

The new plugins site will serve as an index of plugins, with a simple “download” button right on each plugin’s page. You will not have to just browse around GitHub looking for jQuery plugins. If you don’t know git and only ever want to download jQuery plugins, you don’t have to learn it. However, if you want to submit plugins, you’ll have to be using some sort of source control that you can at least mirror in git. This is by design: it can be really easy to build a jQuery plugin, but that doesn’t mean it’s necessarily fit for public consumption. Requiring the use of source control and package.json are passive mechanisms that will help ensure that plugins which proliferate are authored by developers who have met a reasonable baseline (and aren’t selling batteries). We’re only targeting GitHub support for launch, but we’d like to add support for other services as well. We are actively avoiding the use of GitHub-specific features that would force us to limit the site to GithHub users permanently.

It’s A Conspiracy!

Some have called into question the veracity of my account, and that’s understandable, given the timing and circumstances. But believe me, the last thing I wanted to do after spending a day manually pruning spam from the directory was turn around and cause a gigantic headache for thousands of people, including myself and my colleagues. I hope the re-launching of the last backup at least partially allays these concerns. Additionally, we’re starting off with GitHub simply because it has a very broad user base already, and it has been incredibly positive for us since we shifted to it for development of jQuery Core, UI, and Mobile.

Thanks again for bearing with us during this transition.

What Is Happening To The jQuery Plugins Site?

Posted on by

For about a week, instead of hosting several hundred jQuery plugins and several thousand advertisements for laptop batteries, our plugins repository has been serving up a pretty pathetic message about spam and an allusion to some “new submission process.” This happened very suddenly, and we’re sorry to everyone who’s been inconvenienced. Please allow me a few minutes to explain what happened, where we’re headed, and how it impacts you. If you’re in a rush, here’s the short version.

The Backstory

A White Elephant Though the plugins site you’ve known and loved was a valuable tool when it was first set up, it gradually became something of a white elephant for the project. While powerful distribution tools like GitHub and npm have come to the fore, we’ve been stuck in an aging, CMS-oriented paradigm that frustrated developers and consumers of plugins alike. Many people moved onto alternative sources for finding and vetting plugins. Furthermore, the sites’s original implementors and maintainers had since moved on from active involvement within the jQuery project. While the team faced a steady stream of complaints about usability and a general lack of features, the site itself faced a veritable barrage of (several flavors of) spam. There was your standard, keyword-rich SEO garbage, but there was also something slightly more insidious: the batch posting of under-documented, demo-free plugins with links to paid download sites by third parties trawling for affiliate cash. While this wasn’t explcitly disallowed, it led to a terrible, confusing experience for users and gave the site the distinct sense that all was not on the up and up.

The Best Laid Plans…

Sensitive to all these problems, the team began drawing up requirements for a complete overhaul. We knew we wanted to get out of the business of accepting uploads, serving downloads, and generally legislating the plugin “release” process on our own servers. With our official projects already on GitHub, we knew we wanted to leverage the many wheels they’d already invented for distribution, versioning, and facilitating open, collaborative development. Another requirement was to create a standard schema for authors to clearly delineate dependencies, like which version(s) of jQuery a plugin supports, as well as other plugins and CSS assets it requires to be functional. We also wanted to introduce some quality control, with both passive mechanisms like requiring GitHub and a manifest file for distribution, as well as active ones like user ratings. Finally, we wanted a clean slate; with stricter requirements for submission, there could be no mass import of all the old plugins. We made a lot of progress preparing specifications, but hampered by a lack of resources and a number of other projects, we never were able to get too deep into the implementation phase. After all, the old site “worked!”

…Often Go Awry

Throwing the baby out with the bathwater

As the glut of spam grew worse and multiple reports started showing up on the jQuery Core bug tracker, I wanted to at least take some steps to wipe a bit of the spam and egg off our face. With newly provisioned access to the administrative tools on the site, I teamed up with the Drupal Views Bulk Operations module and set out to identify and delete spammers and their posts. Within a day or two, nearly 90% of the alleged “content” was gone from the site. I continued to monitor the situation over the ensuing days, and deleted spam as it came in. Unfortunately, I likely cast too wide of a net, and threw out several perfectly good babies with the bathwater. Even more unfortunately, I didn’t back up the database before I began this process. At this point, you can probably see where this story is headed. Later in the week, while I was attempting to delete four spam items, I was left completely horrified when the results of the operation reported that the remaining 10% — every single plugin remaining in the database — had been purged. All that remained was a year-old backup. Of course, I realize that this is a dreadful outcome, and I take full responsibility for it. If it helps, I am very receptive to hate mail and tweets reprimanding me for being irresponsible, unprofessional, or just stupid.

At this juncture, we were left with two choices.

  • Keep on kicking the can down the road: Restore from the old backup, losing a lot of data anyway, and have authors go through the painstaking process of re-uploading their plugins, even though the site was slated to be deprecated entirely anyway.
  • Use this glaring mistake as the impetus to hunker down, cleave from the past, and finally implement the site we’ve talked about for so long.

We’ve chosen the latter.

Nuts And Bolts

Over the past few days, we’ve started converting our plans into action, building out an infrastructure that’s backed by GitHub. There are two requirements for listing a plugin on the new site:
Success Kid is helping out as well

  • A valid package.json file
    We’ve followed the lead of CommonJS and npm and created a schema for specifying dependencies, delivery, and other metadata of jQuery plugins. While the format is largely similar to those other projects, we’ve had to make some minor tweaks to account for some plugin-specific details.
  • At least one versioned release
    This means having tagged your release point(s) with a valid semantic version number (semver) string.

We’ve pared down the submission and maintenance process to a single, one-time step: adding a post-receive hook to your plugin’s GitHub repository. Assuming your plugin meets the guidelines, a page will be created on the plugins site to present your usage and download information. We’ll keep track of new releases as you push them.

In The Interim

We recognize that the old site was still serving as an regular resource for a lot of people, especially newer jQuery users, who simply valued the existence of a central browsing location, despite its flaws. Though many experienced users had moved on to other sites, or relied on relationships with trusted authors and word of mouth, these can take time to develop. Until we’re able to launch the new system, we’re happy to direct you to several other directories and people who can help pick up the slack:

If, in the process of searching these or any other directories, you are directed back to the current site at plugins.jquery.com, typically a quick search for the author’s name and the plugin name will yield an alternative site where it was hosted. In addition, DailyJS just did a useful roundup of alternatives that goes into more detail.

Next Steps For Plugin Authors

If you’re a plugin developer who wants to make sure your plugins will be ready to go on day one (or even beforehand), you’ll want to make sure your plugins are up on GitHub, and then you’ll want to get started on creating your package.json files and making sure your versions are appropriately tagged. If you aren’t already familiar with Git and GitHub, then this is probably a very good time for you to take the plunge and get started. If you prefer another SCM system, you can look into setting up a mirror to git from svn or hg, or other project hosting sites, like bitbucket or gitorious. If you don’t develop your plugins as open source, or you don’t use any source control at all, we will not be able to accomodate you at this time.

How Can I Help?

Though the site is still a work in progress, you can track progress and even set up your own local development right now at github.com/jquery/plugins.jquery.com/. We’re still working on getting a public staging environment together.

Though the site is essentially “powered by” GitHub, there are obviously a number of moving parts in play. The site will actually be served from inside of WordPress, which is populated with the contents of the indexed plugins using a node.js tool. There are still many kinks to be ironed out, so if that sounds like a stack you want to jump on, please join us over at the repo. We’ll be using GitHub Issues for all feature requests, bugs, and discussion.

While we’ve put a great deal of thought into putting together our package.json schema, it’s still a living document, and if you have questions or comments on why it is the way that it is, head on over to this issue.

Errata

In an ideal world, this certainly wouldn’t have happened exactly as it did. Sadly, it did. We hope you’ll accept our apologies for the many ways this transition might make your job harder, give you some extra work you weren’t expecting, or just plain leave a bad taste in your mouth. If you are able to forgive us, bear with us, and maybe even lend a hand, we’re confident we’ll be able to deliver the modern, useful plugins site the community deserves.

TL;DR

So that was a lot of words, here’s the takeaway.

  • We’d been planning on replacing the original, spam-ridden plugin site for quite some time
  • In the process of deleting on the spam, all the plugins were deleted and we didn’t have a recent backup
  • Instead of burning cycles keeping the old site on life support, we decided to make a clean break and kick development on the new site into high gear.
  • The new site is powered by GitHub and a package manifest for plugins
  • Plugins from the old site were never going to be automatically imported into the new one.
  • The repo is at github.com/jquery/plugins.jquery.com
  • We are very sorry, but also very excited!

Getting Board of jQuery

Posted on by

TL;DR The body responsible for overseeing jQuery’s finances and administration, which was until today known as the jQuery Team, is now called the jQuery Board. The jQuery Team is for anyone who invests a significant amount of time contributing to jQuery and its related projects.

As jQuery has grown from a cool idea in 2005 to the most widely used piece of JavaScript on the Internet today, so too has the organizational structure required to support its development and its community. Over time, e-mail chains became mailing lists, and out of those lists evolved a casual confederation known as the jQuery Team. To join this team, all you had to do was make a consistent contribution to some aspect of the project and eventually John would add your name to a page in our docs wiki.

By 2009, the team wanted to solidify the long-term future of the project, so we accepted an invitation to join the Software Freedom Conservancy, from whom we’ve since received great amounts of administrative and legal support. Though the SFC offers that “Projects can continue to operate in the same way they did before joining the Conservancy without having to select a board of directors or any other layer of corporate management,” the team chose to implement a governance system whereby the project’s official decisions would be communicated to the Conservancy after a public vote by the members of the “core team,” which initially had 21 members. This conferred a significant amount of formality onto what had been a relatively ad hoc process, and while the system has worked well, it has been accompanied by some confusion.

  • On one hand, there’s the voting membership, responsible primarily for financial and managerial decisions concerning the entire project. On the other, there’s an actual group of people who are working on jQuery Core itself. Both of these groups are sometimes called the jQuery Core Team, which is fairly misleading.
  • As new people come along and become active contributors to some part of the project, it’s not fun to tell them, “Hey, great job, but you’re *not* on the team!”
  • Just because you are really interested in hacking on jQuery Core, UI, or Mobile (or working on docs, or any of the many other ways you can help out the project) doesn’t mean you have the slightest desire to sit in long meetings, discussing how to allocate funds and how to improve beverage service at the next conference.
  • As people’s lives ebb and flow, it’s normal that their capacity to contribute changes. What’s the right correlation between being a genuinely active contributor in the present tense and having a vote in the project’s big-picture management?

In order to attempt to resolve some of this confusion and make clearer the group’s purpose, the jQuery Team is now known as the jQuery Board, and all the governance rules that applied to the Team now apply to the Board. The Board is responsible for

  • approving and appropriating expenditures
  • representing the intentions of the jQuery Project to the SFC
  • overseeing and directing the Subteams and selecting the Subteam Leads responsible for each of the facets of the project
  • voting on its own composition

If you’ve always wanted to be “on the team,” but were unsure of what it meant or what you would do, this is good news! We’re fully embracing the Wikipedia definition of team: a group of people (or animals!) linked in a common purpose. As such, anyone who volunteers, over a sustained period of time, to serve actively on a jQuery Subteam will be invited to join the jQuery Team (at the discretion of the Subteam Lead), so you can feel good putting that on your slide decks, refrigerators, and so forth.

What isn’t changing is the fact that if you are passionate about web development and trying to find a way to make a difference to developers around the world, there is a place for you in the jQuery community. Hop onto the forum and give another developer a hand. Head over to our various bug trackers and help triage the open issues — or dive in and see if you can provide a patch. If you just want to get a lay of the land, join the weekly IRC meetings. Want to work on a particular project? Take a look through the updated team page and get in touch with the right subteam lead! One thing’s for sure:

jQuery wants you!

Official Plugins: A Change in The Roadmap

Posted on by

Barely six months ago, we announced that we were adopting three plugins developed chiefly at Microsoft – Templating, Data Link, and Globalization – as official plugins, to be developed in accordance with the standards of and supported by the jQuery project. Today, we’d like to take an opportunity to share what we’ve learned in the interim and announce a change in course for these and the rest of jQuery’s “Official Plugins.”

There never has been a dedicated jQuery team for supporting Official Plugins. Prior to the adoption of Microsoft’s contributions, the plugins that the jQuery project supported – Color, Easing, bgiframe, Mousewheel, Metadata, and Cookie – were dead-simple, effective plugins for achieving a particular utilitarian end. They required little maintenance, stalwartly serving with little fuss from version to version of jQuery core. In recent months, as we noticed an uptick in questions related to the three new plugins, we realized there was a disconnect. Though development on beta versions of the plugins continued at Microsoft, the planned jQuery sub-team that was meant to collaborate with and adopt Microsoft’s work never formed.

As demand has grown, based on the existence of the beta versions of the plugins as well as promises made in the posts, we’ve sensed the rumbles, the confusion, and the confused exclamations: “I thought templating was going to be in 1.5!” Because of your concerns and ours, we’ve decided to eliminate the notion of Official Plugins altogether. It’s a difference that’s both semantic and symbolic, but this is its material impact:

Many of the original supported jQuery plugins (Color, Easing, and Mousewheel) will continue to be supported and maintained by the jQuery Core Dev Team. The Metadata plugin will be deprecated, in favor of similar functionality provided by jQuery 1.4.3 and above. The Cookie plugin will continue to be maintained by Klaus Hartl.

The jQuery UI project will take ownership over plugins on which it has a current or future dependency: Templating, Globalization, and bgiframe. The jQuery UI team plans to begin work anew on templating and globalization, starting with the normal process for UI plugins: Collaborative development on a spec. While some may perceive this as a setback, given existing progress on the current jquery-tmpl plugin, it is really an opportunity for us to work in tandem with the community — Microsoft included — to develop an implementation that will be effective and flexible. The “official plugins” Microsoft has been developing have always been in a beta state, subject to change and with significant revisions planned for the Beta 2 release, but we recognize (and appreciate) those of you who have jumped in and started to experiment and use them in your applications. The UI team is still in the early planning stages for the Templating and Globalization plugins, and we invite you to visit the planning wiki and share your thoughts about development.

Microsoft will continue to develop and support the Data Link plugin independently, and will take ownership of hosting the documentation for the existing plugins.  In the short term, however, we’ll keep the documentation for these plugins on api.jquery.com, in order preserve a reference for anyone who needs it. For more on Microsoft’s plans for Data Link, please read their Official Plugins Update. We value Microsoft’s ongoing contribution to jQuery, providing developer time and financial support for a number of efforts, including the jQuery UI Grid and the jQuery conferences.

We realize that some of these details may seem in flux or merely organizational, but we know that it’s important to tell the community of changes like these as they’re happening so that you can make the best decisions for your applications as soon as possible. We hope you understand why we’ve had to make these shifts and encourage you to get involved and help us push these important projects along!

Addendum: So Why Weren’t Templates in 1.5?

Though we initially announced that the jquery-tmpl plugin would be part of jQuery Core in version 1.5, the plugin was, as it is today, still in the Beta 1 stage. Thus, when the time came last December to really evaluate new features for 1.5, it was not really considered ready for inclusion. Given what we’ve explained above, we hope it’s clear that we don’t plan to include templating directly in Core in the near future. The jQuery UI Templating plugin will be a standalone plugin with no dependencies on any other part of jQuery UI, and will become the only templating solution “officially” supported by the project, though jQuery will, of course, continue to work with any JavaScript templating engine that spits out good, old-fashioned strings of HTML.