What's Changed
This release adds roles and permissions. Every account is now either the owner or has exactly one role, and you can edit the built-in User and Administrator roles or create your own under Settings → Roles, down to who can see or edit other people's flights. Existing accounts are migrated automatically: the owner stays the owner, admins become Administrator and everyone else becomes User. See Roles and Permissions.
AirTrail now has a versioned REST API at /api/v1 and a remote MCP server, so scripts and AI assistants can read and manage your flights. API keys and connected apps live under Settings → Security and carry scopes, so a key can be limited to less than your own role allows. Existing API keys keep full access, and the old /api/flight/* endpoints still work but are deprecated in favor of /api/v1. See Getting started with the API.
The basemap provider is now configurable under Settings → Appearance → Basemap Provider, with OpenFreeMap, CARTO, Protomaps or your own MapLibre style. OpenFreeMap is the new default and needs no key, so installs that never chose a provider will switch from the previous CARTO map to OpenFreeMap. CARTO now requires an API key. See Basemaps.
The flight list now shows at a glance which flights have a track, recorded times, other passengers or a note, the passenger picker suggests guests you've added before, and flight lookups can use AeroDataBox's direct API instead of RapidAPI. For NAS users, there are now PUID and PGID settings and Unraid templates. To make that work, the container now starts as root, hands the uploads folder to PUID/PGID (1000:1000 by default) and then drops to that user. Nothing changes for Docker Compose, but platforms that refuse to start containers as root, such as Kubernetes with runAsNonRoot, need an explicit user like runAsUser: 1000.
This release also fixes the flight reason dropdown not showing the selected reason, and updates AirTrail's dependencies, including MapLibre 6, which renders right-to-left map labels correctly.
🚀 Features
- feat: configurable basemap providers by @johanohly in #725
- feat: RBAC by @johanohly in #726
- feat: add versioned REST API and MCP server by @johanohly in #737
🌟 Enhancements
- feat: show track, time, passenger and note indicators in the flight list by @Gaudv in #714
- feat: support the direct AeroDataBox API alongside RapidAPI by @mhlas7 in #732
- feat: suggest previously added guests in the passenger picker by @Gaudv in #711
🐛 Bug fixes
- fix: stabilize mobile drawers and dismissal behavior by @johanohly in #723
- fix: stop preference changes resetting other preferences by @johanohly in #738
- fix: allow selecting GPX and KML track files on iOS by @johanohly in #739
- fix: allow typing any day before the month in date fields by @johanohly in #740
📚 Documentation
- fix: restore the broken star history chart by @FaintFlower in #718
New Contributors
- @FaintFlower made their first contribution in #718
Full Changelog: v3.12.0...v3.13.0