<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Wombelix Post - DeepL</title><link href="https://dominik.wombacher.cc/" rel="alternate"/><link href="/feeds/tag_deepl.atom.xml" rel="self"/><id>https://dominik.wombacher.cc/</id><updated>2025-08-02T00:00:00+02:00</updated><entry><title>Modernizing jDeepL: Java 11 to 17 and Automated Releases</title><link href="https://dominik.wombacher.cc/posts/modernizing-jdeepl-java-11-to-17-and-automated-releases.html" rel="alternate"/><published>2025-08-02T00:00:00+02:00</published><updated>2025-08-02T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2025-08-02:/posts/modernizing-jdeepl-java-11-to-17-and-automated-releases.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2025 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I had some time last night - the neighbors were having a
party and I couldn't sleep - so I decided to tackle a task
that's been sitting in my backlog for  ... &lt;a class="read-more" href="/posts/modernizing-jdeepl-java-11-to-17-and-automated-releases.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2025 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I had some time last night - the neighbors were having a
party and I couldn't sleep - so I decided to tackle a task
that's been sitting in my backlog for way too long: modernizing
jDeepL, my &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html"&gt;unofficial DeepL translation app for Linux&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For those who don't know jDeepL, it's a simple JavaFX desktop
application that lets you translate text using the DeepL API. Nothing
fancy, just a basic GUI with source and target text areas, language
selection, and the CTRL+C+C keyboard shortcut for quick translations.
I built it because I wanted something native on Linux instead of using
the web interface all the time.&lt;/p&gt;
&lt;p&gt;The main problem was that the project was stuck on older dependencies
and had practically non-existent documentation. This became obvious
when people opened and commented &lt;a class="reference external" href="https://github.com/wombelix/jDeepL/issues/1"&gt;GitHub issue #1&lt;/a&gt;
back in March 2023. Around that time jDeepL was also mentioned in a Golem.de
Article and I received a couple of Emails. All pointing out that there wasn't
much instruction on how to build it and that they ran into compatibility
issues with newer Java versions. The project was using Java 11, JavaFX 11, and
a bunch of outdated libraries that caused build failures for anyone
trying to compile from source.&lt;/p&gt;
&lt;p&gt;So last night I finally decided to modernize the whole thing a bit. The work
took me a few hours of checking new versions, reading changelogs, and
validating that updates wouldn't break anything. I bumped Java from 11
to 17 and updated all dependencies to their latest stable releases. So,
same libraries I was already using, but brought up to current versions.&lt;/p&gt;
&lt;p&gt;The most interesting challenge was fixing the FXTrayIcon dependency.
It had a deprecated constructor that I was using, so I had to dig into
the &lt;a class="reference external" href="https://github.com/dustinkredmond/FXTrayIcon"&gt;library's source code&lt;/a&gt;
to understand what the deprecated builder actually did and how to achieve
the same result with non-deprecated methods. The old approach let you define
image scaling directly in the constructor. The new way requires a two-step
approach: use the builder pattern, then call the image scaling method on the
returned object. Small change, but it took some detective work to
figure out the right replacement.&lt;/p&gt;
&lt;p&gt;The documentation also needed some love. The README was more or less
just a description of what the app does, with not much information
about how to actually build or run it. I added a Quick Start section
and expanded the Build section with Maven setup instructions. More
importantly, I set up automated releases using GitHub Actions.&lt;/p&gt;
&lt;p&gt;This is actually a huge step forward compared to how I handled releases
before. Back in &lt;a class="reference external" href="https://dominik.wombacher.cc/posts/jdeepl-version-0-7-4-released-pre-build-binaries-available.html"&gt;version 0.7.4&lt;/a&gt;, I was manually
uploading pre-built JARs to my personal Nextcloud instance. This
worked fine and was documented in the README, but wasn't exactly
convenient. Now when I push a tag, the
&lt;a class="reference external" href="https://git.sr.ht/~wombelix/jDeepL/tree/main/item/.github/workflows/release.yml"&gt;GitHub Actions workflow&lt;/a&gt;
automatically builds the JAR and creates a GitHub release with the
file attached. Users can just go to the
&lt;a class="reference external" href="https://github.com/wombelix/jDeepL/releases"&gt;GitHub releases page&lt;/a&gt;
and download binaries instead of having to build from source.&lt;/p&gt;
&lt;p&gt;One thing I discovered during this modernization is that jnativehook,
the library I use for the global &lt;code&gt;CTRL+C+C&lt;/code&gt; hotkey, is likely
on its way to becoming unmaintained. It only works with X11 sessions,
and with bleeding-edge distros pushing toward Wayland, I might need
to find a different approach for hotkey handling in a few years. But
that's a problem for future me.&lt;/p&gt;
&lt;p&gt;The project now builds with Java 17, uses updated dependencies, has
expanded documentation, and automated releases. The original issue
about build problems should be resolved now. Users can either download
pre-built JARs from GitHub releases or follow the updated build
instructions to compile from the
&lt;a class="reference external" href="https://git.sr.ht/~wombelix/jDeepL"&gt;source code&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It wasn't groundbreaking work, overall just maintenance that was overdue.
But sometimes that's what projects need, a bit of attention to keep them
current and usable.&lt;/p&gt;
&lt;p&gt;Next, I'm thinking about creating OS-specific packages using &lt;code&gt;jpackage&lt;/code&gt;.
This would let me provide &lt;code&gt;.deb&lt;/code&gt; and &lt;code&gt;.rpm&lt;/code&gt; packages that ship
with all dependencies. This would make the usage even easier compared to the
current &lt;code&gt;JAR&lt;/code&gt; file approach.&lt;/p&gt;
</content><category term="Code"/><category term="DeepL"/><category term="Java"/><category term="JavaFX"/><category term="Linux"/><category term="GitHubActions"/></entry><entry><title>jDeepL version 0.7.4 released, pre-build binaries available</title><link href="https://dominik.wombacher.cc/posts/jdeepl-version-0-7-4-released-pre-build-binaries-available.html" rel="alternate"/><published>2023-11-01T00:00:00+01:00</published><updated>2023-11-01T00:00:00+01:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-11-01:/posts/jdeepl-version-0-7-4-released-pre-build-binaries-available.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2024 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;It's been a while since I announced and released the first version of
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html"&gt;jDeepL - Unofficial DeepL App for Linux based on JavaFX&lt;/a&gt;.
Since then it was mentioned on a couple  ... &lt;a class="read-more" href="/posts/jdeepl-version-0-7-4-released-pre-build-binaries-available.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2024 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;It's been a while since I announced and released the first version of
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html"&gt;jDeepL - Unofficial DeepL App for Linux based on JavaFX&lt;/a&gt;.
Since then it was mentioned on a couple of news sites and people reached out to me.
Mostly with pointing out that there are not much instructions how to build it.
And that I don't offer pre-build binaries that people can directly run.&lt;/p&gt;
&lt;p&gt;That was good and valid feedback. I was focused on sharing it with the world.
I didn't take into account that non-tech people are the actual users.&lt;/p&gt;
&lt;p&gt;As part of the recent
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/git-repos-moved-to-sourcehut-with-mirrors-on-codeberg-gitlab-and-github.html"&gt;Git repos moved to Sourcehut, with mirrors on Codeberg, GitLab and GitHub&lt;/a&gt;
activities, I allocated a bit of time to tackle some of the addressed issues.
The &lt;a class="reference external" href="https://git.sr.ht/~wombelix/jDeepL"&gt;README&lt;/a&gt; should now be a bit clearer.
I updated some dependencies, improved the release scripts and published
&lt;a class="reference external" href="https://git.sr.ht/~wombelix/jDeepL/commit/a0801cbde9f606aa4a23fe459c5682b7c68ed799"&gt;v0.7.4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the future I plan a CI integration that takes care about publishing new versions.
Until then, I uploaded the pre-build version to  my personal Nextcloud instance: &lt;a class="reference external" href="https://hub.xlii.cc/s/an7E9E9bgFBpRG3"&gt;https://hub.xlii.cc/s/an7E9E9bgFBpRG3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Latest version: v0.7.4 (SHA256 checksum: 206c13ec820451096bdf07f29e336c6827c750db11554d9dcc68812c8b56c796)&lt;/p&gt;
&lt;p&gt;It's nice to see that some people find useful what I created.&lt;/p&gt;
</content><category term="Code"/><category term="DeepL"/><category term="Java"/><category term="JavaFX"/><category term="Linux"/></entry><entry><title>jDeepL - Unofficial DeepL App for Linux based on JavaFX</title><link href="https://dominik.wombacher.cc/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html" rel="alternate"/><published>2022-05-30T00:00:00+02:00</published><updated>2022-05-30T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2022-05-30:/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I'm a daily DeepL User, the Windows App is convenient but nothing comparable was available for Linux, so I build my own.&lt;/p&gt;
&lt;p&gt;jDeepL is a very simple GUI Application based  ... &lt;a class="read-more" href="/posts/jdeepl_unofficial_deepl_app_for_linux_based_on_javafx.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I'm a daily DeepL User, the Windows App is convenient but nothing comparable was available for Linux, so I build my own.&lt;/p&gt;
&lt;p&gt;jDeepL is a very simple GUI Application based on JavaFX, developed and tested on openSUSE Tumbleweed with KDE Plasma.&lt;/p&gt;
&lt;p&gt;You can find the GPL v3 licensed Source Code here: &lt;a class="reference external" href="https://dominik.wombacher.cc/~git/jDeepL/"&gt;https://dominik.wombacher.cc/~git/jDeepL/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's in an early stage but covers the most important functionality: Translating the marked text by pressing &lt;code&gt;CTRL + C + C&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At least that's for me the most important one from the official Windows App ;)&lt;/p&gt;
&lt;p&gt;I will probably improve it further within the next time, feel free to Contribute.&lt;/p&gt;
&lt;p&gt;Further details can be found in the README: &lt;a class="reference external" href="https://dominik.wombacher.cc/~git/jDeepL/"&gt;https://dominik.wombacher.cc/~git/jDeepL/&lt;/a&gt;&lt;/p&gt;
</content><category term="Code"/><category term="DeepL"/><category term="Java"/><category term="JavaFX"/><category term="Linux"/></entry></feed>