There’s a new major release of ruby-vips, the Ruby binding for libvips: it’s now version 2.0. It has the same API (it passes the same test suite), but it’s simpler to install, works on Linux, macOS and Windows, it works with any Ruby (including JRuby), it’s smaller, more stable, and faster.

Why a new version?

Version 1.x was based on gobject-introspection, a gem from the gnome2 project.

gobject-introspection was designed for the desktop rather than the server. It pulled in a lot of other gems which were not really relevant, it had a lot of native code which had to be ported to each platform, and it was not really designed for the kinds of heavily threaded applications you find on servers, so it was difficult to make it stable under load.

Version 2.0 has completely new underpinnings. It uses ruby-ffi to open the libvips shared library, then uses libvips’s own introspection system to make the operations it finds appear as members of the Image class.

Since we’ve removed a huge amount of middleware, everything is smaller, faster, and simpler. Porting is especially easy: the same gem works without modification on every OS and with every Ruby version. Speed and stability are noticeably better too.

It’s already in production use on quite a few sites, and there should be no changes required to user code.