The Felgo 4.4.0 update builds your Android apps against Android 16, which Google Play requires for new apps and app updates from August 31, 2026. The release also brings the OAuth 2.0 Plugin to macOS, Windows and Linux, and adds native Keychain access and Objective-C integration on macOS. Read on to learn more about the release.

Android 16 Support for Google Play

Felgo 4.4.0 builds Android apps against Android 16, API level 36. Google Play requires this for all new apps and app updates from August 31, 2026. You can request an extension until November 1, 2026 if you need more time.

The SDK covers the platform side. Your project needs a small number of one-time changes, which the next section lists in full.

Felgo Cloud Builds updates to Felgo 4.4.0 and Android 16 at the same time. Every app you build and deploy there meets the new Play Store requirement. You don't even need an Android toolchain on your own machine.

What You Need to Change in Your Project

Felgo 4.4.0 asks for a few one-time changes to your existing projects.

  • Install the Android 16.0 SDK Platform (API level 36) and the matching 36.x Build-Tools.
  • Opt out of predictive back navigation in your android/AndroidManifest.xml:
    <!-- ADD THIS ATTRIBUTE -->
    <application
        android:enableOnBackInvokedCallback="false"
        ... >
    On Android 16, an app that intercepts the back button no longer receives it: onBackPressed() is not called and KEYCODE_BACK is not dispatched. Google describes this opt-out as temporary.
  • With Felgo 4.4.0, we removed the old config.json project configuration completely. All the settings are now configured by CMake options. Move your app name from qml/config.json into your CMakeLists.txt, then delete the JSON file:
    # replaces the "title" entry of qml/config.json
    set(PRODUCT_TITLE "Your App")
    PRODUCT_TITLE sets the application name QSettings uses, so your stored settings move to a different location if you skip this step. The other PRODUCT_* variables are already there from earlier Felgo versions.
  • Apply the changes for the features your project uses:
    • qmake projects: Felgo 4.4.0 removes qmake support, and all Felgo projects use CMake. Follow the migration guide to convert your project.
    • OAuth 2.0 on Android: register the callback intent filter on OAuth2AuthActivity instead of FelgoActivity.
    • Games: add android:appCategory="game" to the application element, so your game keeps a fixed screen orientation on large Android 16 screens.
    • Bluetooth Low Energy: discoveredDevices is now a QML model instead of a JavaScript array. Delegates read its roles directly:
      // Before:
      delegate: AppText { text: modelData.name + " (" + modelData.rssi + ")" }
      
      // After: available roles are name, address, services and rssi
      delegate: AppText { text: name + " (" + rssi + ")" }
  • Finally, delete the android-build directory of your project, run CMake again, and build from scratch, so your project picks up the new configuration.

If you run into any issues while migrating, do not hesitate to contact us.

OAuth 2.0 for Desktop: macOS, Windows, and Linux

The OAuth 2.0 Plugin now supports macOS, Windows, and Linux. On macOS it uses ASWebAuthenticationSession, the same native authentication flow as iOS. On Windows and Linux it receives the OAuth callback on a local loopback server, as described in RFC 8252.

felgo-oauth2-macos-popupYour authentication code now runs on every platform Felgo targets. The same QML that signs a user in on a phone signs them in on a desktop app.

App startup has three possible outcomes, and this release gives each one its own handler. pluginLoaded turns true once the plugin has restored any stored tokens, so you can show a loading indicator until it does. After that, sessionNotFound fires when there is no previous session, and accessTokenReady fires when a stored token is valid and safe to use:

import QtQuick
import Felgo

App {
  OAuth2Client {
    id: oauth

    onSessionNotFound: loginPage.show()
    onAccessTokenReady: mainPage.show()
    onIsAuthenticatedChanged: if (!isAuthenticated) loginPage.show()
  }

  AppActivityIndicator { visible: !oauth.pluginLoaded }
}

If you inspect authStatus directly, note that it reports a new Initializing value until the plugin finishes loading.

isAuthenticated also stays true while a startup refresh is in progress, so your UI no longer flickers back to the login screen while tokens refresh.

For everyday use, getValidAccessToken() hands you a token that has not expired, and refreshes it first when needed. Call it before an API request instead of reading accessToken directly:

oauth.getValidAccessToken(function(token) {
  if (!token)
    return // refresh failed, or no refresh token available

  HttpRequest.get(userUrl)
    .set("Authorization", "Bearer " + token)
    .then(res => console.log(res.text))
})

tokensRefreshed and accessTokenExpired report what happened to the session, and authTimeout raises an error after 300 seconds by default, so the login screen no longer stays stuck when someone closes the browser without finishing.

Native macOS APIs: Keychain and NativeObject

The Keychain methods of NativeUtils now work on macOS as well. setKeychainValue, getKeychainValue, and clearKeychainValue reach the system Keychain through the Security framework, exactly as they do on iOS and Android.

NativeObject and NativeObjectUtils also support macOS now, so you can call Objective-C APIs directly from QML with the bridge you already use on iOS. Note that NativeView embedding is not yet supported on macOS.

Keyboard Shortcuts for Desktop Navigation

NavigationItem adds a shortcut property. Set a standard Qt key sequence and that shortcut switches to the tab:

Navigation {
  NavigationItem {
    title: "Home"
    icon: IconType.home
    shortcut: "Ctrl+1"

    NavigationStack { HomePage { } }
  }
}

Navigation.keyboardShortcutsEnabled and Navigation.showShortcutTooltip control both behaviors, and both are on by default on desktop.

Felgo QML Hot Reload

As usual, we also bring the latest improvements of Felgo Hot Reload to the SDK. This release covers general fixes and stability improvements.

More Features and Improvements

Felgo 4.4.0 includes many more improvements, for example:

  • The Soomla Plugin now uses Google Play Billing Library 8.2.0. Google Play requires Billing Library 8 or higher from August 31, 2026. Your app needs no code changes.
  • FirebaseAuth adds reauthenticateUser(), which unblocks security-sensitive operations like deleteUser() for a session restored on app start.
  • AppModal exposes an isOpen property, consistent with AppOverlay.
  • The highlight effect of AppToolTip can now match the ratio of its target component, or use a different one, with highlightRatio.
  • AppTabButton titles gain capitalization, wrap mode, maximum line count, and horizontal alignment options, as component and theme properties.
  • The TexturePacker components are now available in Felgo 4.
  • and many more.

For all relevant changes, features, and fixes of recent Felgo updates, please check out the changelog.

How to Update Felgo

Try out these new features by following these steps:

  • Open the Felgo SDK Maintenance Tool in your Felgo SDK directory.
  • Choose "Update components" and finish the update process to get this release as described in the Felgo Update Guide.
  • Update Felgo

Update Felgo

If you haven't installed Felgo yet, you can do so now with the latest installer from here. Now you can explore all of the new features included in this release!

 

 

More Posts Like This

release-felgo-qml-hot-reload-for-qt-projects
Felgo Hot Reload: Enhance your Qt Project Development with QML Code Reload

Felgo Release 4.3.0
Release 4.3.0: Felgo QML Hot Reload, Android 15, Qt 6.8 & Qt Creator 17

qt-quick-qml-visual-studio-extension
QML Extension for Visual Studio: Qt Quick Syntax Highlighting and Autocompletion