RubyGems Gets Plugins

| by Mirko Stocker Follow 0 Followers on Apr 22, 2009. Estimated reading time: 2 minutes |

A note to our readers: You asked so we have developed a set of features that allow you to reduce the noise: you can get email and web notifications for topics you are interested in. Learn more about our new features.

The recently released RubyGems version 1.3.2 is more than just a minor bugfix release, it also contains new features:

As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named 'rubygems_plugin' are discovered via Gem::find_files then loaded.

An example comes from Ryan Davis: the Graph plugin generates a graph of the dependencies and information (outdated, incoming dependencies) of your installed Gems.

We talked to RubyGems maintainer Eric Hodel to learn more about the general idea of RubyGems plugins:

The feature request tracker for RubyGems has lots of stuff people want to add, and some of it can be done as a stand-alone package. There's also things you may want to do at install time that otherwise would require manual intervention from the user.

The plugins started with a patch from Neil Wilson to add install hooks to RubyGems for Debian that would make it easier to integrate the two. With his patch we added two special files that RubyGems would try to require at startup, rubygems/defaults/operating_system.rb for ruby packagers and rubygems/defaults/#{RUBY_ENGINE}.rb for ruby implementors to add special functionality. For example, Rubinius could pre-compile all the .rb files in the gem to reduce startup time.

Around the same time I added Gem.find_files that would allow gem authors to easily construct their own plugin system. RDoc uses this to automatically load its plugins.

Since it turned out rather well for RDoc I decided that RubyGems should have the same feature.

I didn't try to make the plugins have a comprehensive way to hook into every possible corner of RubyGems. I'm sure that people will want to hook into areas that aren't currently easy to access, and I hope they submit feature requests against RubyGems to help me find them. It's much easier for me to improve the API a little for a plugin than it is to maintain an entire new feature.

My hope is that creative people will provide amazing and useful things that I don't have to ship or maintain inside RubyGems.

Besides the Graph plugin, there's also rubypan to search and they are working on "a plugin that will create an OS X dictionary from ri data that would be updated whenever you install or uninstall a gem".

Plugin writers can hook into RubyGems pre and post install and uninstall actions, see the Gem Documentation. Writing a plugin for your own command is also straightforward: subclass Command and register it with the Gem::CommandManager.

Do you miss a feature in RubyGems that could now be provided by a plugin?

Rate this Article

Adoption Stage

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

list by Roger Pack

Here's a list of plugins I know of:


Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

1 Discuss

Login to InfoQ to interact with what matters most to you.

Recover your password...


Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.


More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.


Stay up-to-date

Set up your notifications and don't miss out on content that matters to you