Prawn 0.13.0 has been released, and 1.0 is (finally) on the horizon.

Today I have released a new version of the Prawn PDF toolkit – the first in a very long time. In fact, it is our first official release in over two years!

If you aren’t yet familiar with Prawn, it is a fairly comprehensive PDF generation toolkit, written in pure Ruby. You can get a sense for what it is capable of by browsing through its self-generating manual.

Should you upgrade to Prawn 0.13.0?

If you are already a Prawn user, then you will want to know what has changed in this release, and whether or not this release will break your existing code. Here is the very, very short version of that story:

If you have been using Prawn 0.12.0 or earlier , then this release is going to be a major change for you. It has many new features, some of which have been documented in the manual. But it probably also has some new bugs, and definitely has several API changes. We’d recommend that you lock your existing projects to whatever release you’ve been using, and only try out this new version of Prawn on your next PDF generation project.

If you’ve been using the 1.0 RC1 or 1.0 RC2 prerelease gems that were released a while back, this version of Prawn includes all of those features and bug fixes, along with some new ones. We decided we’re not actually close to a 1.0 release yet, so we’ve gone back to 0.x numbering, but this release is essentially what would have been 1.0 RC3. We know this change in version numbering is confusing, and we’re sorry for it, but we thought doing further RC releases would be even more confusing.

If you have been running from master, this release is a direct snapshot of our latest code from 2013-12-15. You should have no trouble using 0.13.0.

No matter what version of Prawn you’re upgrading from, you can find a full list of improvements and bug fixes in the project’s CHANGELOG. Fair warning though: the notes are not very detailed, and there is a ton of information there! This is why we’re recommending waiting until you have a new PDF project to work on to try out the latest code rather than attempting to upgrade.

Some notes about Prawn’s past, present, and future.

With all these caveats out of the way, I would like to directly address the proverbial “elephant in the room”, which is that by now Prawn has long passed the point where it ought to be considered legacy code. When I stopped actively working on the project a couple years ago, our core team made a strong effort towards getting the project to 1.0, but that never quite happened, and so we lost our regular release cycle. The project continued to improve gradually, but the community was largely left in the dark about its progress, and for that I take full responsibility.

Starting with this release, I’m going to take another crack at guiding this project to 1.0. When we get there, Prawn won’t necessarily be bug free or feature complete, but it will certainly be in a better state than it is now. I’m also going to put a lot of effort into making the project more sustainable over the long haul, so that it can benefit from community contributions and also serve well the tens of thousands of users that it already has. There may be some turbulence along the way, but we already have a rough roadmap in place, and we’ll do our best to get things back to a stable state as soon as we can.

How to help, and how to get help.

Because most of my own time will be spent on stuff like release management, reviewing pull requests, thinking through API design issues, and other maintenance-related stuff, I can really use help from anyone and everyone for pretty much everything else. Please use Github, the Prawn mailing list, and the #prawn IRC channel on Freenode to help out in whatever way you can. I can also help you find stuff to work on if you’re interested in contributing but don’t know where to start, whether you’re a beginner or expert.

My goal is to make Prawn as friendly as possible to both its contributors and users, so please get involved! No question, idea, or contribution is too small.

I promise that future releases will be better documented, smaller, and that our future announcements will be a whole lot more specific and detailed than these ones were. But with two years in a zombie state, we had to start somewhere!

Acknowledgements

Huge thanks goes to all the following folks, each of which contributed code since our last official release.

Tim Vandecasteele, Mike Cochran, Wei-Meng Lee, Thomas Leitner, Josef Stribny, Mike MacDonald, Alexander Mankuta, Christoph Schiessl, Evan Sharp, James Healy, Trung Lê, Felipe Doria, Alex Dowad, Brad Ediger, Tommy Back, Wes Garrison, Giuseppe Bertini, Nathan Colgate, Michaël Witrant, Daniel Nelson, Alexander Gitter, Richard Fairhurst, Matt Patterson, Hartwig Brandl, Bas, Jordan Byron, Kenneth Kalmer, aayushkhandelwal11, Stephen Pike, Luis Correa d’Almeida, Johan Andersson, and Sean Russell

Additionally, I would like to thank Madriska Inc. (Brad Ediger’s consulting company) for providing me with some funding so that I can free up the necessary time to work on Prawn over the next several months.

Thanks for reading these notes, and Happy Prawning! -greg