Post

Use PostgreSQL as full GUI data backend for JabRef

Currently, JabRef GUI holds all entries in memory. It even converts LaTeX to Unicode and vice versa to support better search. While this is a great UX, this leads to a huge memory consumption. The more “proper” way is to use a database (such as PostgreSQL) to store the entries. Then, not all entries need to be loaded in memory. The first step is to introduce a data-access layer: The maintable should read from SQL database, not from all in-memory. Possible future work may be: https://www.zotero.org/support/dev/client_coding/direct_sqlite_database_access and https://github.com/zotero/zotero/blob/main/resource/schema/userdata.sql.

There can be an initial phase to evaluate whether PostgreSQL is the right DBMS as backend for JabRef. For instance, DuckDB and SQLite were also discussed. Currently, PostgeSQL turned out best (especially for handling regular expression search on the database itself), but things may have changed in 2026.

This is issue https://github.com/JabRef/jabref/issues/12708.

Skills required:

  • PostgreSQL, Java, JavaFX

Code places to start to look at:

  • org.jabref.gui.maintable.MainTableFieldValueFormatter#formatFieldsValues

Starting points:

  • Document the maintable of JabRef using Markdown and UML (starting point: org.jabref.gui.util.ValueTableCellFactory)

Possible Mentors:

@koppor, @InAnYan, @calixtus

Project size:

175h (medium)

This post is licensed under CC BY 4.0 by the author.