#3221·OpenRefine

Allow easier running, stopping, logging of OpenRefine

Author: thadguidryCreated Sep 25, 2020Updated Sep 2, 2026
LabelsType: Feature Requesthelp wantedPlatform: Windowspackaging

We want to make running and stopping easier for OpenRefine on Windows and Linux (we assume MacOS is good enough for now).

Proposed solution

Windows

On Windows, allow running OpenRefine as a native application, possibly with tray icon support (without displaying the console by default).

  • JAVA - The current supported and recommended community practice in Java world is to code a small JavaFX application.
  • RUST - But we might also instead use an actual systems programming language like Rust with Druid or Relm ((see Alternatives below).

The MVP for the application would be:

  1. The application window UI would have the following elements:
    • scrollable console text output (configurable line history display buffer with default at 3000)
    • File menu with options
      • Exit to ask a standard "Are you sure - OK/Cancel" and then gracefully shutdown OpenRefine and then the GUI app.
    • Close button (red X) on the GUI app would offer a confirmation dialog Are you sure you wish to exit OpenRefine?
    • Minimize/Maximize buttons
  2. OPTIONAL -
    • Save Log to allow saving the entire log output since beginning of application startup to a file
    • System Tray icon support
    • Right click on the System Tray gives only a single option Exit OpenRefine.
    • Double-click System Tray icon opens the application UI.
    • Toast notifications on Windows 10/11

Linux

TODO: On Linux, allow running OpenRefine as / with ???

MacOS

Nothing to do ?

Alternatives considering

  1. @dante9992 also mentioned that Tauri also supports system tray icon on Windows and can do app signing, self updating, toast notifications, etc. It also allows the app to be packaged as a .deb (Debian package) file. @thadguidry asked and paid for the Tauri team (see comments below) to put together a prototype with Tauri and Rust with code now stored here: https://github.com/OpenRefine/openrefine-tauri

  2. @timClicks said to me on Discord that we could just use Rust and Druid or maybe Relm

  3. some very hacky Launch4j opensource wrappers that are not 100% ideally compatible with Windows 10. (they were mostly coded and made for pre Win8.1 OS and no longer sufficient)

  4. Electron - has some non-free issues (see comment below)

Additional context


JAVA

From what I read so far, not entirely sure if AWT is really needed for SystemTray support (it was in JavaFX 8). Newer OpenJFX 11 or 15 might not need AWT at all, dunno. But just in case, here's some good info I found about showing/hiding the application when clicking the systray icon https://javafxpedia.com/en/knowledge-base/12571329/javafx-app-in-system-tray

One of the nice things about using a library like FXTrayIcon below is that it hides AWT / Swing complexity, since AWT is still necessary for System tray support on OS's, unfortunately.

JavaFX might be a nice way to optionally allow running OpenRefine on all 3 OS's, Linux, MacOS, Windows.

GlucoStatusFX (which has nice source code to follow along) uses JavaFX and the FXTrayIcon library which allows it to run the application in the system tray of Windows and MacOS. The system tray feature, however, doesn’t work on all Linux distributions. In that case, the application is available through the dock. Which is likely a perfect balance for our Linux users.

Oracle provides a very useful guide for Self -Contained Application Packaging that covers Windows, Linux, Mac https://docs.oracle.com/javase/10/deploy/self-contained-application-packaging.htm OpenJFX has wide community support now and can be utilized to code a small JavaFX application that runs OpenRefine from a system tray utilizing a library like FXTrayIcon. OpenJFX Intro: https://openjfx.io/openjfx-docs/#introduction OpenJFX Wiki: https://wiki.openjdk.java.net/display/OpenJFX/Main


RUST

Even though Rust provides a way to handle system tray and a WebView, it's likely much more approachable for our existing contributors & core team to instead leverage JavaFX which can also use WebView and all the bells and whistles such as CSS, Canvas, etc. Still, below are some Rust references for the daring:

Iced

https://github.com/hecrj/iced

Druid

https://raphlinus.github.io/rust/druid/2020/09/28/rust-2021.html https://github.com/linebender/druid/tree/master/druid https://linebender.org/druid/ https://docs.rs/druid/0.7.0/druid/

Relm

https://github.com/antoyo/relm

Tauri

https://tauri.studio/en/ https://github.com/tauri-apps/tauri https://tauri.studio/en/docs/usage/guides/visual/system-tray