Skip to content

fix(deps): update maplibre-compose to 0.20 - #6924

Merged
AndyScherzinger merged 3 commits into
masterfrom
renovate/maplibrecomposeversion
Oct 17, 2026
Merged

AndyScherzinger merged 3 commits into
masterfrom
renovate/maplibrecomposeversion

Conversation

@renovate

@renovate renovate Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

maplibre-compose 0.20 reshapes the public API ahead of 1.0 with many small breaking renames, so on top of the version bump this PR adapts the map code in LocationPickerScreen.kt and GeolocationMessage.kt:

  • ColorLiteral and DpLiteral are internal now; layer properties use const(...) instead of ColorLiteral.of(...) / DpLiteral.of(...).
  • CameraPosition and CameraUpdate renamed target to center.
  • Enum entries are PascalCase, e.g. CameraMoveReason.GESTURE → CameraMoveReason.Gesture.
  • Dropped two unnecessary !! on geocodingResult that the compiler flagged, as the preceding when condition already smart-casts it to non-null.

No behaviour change is intended. The existing when over StyleLoadState already has the else branch 0.20 asks for. Verification metadata needed no update, since the new artifacts are covered by the existing org.maplibre key.

🖼️ Screenshots

🏚️ Before 🏡 After
B A

🚧 TODO

  • Test the location picker and the chat geolocation preview on a device

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not needed
  • 🔖 Capability is checked or not needed
  • 🔙 Backport requests are created or not needed: /backport to stable-xx.x
  • 📅 Milestone is set
  • 🌸 PR title is meaningful (if it should be in the changelog: is it meaningful to users?)

🤖 AI (if applicable)

  • The content of this PR was partly or fully generated using AI

This PR contains the following updates:

Package Change Age Confidence
org.maplibre.compose:maplibre-compose-runtime-opengl-android 0.19.0 → 0.20.0 age confidence
org.maplibre.compose:maplibre-compose-material3 0.19.0 → 0.20.0 age confidence
org.maplibre.compose:maplibre-compose 0.19.0 → 0.20.0 age confidence

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

maplibre/maplibre-compose (org.maplibre.compose:maplibre-compose-runtime-opengl-android)

v0.20.0

This release reshapes the public API ahead of 1.0 to bring it closer to the project's new API guidelines. It also fixes several rendering problems on MapLibre Native, and it makes error handling more predictable.

This release contains many small breaking API changes. Most are renames or a switch to builders, and the compiler can guide you through them. See the upgrade notes below.

Rendering fixes on Android, iOS, macOS, and desktop

These platforms now use MapLibre Native FFI 0.202610.0:

  • Arabic text is shaped correctly on iOS and macOS, and right-to-left labels read in the right order.
  • An icon now appears when its image arrives after the map has drawn the tile.
  • interpolateHcl and interpolateLab work on these platforms.
  • On Android and Apple platforms, numberFormat and collator use the requested locale, currency, and number of fraction digits.
  • Feature queries are more accurate for offset lines, at fractional zoom levels, and on overzoomed tiles.
  • Line patterns have the same size as in the browser.

The browser now uses MapLibre GL JS 6.12.0.

Smoother maps
  • Feature queries, cluster queries, and feature clicks no longer decode their results on the UI thread on Android, iOS, macOS, and desktop.
  • On these platforms, MapResourceProvider and custom tile providers run on Dispatchers.IO, so a provider can do blocking reads, for example from MBTiles, SQLite, or app assets, without stalling the map.
  • Maps, snapshotters, and offline storage created from one MapRuntime now share one MapLibre engine. To isolate work, create separate MapRuntimes.
Predictable errors

Errors now fall into three groups:

  • Mistakes in your code usually throw IllegalArgumentException or IllegalStateException
  • Races you can't prevent no longer throw. If a style changes while a call runs, a command does nothing and logs a warning
  • Engine failures throw library exceptions.

Other changes:

  • Cluster queries return null when the cluster doesn't exist or the source doesn't cluster its data. Before, they returned an empty result, which looked like a real answer.
  • MapSnapshotter.capture throws MapSnapshotException when a tile or resource it needs fails to load.
  • Custom tile provider errors fail the tile instead of leaving it unanswered.
  • An exception thrown by your MapLogger no longer breaks the map operation that logged.
Other changes
  • MapConnectivity.mode (Android, iOS, macOS, and desktop) can force MapLibre offline or online for the whole app. ConnectivityMode.Automatic follows the system's connectivity.
  • Tile sources built from tile URLs, and custom vector tile sources, now request tiles up to zoom 22, the style spec's default. Before, they stopped at zoom 18 and stretched those tiles further.
  • On iOS, quick zoom (tap, then press and drag) zooms in when you drag up by default, as in Apple Maps. Other platforms keep drag-down-to-zoom-in.
  • Flight animations follow each engine's own flight path. Each engine also has its own flight settings: minZoom on MapLibre Native, and curve, screenSpeed, and maxDuration on the browser.
  • LocationIndicatorLayer click handlers receive the ClickEvent, as other layer handlers do.
  • Fixed a crash when a map is shown before a runtime created on a background thread has finished starting.
  • In Android Auto, the map's style content keeps updating while the phone display is off.
  • On native macOS, SystemSettingsLauncher opens the Location Services settings.
  • The getting-started guide now shows how to set up desktop apps with Kotlin Toolchain.
  • @ExperimentalMaplibreComposeApi marks APIs that may change in any minor release. It covers APIs that expose engine internals, pre-1.0 dependencies, and some incomplete APIs.
Upgrading from v0.19.x

Upgrade, build, and work through the compiler errors by area. Most fixes are mechanical.

Throughout the library
  • Add an else branch to when expressions over types the library reports, because later releases can add values.
  • Several enums are now sealed interfaces or value classes. Named values keep their spelling, but entries, name, ordinal, and valueOf are gone. Use toString() or .value instead.
  • Enum entries use PascalCase, for example CameraMoveReason.Gesture.
  • MapLibre in function names is now Maplibre, for example installMaplibreCompose.
  • Types the library creates have internal constructors, and interfaces such as MapRuntime and MapSnapshotter can't be implemented outside the library.
Settings use builders

Build settings with a block, and use from = previous instead of copy:

val options = GeoJsonOptions { cluster = true }
val slower = CameraAnimation.Ease(from = animation) { duration = 1.seconds }
val source = rememberGeoJsonSource(data) { cluster = true }

Functions that take settings, such as source constructors, createMapRuntime, and snapshotter.capture, accept the block directly. Each settings type has a Standard preset.

Platform-specific settings of RenderOptions, DebugOverlays, and MapUiOptions are now members, so remove their extension imports.

Camera and gestures
  • tilt is now pitch everywhere. JSON that your app saved with a "tilt" key must be migrated.
  • target is now center in CameraPosition and CameraUpdate. Positional CameraPosition arguments are now in the order center, zoom, bearing, pitch, padding.
  • Camera fit functions take a CameraFit, for example fitCameraToBounds(box, CameraFit(pitch = 30.0)).
  • Fly.minZoom exists only on MapLibre Native, so move it out of shared code.
  • Tile level of detail takes an algorithm: ScreenCenter (formerly Default) or CameraDistance (formerly Distance).
  • Interaction bindings take action = instead of response =, with values from CameraAction, FocusAction, and InputAction. Step and speed settings include their unit, for example zoomStepLevels.
Style, sources, and expressions
  • Style calls that lose a race return null or do nothing instead of throwing StyleHandleException. Handle null from StyleSources.add and from handle reads.
  • Cluster queries return nullable results, and their limit and offset are Int.
  • getBaseSource returns video, canvas, and unrecognized source types instead of null.
  • missingImageResolver receives a MissingImageRequest. Read request.id.
  • Tile sources take scheme = TileScheme.Tms instead of tileCoordinateSystem. SourceDefaults is removed. Pass maxZoom = 18 to keep the old tile limit.
  • Raster DEM custom factors are source parameters: encoding = RasterDemEncoding.Custom, redFactor = ….
  • In expressions, asEnum(LineCap) replaces asEnum<LineCap>(), and pi(), ln2(), and e() replace PI, LN_2, and E. The expression compiler is now internal, so build custom operators with call(operator, args).
  • mbtilesUrl no longer exists on the browser.
Snapshots

Snapshots take the size as a DpSize and the display scale as a Density:

snapshotter.capture(DpSize(400.dp, 300.dp)) {
  cameraPosition = position
  density = LocalDensity.current
}

When no snapshot renderer is available, capture throws MapSnapshotException instead of UnsupportedOperationException.

Offline storage
  • OfflineManager is now OfflineStorage. Import org.maplibre.compose.offline.offlineStorage to read runtime.offlineStorage.
  • Offline APIs no longer exist on the browser, so move shared offline code into Android, iOS, macOS, or desktop source sets.
  • DownloadProgress.Error.reason is a MapResourceError instead of a "REASON_*" string. The error_reason property from rememberOfflinePacksSource is now the reason's name, such as Connection.
Location
  • Browser location types use the Web prefix, for example WebLocationProvider.
  • Platform settings launchers are replaced by SystemSettingsLauncher(...).
  • LocationPermission.Unknown is now NotDetermined. Unclassified failure reasons and unreported accuracy are null.
Desktop
  • Custom desktop hosts use the factory for their platform, for example ComposeMapPresentationHost.macosMetal, and return the matching context type.

Configuration

📅 Schedule: (in timezone Europe/Berlin)

  • Branch creation
    • Between 01:00 AM and 04:59 AM (* 1-4 * * *)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added 3. to review Waiting for reviews dependencies labels Oct 17, 2026
@renovate

renovate Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: app/build.gradle.kts
Command failed: ./gradlew -Dorg.gradle.jvmargs=-Xms512m -Xmx512m --console=plain --dependency-verification lenient -q --write-verification-metadata sha256,pgp dependencies

FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring root project 'talk-android'.
> Could not resolve all artifacts for configuration 'classpath'.
   > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.10.
     Required by:
         buildscript of root project 'talk-android'
      > Repository Gradle Central Plugin Repository is disabled due to earlier error below:
         > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugins-bom:2.4.10.
            > Could not get resource 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-gradle-plugins-bom/2.4.10/kotlin-gradle-plugins-bom-2.4.10.pom'.
               > Could not GET 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugins-bom/2.4.10/kotlin-gradle-plugins-bom-2.4.10.pom'.
                  > Received status code 429 from server: Too Many Requests
> There are 51 more failures with identical causes.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights from a Build Scan (powered by Develocity).
> Get more help at https://help.gradle.org.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
A problem occurred configuring root project 'talk-android'.
> Could not resolve all artifacts for configuration 'classpath'.
   > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.10.
     Required by:
         buildscript of root project 'talk-android'
      > Repository Gradle Central Plugin Repository is disabled due to earlier error below:
         > Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugins-bom:2.4.10.
            > Could not get resource 'https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-gradle-plugins-bom/2.4.10/kotlin-gradle-plugins-bom-2.4.10.pom'.
               > Could not GET 'https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugins-bom/2.4.10/kotlin-gradle-plugins-bom-2.4.10.pom'.
                  > Received status code 429 from server: Too Many Requests
> There are 51 more failures with identical causes.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights from a Build Scan (powered by Develocity).
> Get more help at https://help.gradle.org.
==============================================================================

BUILD FAILED in 42s

@renovate

renovate Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Rebase not applied

This branch has not been rebased, as its update has not yet met the internal checks configured for it, such as minimumReleaseAge. Rebasing it now would add a dependency version which is still within its configured observation period.

Renovate will rebase this branch once its update has met those checks.

@AndyScherzinger AndyScherzinger added this to the 25.1.0 milestone Oct 17, 2026
renovate Bot and others added 3 commits October 17, 2026 13:45
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- ColorLiteral and DpLiteral are internal now, use const()
- CameraPosition/CameraUpdate renamed target to center
- enum entries are PascalCase, e.g. CameraMoveReason.Gesture

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
geocodingResult is smart-cast to non-null by the preceding when condition.

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
@AndyScherzinger
AndyScherzinger force-pushed the renovate/maplibrecomposeversion branch from f2653ad to 96bc125 Compare October 17, 2026 12:17
@AndyScherzinger AndyScherzinger changed the title fix(deps): update maplibrecomposeversion to v0.20.0 fix(deps): update maplibre-compose to 0.20 Oct 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📱 QA build

Download app-qa-debug.apk
QR code Open the QR code for this download
Commit 96bc125
Version 6924
Available until 7 days after this build

The QA build installs alongside a released Nextcloud app, so you can keep
using your existing install while testing.

Downloading the file requires a GitHub account, so open this link on the
device you want to test on, or transfer the APK to it.

@AndyScherzinger
AndyScherzinger merged commit 774fe1f into master Oct 17, 2026
16 of 22 checks passed
@AndyScherzinger
AndyScherzinger deleted the renovate/maplibrecomposeversion branch October 17, 2026 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant