October Updates

For the October release we’ve focused on polishing, bug fixes and community awareness. On Windows we improved the appearance of icons in the task bar. We upgraded certificate handling, made it easier to customize the generated download page, fixed some bugs, refreshed the AtlantaFX sampler and integrated Conveyor with the docs for Jetpack Compose. Read on for details.

Compose Multiplatform

Last month we worked with JetBrains to update the docs for Jetpack Compose for Desktop to tell everyone about Conveyor and how to use it with Compose apps. Conveyor was also discussed in the release announcement for the desktop Compose 1.2 release.

Compose Multiplatform is a great way to bring apps originally built for mobile to the desktop, whilst still having a UI properly adapted to the desktop paradigm. Although you can try to target a web DOM with it, this seriously constrains what your shared code can do even though the Kotlin Multiplatform vision is all about code sharing. By distributing an app that runs on a standard JVM the amount of code that can be shared with Android and iOS climbs dramatically whilst ensuring users get the full feature set they expect from their laptops and workstations.

Windows taskbar icons

Windows has been around a long time and as such has been through a variety of different visual design languages (themes). In Windows 8 a new look was introduced that featured application icons on top of brightly colored flat panels. The colors could change unpredictably as this was under the control of the user, who was given a range of accent colors to choose from. This look persisted into Windows 10 and was quite the departure from the classical style, necessitating a new feature in the Windows shell called “icon plating”. A “plated” icon is rendered not onto whatever happens to be behind it, but rather onto an accent colored rectangle. Along the way a new method of supply the OS with icons was added - no longer embedding an ICO file into the EXE but a set of free-standing PNGs in the app package itself, pointed to by an all new binary resource index format. Apps can provide both plated and unplated icons in a variety of sizes and contrasts.

[Icon plating]

During the Windows 11 development cycle the taskbar was rewritten and the visual design changed yet again. Microsoft started putting icons onto a backplate by default for taskbar icons when the app package didn’t specifically override that behavior. This can cause odd visual artifacts in which the icon has a solid background and thick border. This is a deliberate design decision by Microsoft, but the issue doesn’t appear for the built-in Windows 11 apps because as it happens Visual Studio always switches icon plating off in new projects. It seems likely therefore that no real change in icon appearance was intended, but perhaps nobody noticed during the development of the new taskbar because Microsoft’s own first-party apps don’t trigger it.

With the October updates we are now generating the correct index files to convince Windows to use unplated (normal) icons in the task bar. This should improve the visual appearance of your app and make it more consistent with the built-in Windows 11 apps.

Embed arbitrary code in the download page headers

A new config key (app.site.extra-header-html) lets you inject HTML into the <head> region of the generated download page. Using this page is optional but if you do use it, this makes it easier to add Javascript for analytics that tracks if the user clicks or not. You can also use it to apply any styling changes you want.

Certificate improvements

A primary goal of Conveyor is to eliminate the technical pain of code signing as much as possible given the constraints imposed by OS vendors. We now support certificates supplied in .p7b format, which some certificate authorities like to use. We think we now support all certificate formats that are in use today. Additionally, we check for certificate expiry before signing, to catch the case where you try to sign with an expired certificate without realizing it.

New features for JVM apps

When conveyor.compatibility-level >= 4 any native libraries placed in the app inputs will be moved to the right locations in the generated package to be loaded. Native libraries found in JARs were already being extracted and placed there - this just lets you do the same thing for libraries outside of JARs.

We’ve also updated the version of JavaFX used in the template app, and made fixes for the Azul JDK which has an unusual hybrid structure in its Mac downloads.

Finally we refreshed the AtlantaFX sampler app to keep up with the upstream project’s new 1.1 release. It adds a new Nord Light/Dark color scheme, new widgets and improves the visual appearance of the theme even more than previously. Between AtlantaFX and Jetpack Compose it’s easy to build attractive and powerful UIs using high level APIs in the programming language and style of your taste.

We’re expanding!

Finally, we extend a warm welcome to Leo Mesquita, our newest employee. Leo is a keen karaoke singer who joins us after a 15 year stint at Google and will be focusing initially on increasing test coverage, before moving on to features.