As a relatively new member of the contributor team of the JabRef bibliography manager, I am proud to announce the release of JabRef 3.0. The release really is a major step for this well-known open source tool, with almost 1500 commits since the previous version 2.11. I’d like to highlight a few aspects about it in this blog post. I’d also like to thank all people who have contributed their time and skill to the project. Particular thanks go to Oliver Kopp, Simon Harrer, Stefan Kolb, Matthias Geiger, Oscar Gustafsson, Tobias Dietz, and Frédérick Darboux.
Code Quality Improvements
To begin with, most of the work done won’t actually be seen by the users, since it went into under-the-hood quality improvements of the code that do not change functionality. When it comes to software age, JabRef has quite a long life already, with around 12 years of existence. During that time it has expanded significantly and many many features have been added. Also I am constantly surprised by features in JabRef that I did not know of. However, this growth has a downside. New features mean more code and more complex code to integrate them into a single tool. For JabRef, there has hardly been a structured process for adding new features and many were implemented as one-off hacks. This makes adding new features and fixing bugs harder. By now, JabRef has reached a point where modifying some parts of the codebase is simply no longer feasible. This development can only be fought by bringing back structure to the code and improving its quality. In hype-speak that is called paying technical debt. This is our main task at the moment. But although we have not reached a “good” state yet, we have come a long way and are already seeing an acceleration in adding new features and fixing bugs.
Code quality improvements also mean that old and deprecated things have to go. Otherwise, it is not possible to move the tool forward. A few more significant things that go are:
- Support for Java 6 is dropped. From version 3.0 on, JabRef requires a Java 8 runtime environment. This primarily means users with old MACs will not be able to update.
- Plugin support is dropped. This means that several functions, such as for instance CSV-import do no longer work. We might add such support again, but in a different form. However, if you really require support for dropped plugins, it would be very very preferable if you fork JabRef, re-implement the plugin in our current framework, and submit a pull request.
- Support for the type @Other is dropped. This was really never a BibTeX type to begin with. Instead, it was a custom type introduced by prior versions of JabRef. We try to implement BibTeX more faithfully and, as a result, this type has to go. If you have entries of type @Other, you can simply replace them with @Misc, which is a proper BibTeX type.
Visual Improvements and Restructuring
A new major version has to come with visual improvements and, of course, it does! We have implemented a new icon set for JabRef and replaced all icons used. The icons are now styled in “JabRef-purple”, but the color theme might become configurable in future versions. Here’s a screenshot of the UI with the new icons:
Further changes to the UI that are only partly visible in the screenshot is a restructuring a menu items. Items that refered to deprecated functions were deleted and some were moved to places where they make more sense. You may notice that there’s a “Groups” menu now, which we added to provide more direct access to the grouping functionality.
New File Downloaders
A major improvement in JabRef 3.0 is the addition of new downloaders for BibTeX entries. JabRef now can try to find a free version of the paper described in an entry, download the file, store it locally, and link it to the entry. And all this is available via a button-click! The screenshot to the left gives an example of this functionality.
You can access the functionality by selecting an entry in the entry table and navigating to the General tab. There, you’ll find a new Auto-button. If you hit this button JabRef will try to find the paper for the reference online by searching in several databases, such as Google Scholar or Springer (Note: Having a DOI for the paper can really help). JabRef doesn’t block while searching, so you can continue with your work, and JabRef comes back at you when it is finished. Normally that takes no more than a few seconds, but may depend on your Internet connection and the responsiveness of the databases. If JabRef finds a paper version, it asks where it should store paper (as seen in the screenshot) and that’s it.
So, if you’ve been downloading papers from Google Scholar and linked them in JabRef anyway, you can now save a lot of manual effort!
The search interface has been improved and has more of the look and feel of a Web search engine now. We also fixed a lot of bugs and search speed has been improved considerably. JabRef offers auto-completion of your search terms and different modes of search. It is now possible to search with the help of a regular expression. You can do a case-sensitive search and also select Filter to limit the database to entries that match. Finally, you can also search in all databases that are currently opened in JabRef.
There is more in JabRef 3.0. We also have a nice new integration in Windows 10 and new filenames for tabs, but if I go on about improvements no one is going to read this post to the end. Instead, there are a few additional important points I want to mention.
Of course, we won’t stop here. There are a few nice features in the making and code quality improvements continue. One major aspect for future work is a more relaxed formatting when writing the .bib file. Currently, JabRef does a lot of re-formatting of BibTeX entries and sorting of fields that differs between versions. This behavior has caused problems for users who work collaboratively with JabRef and store .bib files in version control. Our aim is to improve the version-controllability of .bib files with JabRef. Therefore, we want to restrict auto-formatting and write the file back as closely to the original as possible.
Every open source project lives from an active community. We need more people who help us to improve JabRef and to add new features. If you want to get a better JabRef, be prepared to contribute. If you are interested in contributing, please fork the project on github, add your commits, and submit a pull request (and don’t forget the to read the guidelines for contributing). We will review the pull request and add it to JabRef. I need to mention, however, that we no longer include features for their own sake, but only add code that has a sufficient level of quality. Hence, you might be asked to improve things before we merge your pull request. But don’t feel discouraged, we are all interested in a better JabRef :)
As a final note, I want to advertise the users and developers conference for JabRef: JabCon. This conference will take place at the technical university of Vienna on January 25 / 26, 2016. Participation is free of charge and everybody interested in JabRef is invited to join. We will have several workshops, do a lot of joint hacking, and define the future of JabRef.
That’s it, have fun with JabRef 3.0!