Skip to content
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
2480733
Return all targets when supplying empty layers list on iOS (#680)
srmncnk Dec 15, 2025
382005e
chore(deps): bump com.android.application from 8.12.0 to 8.13.2 in /m…
dependabot[bot] Dec 30, 2025
62c3237
chore(deps): bump org.maplibre.gl:android-sdk from 11.13.5 to 12.3.0 …
dependabot[bot] Dec 30, 2025
ea2af4c
chore(deps): bump actions/upload-artifact from 4 to 6 (#688)
dependabot[bot] Dec 30, 2025
fcdd8be
chore(deps): bump com.android.tools.build:gradle from 8.13.0 to 8.13.…
dependabot[bot] Dec 30, 2025
a347dfe
chore(deps): bump actions/checkout from 5 to 6 (#672)
dependabot[bot] Dec 30, 2025
ce098b6
chore(deps): bump com.squareup.okhttp3:okhttp from 4.12.0 to 5.3.2 in…
dependabot[bot] Dec 30, 2025
9cf1b63
chore(deps): bump org.jetbrains.kotlin:kotlin-gradle-plugin from 2.1.…
dependabot[bot] Dec 30, 2025
556eb9e
chore(deps): bump org.jetbrains.kotlin.android from 2.1.0 to 2.2.21 i…
dependabot[bot] Dec 30, 2025
e19216d
Implemented explicit annotation manager initialization (#668)
albertmoravec Dec 30, 2025
761102c
chore(deps): bump actions/checkout from 5 to 6 (#693)
dependabot[bot] Jan 5, 2026
3ffc35b
chore(deps): bump actions/upload-artifact from 4 to 6 (#694)
dependabot[bot] Jan 5, 2026
5230fab
fix: mix max zoom preference on iOS
gabbopalma Jan 5, 2026
8bcd74a
refactor: cameraTargetBounds on android and iOS
gabbopalma Jan 5, 2026
b4e3d65
chore(deps): bump com.android.tools.build:gradle from 8.13.0 to 8.13.…
dependabot[bot] Jan 5, 2026
ee60566
chore(deps): bump com.android.application from 8.12.0 to 8.13.2 in /m…
dependabot[bot] Jan 5, 2026
33bbb97
chore(deps): bump org.jetbrains.kotlin:kotlin-gradle-plugin from 2.1.…
dependabot[bot] Jan 5, 2026
5461e29
chore(deps): bump org.jetbrains.kotlin.android from 2.1.0 to 2.3.0 in…
dependabot[bot] Jan 5, 2026
86907a3
chore(deps): bump com.squareup.okhttp3:okhttp from 4.12.0 to 5.3.2 in…
dependabot[bot] Jan 5, 2026
b4fb174
feat: add logo customization options including visibility and positio…
gabbopalma Jan 6, 2026
ac877a4
refactor: Refactor all example app and pages. Implemented new UI and …
gabbopalma Jan 6, 2026
12dfad2
fix: update setPaintProperty and setLayoutProperty to handle nullable…
gabbopalma Jan 6, 2026
2b550ed
refactor: Improved layers examples. Improved MapLibreMapController di…
gabbopalma Jan 6, 2026
9ce52a6
refactor: Fixed setLayerProperties and pattern images on web and andr…
gabbopalma Jan 6, 2026
8fe2078
chore: changed cat icon to marker icon for pattern examples
gabbopalma Jan 6, 2026
7ee3a08
chore: update changelogs, release, contributing .md and minor fix for…
gabbopalma Jan 6, 2026
2b3b21a
chore: updated pubspec versions to `1.0.0`
gabbopalma Jan 6, 2026
acb6ef6
Merge branch 'main' into release-0.25.0
gabbopalma Jan 6, 2026
07ecf40
chore: rollback to 0.25.0 release version
gabbopalma Jan 7, 2026
97fabb1
chore: rollback to 0.25.0
gabbopalma Jan 7, 2026
f989797
chore: remove disposing of mapController in examples. Minor fixes.
gabbopalma Jan 7, 2026
98660dc
feat: enhance iOS LayerPropertyConverter to handle null values and im…
gabbopalma Jan 7, 2026
910a10a
chore: updated changelogs and fixed pipelines failing
gabbopalma Jan 7, 2026
c001d13
feat: implement camera bounds constraints in example and enhanced cam…
gabbopalma Jan 7, 2026
2a4433e
chore: camera bounds example
gabbopalma Jan 7, 2026
d2ed46c
feat: add attribution parsing for iOS. Enhanced various sources example.
gabbopalma Jan 7, 2026
6d753c4
chore: updated changelog
gabbopalma Jan 7, 2026
89dc6e6
fix: update attribution text for various layers to include copyright …
gabbopalma Jan 7, 2026
c78a5be
fix: update attribution text in various layers to use copyright symbol
gabbopalma Jan 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: 'Dependency Review'
uses: actions/dependency-review-action@v4
10 changes: 5 additions & 5 deletions .github/workflows/flutter_beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
java-version: '17'
Expand All @@ -29,7 +29,7 @@ jobs:
- name: Build example APK
run: flutter build apk
- name: Upload apk as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: maplibre-flutter-demo.apk
path: maplibre_gl_example/build/app/outputs/flutter-apk/app-release.apk
Expand All @@ -41,7 +41,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: ${{ env.FLUTTER_CHANNEL }}
Expand All @@ -53,7 +53,7 @@ jobs:
- name: Build iOS package
run: flutter build ios --simulator
- name: Upload Runner.app as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: maplibre-flutter-demo.app
path: maplibre_gl_example/build/ios/iphonesimulator
Expand All @@ -65,7 +65,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: ${{ env.FLUTTER_CHANNEL }}
Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/flutter_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
name: "Check formatting"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -27,7 +27,7 @@ jobs:
name: "Static code analysis"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -42,7 +42,7 @@ jobs:
name: "Run tests"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -56,7 +56,7 @@ jobs:
name: "Run web tests"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -70,7 +70,7 @@ jobs:
name: "Generate code from templates"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -90,7 +90,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -106,7 +106,7 @@ jobs:
- name: Build example APK
run: flutter build apk
- name: Upload apk as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: maplibre-flutter-demo.apk
path: maplibre_gl_example/build/app/outputs/flutter-apk/app-release.apk
Expand All @@ -118,7 +118,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand All @@ -132,7 +132,7 @@ jobs:
- name: Build iOS package
run: flutter build ios --simulator
- name: Upload Runner.app as artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: maplibre-flutter-demo.app
path: maplibre_gl_example/build/ios/iphonesimulator
Expand All @@ -144,7 +144,7 @@ jobs:
run:
working-directory: maplibre_gl_example
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: subosito/flutter-action@v2
with:
channel: stable
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-single.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
if: github.repository_owner == 'maplibre'
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: dart-lang/setup-dart@v1
# --force skips the y/N confirmation
# --skip-validation because of "Because maplibre_gl requires the Flutter SDK, version solving failed. Flutter users should use `flutter pub` instead of `dart pub`."
Expand Down
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,57 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [1.0.0](https://github.com/maplibre/flutter-maplibre-gl/compare/v0.24.1...v1.0.0) - 2026-01-06

πŸŽ‰ **First stable release!** This major version marks the maturity and stability of the Flutter MapLibre GL package. We now follow standard semantic versioning.

### Added
* Logo customization options including visibility and position settings (#b4fb174).
* Explicit annotation manager initialization with clear error handling (#668).
* Web: Implemented `getStyle()` to return map style as JSON string.
* Web: Implemented `getSourceIds()` to return list of source IDs.
* Web: Improved `getLayers()` with safe null handling.

### Changed
* **BREAKING**: Web implementation migrated from deprecated `dart:js_util` to modern `dart:js_interop` API (#687).
- **WASM compatible**: Now supports Flutter's upcoming WASM compilation target
- Required for Flutter 3.38.4+ compatibility
- All JS interop classes updated to `@staticInterop` pattern with extension methods
- Improved type safety for JS ↔ Dart conversions
- No public API changes for users
* MapLibre Android SDK upgraded from `11.13.5` to `12.3.0` (#690).
- Includes synchronous GeoJSON source updates
- Support for MLT-format vector tile sources
- Better frustum offset support
- See [MapLibre Native Android 12.3.0 release notes](https://github.com/maplibre/maplibre-native/releases/tag/android-v12.3.0)
* OkHttp updated from `4.12.0` to `5.3.2` for Node.js 24 compatibility (#676, #700).
* Kotlin updated to `2.3.0` (#697, #698).
* Android Gradle Plugin updated to `8.13.2` (#695, #674).
* Android Application Plugin updated to `8.13.2` (#696, #689).
* GitHub Actions: `actions/checkout` updated from v5 to v6 (#672, #693).
* GitHub Actions: `actions/upload-artifact` updated from v4 to v6 (#688, #694).

### Fixed
* Min/max zoom preference on iOS (#5230fab).
* `queryRenderedFeatures` now returns all targets when supplying empty layers list on iOS, aligning behavior with Android (#680).
* Web: Fixed `setPaintProperty` and `setLayoutProperty` to handle nullable `JSAny` values correctly (#12dfad2).
* Web: Improved `jsify` function to create JS arrays correctly (#2b550ed).
* Fixed `lineDasharray` and patterns reset to null in layer properties (#2b550ed).
* Improved MapLibreMapController disposing to prevent memory leaks (#2b550ed).
* Fixed `setLayerProperties` and pattern images on web and Android (#9ce52a6).
- Pattern images now correctly converted to RGBA format on web
- Fixed mismatched image size error when loading pattern images

### Refactor
* Complete refactor of example app with new UI and improved user experience (#ac877a4).
- Improved map sizing with responsive layouts (50-60% of screen height)
- Better button and control layouts across different screen sizes
- Enhanced visual design and usability
* Refactored `cameraTargetBounds` implementation on Android and iOS for consistent behavior (#8bcd74a).
* Refactored image upload on web - all images now converted to RGBA format for consistency (#9ce52a6).

**Full Changelog**: [v0.24.1...v1.0.0](https://github.com/maplibre/flutter-maplibre-gl/compare/v0.24.1...v1.0.0)

## [0.24.1](https://github.com/maplibre/flutter-maplibre-gl/compare/v0.24.0...v0.24.1)

### Fixed
Expand Down
7 changes: 5 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,15 @@ Found a vulnerability or sensitive exposure vector?
## Release process (Maintainers)
A high-level outline (subject to change):
1. Ensure `main` (or release branch) is green (CI, tests, analyzer).
2. Update package versions & root/individual `CHANGELOG.md` sections.
2. Update package versions & root/individual `CHANGELOG.md` sections following [Semantic Versioning 2.0.0](https://semver.org/):
- **MAJOR** version for incompatible API changes
- **MINOR** version for new backward-compatible functionality
- **PATCH** version for backward-compatible bug fixes
3. Tag the release (`vX.Y.Z`) and publish packages to pub.dev in dependency order.
4. Merge back any release branch into `main`.
5. Announce in discussions (optional).

For more information, see [RELEASE](RELEASE.md) instructions.
For more information, see [RELEASE.md](RELEASE.md) instructions.

## Community epectations
Be respectful and constructive. We follow the project's `CODE_OF_CONDUCT.md`. Harassment, discrimination, or unprofessional behavior is not tolerated.
Expand Down
93 changes: 61 additions & 32 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,42 @@ All packages share the same version number. A release = bump versions + update c

## Versioning Policy

Format: `MAJOR.MINOR.PATCH` (currently MAJOR fixed at 0 until 1.0.0).
Format: `MAJOR.MINOR.PATCH` following [Semantic Versioning 2.0.0](https://semver.org/).

As of v1.0.0, this project follows **standard semantic versioning**:

| Change Type | Bump | Effect | Example (old β†’ new) | Notes |
|-------------|------|--------|---------------------|-------|
| Breaking / significant feature | MINOR (2nd) & reset PATCH | Public API or behavior change (may be breaking pre‑1.0) | 0.23.4 β†’ 0.24.0 | Mark **BREAKING** in changelog if present |
| Compatible feature / enhancement | MINOR (2nd) & reset PATCH | Adds capability, no removal | 0.24.1 β†’ 0.25.0 | Combine small features where possible |
| Bug fix / doc / internal only | PATCH (3rd) | No API change | 0.24.0 β†’ 0.24.1 | Batch multiple fixes if close in time |
| Breaking change | MAJOR (1st) | Incompatible API changes | 1.2.3 β†’ 2.0.0 | Mark **BREAKING** in changelog with migration guide |
| New feature / enhancement | MINOR (2nd) & reset PATCH | Adds functionality in a backward-compatible manner | 1.2.3 β†’ 1.3.0 | Combine related features where possible |
| Bug fix / doc / internal only | PATCH (3rd) | Backward-compatible bug fixes | 1.2.3 β†’ 1.2.4 | Batch multiple fixes if close in time |

Rules:
1. Pre‑1.0 any incompatible change still uses a MINOR bump (second segment).
2. Always reset PATCH to 0 when you bump MINOR.
3. Avoid publishing multiple PATCH releases within minutesβ€”group fixes.
4. No build metadata (`+...`) for normal releases.
1. **MAJOR version** (X.y.z) increments for incompatible API changes.
2. **MINOR version** (x.Y.z) increments for new backward-compatible functionality (reset PATCH to 0).
3. **PATCH version** (x.y.Z) increments for backward-compatible bug fixes.
4. Avoid publishing multiple PATCH releases within minutesβ€”group fixes.
5. No build metadata (`+...`) for normal releases.

Changelog tags:
- Use headings: Added / Changed / Fixed / Removed / **BREAKING**.
- Provide a one‑line migration hint for each breaking change.

Tag format: `v0.X.Y` (e.g. `v0.24.0`).
- Use headings: Added / Changed / Fixed / Removed / Deprecated / Security / **BREAKING**.
- Provide migration hints for each breaking change.

After 1.0.0 the table semantics align with standard SemVer (MINOR no longer contains breaking changes; those move to MAJOR).
Tag format: `vX.Y.Z` (e.g. `v1.0.0`, `v1.2.3`).

### Examples (Pre-1.0)
### Examples (Post-1.0)
| Scenario | Old | New | Notes |
|----------|-----|-----|-------|
| Add new public controller API | 0.23.1 | 0.24.0 | MINOR bump (document new API) |
| Fix crash in symbol update logic | 0.24.0 | 0.24.1 | PATCH fix |
| Introduce breaking rename of parameter | 0.24.1 | 0.25.0 | MINOR bump (flag **BREAKING**) |
| Documentation typo only (optional) | 0.25.0 | 0.25.1 | Only if you want it on pub.dev |
| Remove deprecated API or change signature | 1.2.3 | 2.0.0 | MAJOR bump (breaking change) |
| Add new public controller method | 1.2.3 | 1.3.0 | MINOR bump (backward-compatible feature) |
| Fix crash in symbol update logic | 1.2.3 | 1.2.4 | PATCH fix |
| Documentation typo only | 1.2.3 | 1.2.4 | PATCH (or skip if trivial) |

### Deciding the bump
1. Is the change user-visible (new feature or breaking)? -> bump MINOR, reset PATCH to 0.
2. Pure bug fix with no API surface change? -> bump PATCH.
3. Multiple fixes queued? Prefer batching into one PATCH rather than multiple rapid releases.
1. Does it break existing code or change behavior? -> bump MAJOR.
2. Does it add new functionality without breaking changes? -> bump MINOR, reset PATCH to 0.
3. Is it a pure bug fix with no API surface change? -> bump PATCH.
4. Multiple fixes queued? Prefer batching into one PATCH rather than multiple rapid releases.

---
## Pre‑Release Checklist
Expand Down Expand Up @@ -74,19 +76,22 @@ Edit `pubspec.yaml` in each package:
Ensure internal dependencies point to the new version (same number across all three). Example snippet:
```yaml
dependencies:
maplibre_gl_platform_interface: ^0.23.0
maplibre_gl_platform_interface: ^1.0.0
```

## Update the Changelog
In root `CHANGELOG.md`:
1. Move items from `Unreleased` (if present) under a new heading: `## 0.23.0 - YYYY-MM-DD`.
1. Move items from `Unreleased` (if present) under a new heading: `## [X.Y.Z] - YYYY-MM-DD`.
2. Group by sections (Suggested):
- Added
- Changed
- Fixed
- Removed / Deprecated
- Security
- **BREAKING** (for major versions)
- Internal (optional)
3. Ensure breaking changes are clearly marked with **BREAKING** and (if needed) short migration hints.
3. For **MAJOR** version bumps, ensure breaking changes are clearly marked with **BREAKING** and include migration guides.
4. Link to full changelog comparison: `[vX.Y.Z...vA.B.C]`

Sub-package changelogs may link to root; keep duplication minimal.

Expand Down Expand Up @@ -116,8 +121,8 @@ After the release PR has been merged, create & push the version tag (format `vX.
```bash
git checkout main
git pull origin main
git tag v0.23.0
git push origin v0.23.0
git tag v1.2.3
git push origin v1.2.3
```
No further manual publish commands are required unless the pipeline fails. In that case, resolve the issue and re-push (delete & recreate tag only if absolutely necessary and before broad adoption).

Expand All @@ -140,15 +145,39 @@ If a critical issue is discovered shortly after release:
- If native SDK version bumps are included, link upstream release notes in the PR description.
- Run `flutter clean` in example only if weird build artifacts appear (avoid unnecessary noise in instructions).

## Example Flow (Patch Fix)
```
## Example Flows

### Patch Fix (Bug Fix)
```bash
# After merging a simple fix
# decide version 0.23.1
edit pubspecs -> 0.23.1
# decide version 1.2.4 (was 1.2.3)
edit pubspecs -> 1.2.4
update CHANGELOG
commit & PR -> chore: release 1.2.4
merge
git tag v1.2.4 && git push origin v1.2.4
```

### Minor Release (New Feature)
```bash
# After merging a new backward-compatible feature
# decide version 1.3.0 (was 1.2.3)
edit pubspecs -> 1.3.0
update CHANGELOG
commit & PR -> chore: release 0.23.1
commit & PR -> chore: release 1.3.0
merge
git tag v1.3.0 && git push origin v1.3.0
```

### Major Release (Breaking Change)
```bash
# After merging breaking API changes
# decide version 2.0.0 (was 1.2.3)
edit pubspecs -> 2.0.0
update CHANGELOG with BREAKING section and migration guide
commit & PR -> chore: release 2.0.0
merge
git tag v0.23.1 && push tag
git tag v2.0.0 && git push origin v2.0.0
```

---
Expand Down
Loading