mime-types 3.0 for Ruby

It’s almost a week later than I had planned, but I released mime-types for Ruby versions 2.99 and 3.0 today. These are hard releases to describe succinctly—there are no new features added to either one, but both are important and I am excited about what will come next.

mime-types 3.0

The release of mime-types 3.0 is a bit more complex. In mime-types 2.6, Jeremy Evans (of Sequel and Roda) implemented a columnar data store for the registry. This reduced the mime-types memory footprint on average 25% percent and in some cases much more. There was much rejoicing by people using Rails or the Mail gem. It’s a good change—but I still marked it experimental. I felt that there could be further improvements, and I was in the process of trying to figure out what mime-types 3.0 would look like.

Over the last few months, the changes and features for version 3 have been considered and reconsidered, and it came down to the following changes:

  1. Remove all data, methods, and parameters deprecated in mime-types 2.x.
  2. Move forward on Ruby compatibility, requiring Ruby 2.0 syntax support or better to run (issue #97).
  3. Relicense mime-types as MIT (issue #95).
  4. Extract the data from mime-types to permit independent iteration on the releases (as mime-types-data).
  5. As the release date was approaching, I also decided that it was important to add a code of conduct to the projects under the mime-types organization.

All of these objectives were achieved, and a number of issues were resolved in the process. More code was changed than is visible1, but there are no new features added in this release.

mime-types 2.99

The release of mime-types 2.99 is easier to describe: this release is made to establish the end of life timeframe and to prepare users of the mime-types library for mime-types 3.0 while getting the benefit of modern data. It falls under the code of conduct adopted by the project, and all fields that were deprecated under mime-types 2.x have been modified to return empty or nil responses. It also marks the first of nine planned releases before mime-types 2.x reaches end of life (there may be additional releases if there is a security issue found in mime-types 2.x). Those additional releases will be:

  • 2.99.1 - February 2016
  • 2.99.2 - May 2016
  • 2.99.3 - August 2016
  • 2.99.4 - November 2016
  • 2.99.5 - February 2017
  • 2.99.6 - May 2017
  • 2.99.7 - August 2017
  • 2.99.8 - November 2017 (EOL release for 2.x)

After 2.99.8, there will be no further releases of mime-types 2.x for any reason, and security release support ends on 2017-11-21.

mime-types 2.99 is still licensed under the original triple disjunctive license (MIT, Perl, and GNU GPL).


  1. The tests were completely rewritten so that I understood what my tests were actually doing. Some of the tests were ten years old and weren’t entirely relevant to mime-types 2.x or 3.x.
More Reading
Newer// PGP/GPG Key