We’ve updated Conveyor with some new features, and in particular better support for Kotlin/Jetpack Compose. With the improved support we’re laying the groundwork for one possible post-web future.
Better Kotlin & Compose support
In the latest update we’ve upgraded our Kotlin support in two ways:
- Version 1.2 of the Gradle plugin now runs against Compose for Desktop 1.2 (in beta as of September 2022). To use older Compose releases you should continue to use the older Gradle plugin. This makes it easy to integrate Conveyor and your app’s build system.
- The new plugin can also be used with Kotlin Multiplatform (KMP).
The template Compose app has been upgraded to use KMP. To try it, grab Conveyor and then run
conveyor generate compose org.your-domain.compose-test
Compose as post-web technology
The Jetpack Compose UI framework is Google’s official new framework for UI development on Android. It replaces the old Android GUI toolkit with a Kotlin based React inspired approach to UI, based on the same Skia graphics library used by Chrome. Compose for Desktop and its sister Kotlin Multiplatform project are a fascinating take on post-web technology. There’s no markup, CSS or DOM - just functions re-running in response to state changes.
Compose isn’t only a GUI toolkit. Its core is a GUI-independent ‘tree compiler’ in which arbitrary object trees can be constructed and synchronized using a natural, language integrated syntax. Mosaic is an experiment in using Compose to generate reactive text based UIs, and there are many other ways the technology can be applied. Many top tier apps have been developed using Compose and it’s anticipated that over time the millions of existing Android apps will be incrementally ported to use it, so it’ll be easy to find developers who know it.
Traditionally an online service would provide a native Android app, a native iOS app and then a web app for laptop users. But maintaining three different versions of an app is expensive and annoying. As a consequence, the 2010s saw the rise of “mobile first” companies who skip the web app until later (and sometimes never). Now Google and JetBrains are working together to create Jetpack Compose for Desktop, allowing you to re-use your Android UI code on the desktop using a standard JVM. Using ordinary OOP mechanisms like interfaces and classes in combination with Kotlin’s expect/actual keywords code can be properly modularized and abstracted whilst still letting users benefit from the unique capabilities of each platform. You can also share logic code whilst continuing to use UIKit or SwiftUI on iOS.
Replacing your web app with shared Android/desktop code wasn’t practical until recently. Compose is a new UI toolkit, Kotlin Multiplatform is a new toolchain and even if you adopted these technologies already, distributing the results was inconvenient (especially to keep clients up to date) - that’s a core reason people use web browsers. Conveyor fixes distribution, making this approach realistic and easy.
We plan to write a lot more about the potential for post-web technology. If you’re interested in post-web research and concepts, subscribe to our blog to get notified when we post about it.
The Gradle plugin can now import a JDK from your Java toolchain settings. If your vendor and version are recognized you no longer need to use an
include statement to add a JDK in your Conveyor config. This reduces duplication between your build system and Conveyor.
This is another step for our mission of making distribution of non-web apps becomes as easy as for simple static websites. One of our goals is to successfully detect or derive defaults for every possible setting, so you don’t need to write a config file. We already made a lot of progress on this; a typical
conveyor.conf is only about 8 or 9 lines of config and virtually all of it is obvious. For some classes of app we think we can reach zero lines of config.
Start at login
Embedded devices are poorly served by web browsers, especially for situations where a full computer is available but should operate fully unattended (“kiosks”). Desktop development shines for this use case because you can develop with the better tools and APIs available outside the browser, access attached hardware, do computation even in places with weak internet connections and have devices update asynchronously without imposing any UI latency penalties.
Kiosk apps need to start automatically on boot. Configuring Windows to log in automatically is easy, and with the new
app.windows.start-on-login key Conveyor will take care of starting the application automatically once it’s installed. Just set it to true and you’re done.
For regular desktop apps, be aware that the user can enable or disable your application startup in the task manager and this will override your package settings. This is the recommended way to start or stop an app starting at login.