Skip to content

GSoC 2025 ‐ Walkthrough and Welcome Tab

Yubo Cao edited this page Aug 29, 2025 · 8 revisions
Student Yubo Cao
Organization JabRef
Primary repository JabRef/jabref
Project name Improved walkthrough and welcome tab
Project mentors @Siedlerchr, @calixtus, @Houssem Nasri, @ThiloteE, @subhramit
Project page Google Summer of Code 2025 Project Page
Status Complete

Project summary

JabRef is a free, open-source reference manager that has been evolving since 2003. Over the years, our community has continuously added new features to help users manage their references more efficiently. However, some of these features can be challenging for new users to discover, and the default setting of certian features cannot be determined without prior knowledge about the user's intended usecase of JabRef. To address such challenges (e.g., #12664 and #9491), walkthroughs and a welcome tab have been created to help new users get started with JabRef without needing to read through the entire documentation.

Refined project issue—#12272.

This project implements the following features:

  1. Walkthroughs:
    • Setting the main file directory
    • Customizing the entry table
    • Linking PDF/external files to entries (e.g. through the built-in full-text download, URL download, and directly by dragging-and-dropping the file)
    • Grouping entries in a library
    • Searching through the library using basic full-text search and advanced Lucene syntax
  2. Welcome Tab:
    • Responsive layout
    • Quick settings:
      • Set the main file directory
      • Change JabRef's visual theme
      • Optimize JabRef for large libraries
      • Toggle whether citation key should be shown in the entry table
      • Configure push to application
      • Configure web search services (such as JabRef checking for updates, web search, Mr. DLib, Grobid and more)
    • Walkthroughs can be directly opened from the welcome tab, making it easier for new users to get started with JabRef.
    • Donation Prompt

Pull Requests to main branch:

Scope—GSoC

#13182—Implementation of walkthrough infrastructure

  • Implemented walkthrough infrastructure that contains a:
    • Declarative API to create new walkthroughs
    • A walkthrough renderer that can robustly resolve the node that needs to be highlighted, revert to previous state if the user clicks outside the walkthrough, and handle the case where the node is not visible in the current view

#13595—Walkthrough Fixes

  • Adapt an entirely event-driven approach to render walkthroughs, instead of using a Timeline to poll the node in the event tree every 50ms
  • Support more robust walkthrough creation that may involve modifying JabRef's state, such as changing the library or search settings

#13679—Add more walkthroughs, donation prompt, and responsive layout for welcome tab

  • File search and add group walkthroughs are implemented
  • Donation prompt that would show up annually on the welcome tab is implemented
  • Make welcome tab responsive and change from two-column layout to one-column layout on small screens

#13407—Welcome tab

  • Initial refinement of the welcome tab that includes quick settings and two-column layout

#13763—Memory leak and bug fixes

Outside core scope

#13194—Add Markdown rendering to AI Chat

  • Used Flexmark to render Markdown in AI Chat
  • Used rangeShape to implement a selectable TextFlow

#13386—Dark Titlebar

  • Make JabRef's title bar adapt to the system theme

#13192—Update Gradle Properties

Before GSoC

#12880—Add support for LTWA (issue #12276)

#12978—Update documentation images and fix spelling

  • Updated getting started guide for new developers

#13764—Fix theme manager

  • Universal patch to the theme management subsystem

#13783—Improve error console look and feel

#13786—Improve add buttons look and feel

Here is a complete list of my commits to JabRef (main).

Screenshots

Welcome tab in light theme.

Welcome tab in light theme

Welcome tab in dark theme.

image

Link PDF to entry walkthrough:

link-pdf-walkthrough

Change theme quick settings dialog:

change-theme-settings

Challenges and learning highlights

Many challenges were encountered during the project, but the most significant are as follows:

  1. It was not possible to debug unit-tests in Windows because of Gradle's long-path mitigation failed to shorten the command line length sufficiently to work under the Windows's character limit (#34003)
  2. JavaFX's Platform.runLater cannot deterministically schedule the task to run in the JavaFX application thread, not only leading to not easily reproducible bugs but also making it difficult to debug the state transition errors in the walkthrough renderer, especially after switching to a purely event-driven approach (#13595)
  3. JavaFX's onMouseClicked is not as robust as a HTML button's onClick, but rather can be overriden by a variety of other events, such as onAction, event filters, and onMousePressed (note click is only triggered after a press and release is left-unconsumed). As such, to maintain the generality of the walkthrough renderer, reading JavaFX's source code and understanding how to write EventDispatcher turned out to be necessary.
  4. Stylesheet applied on a JavaFX window doesn't inherit from the parent window's stylesheet, making popup windows' requiring case-by-case styling.

As a result of overcoming the above challenges (and many other), I have learned a lot about JavaFX and how to debug JavaFX applications. But perhaps the more important learning highlights are:

  1. Work with teams across different timezones, and to communicate effectively with my mentors, other contributors, and the community.
  2. Ask for assistance when needed, and present my work in ways that's easy to understand and follow during the weekly meetings.

Blog

The blog page can be found at Introducing JabRef's New Walkthrough and Welcome Tab

Clone this wiki locally