by Eric Hodel

RubyGems 2.0 includes several new features and many breaking changes. Some of these changes will cause existing software to break. These changes are a result of improvements to the internals of RubyGems that make it more maintainable and improve APIs for RubyGems users.

If you are using bundler be sure to install a 1.3.0.prerelease version or newer. Older versions of bundler will not work with RubyGems 2.0.

Changes since RubyGems 1.8.25 (including past pre-releases):

Breaking changes:

Deprecated Gem.unresolved_deps in favor of Gem::Specification.unresolved_deps

Merged Gem::Builder into Gem::Package. Use Gem::Package.build(spec) instead of Gem::Builder.new(spec).build

Merged Gem::Format into Gem::Package. Use Gem::Package.new instead of Gem::Format.from_file_by_path

Moved Gem::OldFormat to Gem::Package::Old. Gem::Package will automatically detect old gems for you, so there is no need to refer to it.

Removed Gem::DocManager, replaced by Gem::RDoc and done_installing hook

Removed Gem::Package::TarInput in favor of Gem::Package

Removed Gem::Package::TarOutput in favor of Gem::Package

Removed Gem::RemoteFetcher#open_uri_or_path. (steveklabnik)

Removed Gem::SSL in favor of using OpenSSL directly

Removed Gem.loaded_path

Removed RSS generation from the gem indexer

Removed benchmark option from .gemrc

Removed broken YAML gemspec support in gem build

Removed support for Ruby 1.9.1

Removed many deprecated methods

Major enhancements:

Improved support for default gems shipping with ruby 2.0.0+

A gem can have arbitrary metadata through Gem::Specification#metadata

gem search now defaults to –remote and is anchored like gem list. Fixes #166

now defaults to –remote and is anchored like gem list. Fixes #166 Added –document to replace –rdoc and –ri. Use –no-document to disable documentation, –document=rdoc to only generate rdoc.

Only ri-format documentation is generated by default.

gem server uses RDoc::Servlet from RDoc 4.0 to generate HTML documentation.

uses RDoc::Servlet from RDoc 4.0 to generate HTML documentation. Add ability to install gems directly from a compatible gemdep file (Gemfile, Isolate, gem.deps.rb) gem install --file path

Add ability to load gem activation information from a gemdeps file (Gemfile, Isolate, gem.deps.rb). Set RUBYGEMS_GEMDEPS=path to have it loaded. Use - as the path to autodetect (current and parent directories are searched).

Minor enhancements:

Added gem check --doctor to clean up after failed uninstallation. Bug #419 by Erik Hollensbe

to clean up after failed uninstallation. Bug #419 by Erik Hollensbe RubyGems no longer defaults to uninstalling gems if a dependency would be broken. Now you must manually say “yes”. Pull Request #406 by Shannon Skipper.

Gem::DependencyInstaller now passes build_args down to the installer. Pull Request #412 by Sam Rawlins.

Added a cmake builder. Pull request #265 by Allan Espinosa.

Removed rubyforge page from gem list output

Added –only-executables option to gem pristine . Fixes #326

. Fixes #326 Added -I flag for ‘gem query’ to exclude installed items

Added Gem.install(name, version=default) for interactive sessions

Added Gem::FilePermissionError#directory

Added Gem::rubygems_version which is like Gem::ruby_version

Added RUBYGEMS_HOST documentation to gem env

Added a post_installs hook that runs after Gem::DependencyInstaller finishes installing a set of gems

Added a usage method for Gem::Commands::OwnerCommand. (ffmike)

Added an optional type parameter to Gem::Specification#doc_dir.

Added announcements url and clarified how to file tickets

Added guidance for how to use rdoc and ri in setup command. (jjb)

Attempting to install multiple gems with –version is now an error. You can specify per-gem versions like rake:0.9.5

Clarified Gem::CommandManager example code to avoid multi load problems. (baroquebobcat)

Corrupt or bad cached specs are now re-downloaded. (cookrn)

Extension build arguments are saved from install and reused for pristine

If the OS allows it, documentation is built in a forked background process. (alexch)

Imported gem yank from the gemcutter gem. Fixes #177, #343

Packaged gems now contain and verify SHA1 checksums

Removed commas from gem update summary so you can paste it back to cleanup. (amatsuda)

RubyGems will now warn when building gems with prerelease dependencies. Fixes #255

The RUBYGEMS_HOST environment variable is used to determine appropriate API key for pushing or yanking gems

Uninstall is now performed in reverse topological order.

Users are told what to type when they try to uninstall a gem outside GEM_HOME

When building gems with non-world-readable files a warning is shown.

Bug fixes:

Gem.refresh now maintains the active gem list. Clearing the list would cause double-loads which would cause other bugs. Pull Request #427 by Jeremy Evans

RubyGems now refuses to read the gem push credentials file if it has insecure permissions. Pull Request #438 by Shannon Skipper

RubyGems now requires a local gem name to end in ‘.gem’. Issue #407 by Santiago Pastorino.

Do not allow old-format gems to be installed with a security policy that verifies data.

Gem installation will fail if RubyGems cannot load the specification from the gem. Bug #419 by Erik Hollensbe

RubyGems tests now run in FIPS mode. Issue #365 by Vít Ondruch

Only update the spec cache when we have permission. Ruby Bug #7509

gem install now ignores directories and non .gem files that match the gem to install. Bug #407 by Santiago Pastorino.

Added PID to setup bin_file while installing RubyGems to protect against errors. Fixes #328 by ConradIrwin

Added missing require in Gem::Uninstaller when format_executable is set. (sakuro)

Exact gem command name matches are now chosen even if a longer command overlaps the exact name

Fixed Gem.loaded_path? with a Pathname instance. (mattetti)

Fixed Gem::Dependency.new mismatch with rubygems.org checks

Fixed SecurityError in Gem::Specification.load when $SAFE=1. (ged)

Fixed SystemStackError with “gem list -r -a” on 1.9 (cldwalker)

Fixed gem owners command so that exceptions don’t stop the rest of the command from completing

command so that exceptions don’t stop the rest of the command from completing Fixed gem unpack uninstalled_gem default version picker.

default version picker. Fixed defunct rubyforge urls in gem command line help

Fixed documentation for the various hooks collections

Fixed documentation generation on setup when the gem directory does not exist. Fixes #253

Fixed documentation to reflect where defaults overrides are loaded from. (ferrous26)

Fixed editing of a Makefile with 8-bit characters. Fixes #181

Fixed gem loading issue caused by dependencies not resolving.

Fixed independent testing of test_gem_package_tar_output. Ruby Bug #4686 by Shota Fukumori

Fixed typo in uninstall message. (sandal)

Gem::Requirement#<=> returns nil on non-requirement arg.

Gem::Requirement.satisfied_by? raises ArgumentError if given a non-version argument

Gem::Version#initialize no longer modifies its parameter. (miaout17)

Group-writable permissions are now allowed for gem repositories. (ctcherry)

Memoized values in Gem::Specification are now reset the version or platform changes. Fixes #78

More specific errors are raised for bad requirements. (arsduo)

Removed reference to ‘sources’ gem in documentation

Removed unused block arguments to avoid creating Proc objects. (k-tsj)

RubyGems now asks before overwriting executable wrappers. Ruby Bug #1800

The bindir is now created with mkdir_p during install. (voxik)

URI scheme matching is no longer case-sensitive. Fixes #322

ext/builder now checks $MAKE as well as $make (okkez)

Changes since RubyGems 2.0.0.rc.2:

Bug fixes: