Skip to content
Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Power up!

Contact Store Releases

BREAKING Feature
Shiny.Maui.ContactStore is now Shiny.Contacts
BREAKING Feature
Contacts now has a dependency on Shiny.Core which allows it to work without MAUI
Feature
Shiny.Contacts.Extensions.AI — new package exposing IContactStore as Microsoft.Extensions.AI tool functions for LLM agents. Opt-in read/write allow-list via AddContactsAITools(b => b.AddContacts(ContactAICapabilities.ReadWrite)); generates search_contacts, get_contact, create_contact, update_contact, and delete_contact. AOT-compatible. See AI Tools.
Fix
Bulk reads no longer load full-resolution photosGetAll() and Query() now populate only Thumbnail; decoding every contact’s full Photo into memory at once could OOM/jetsam-kill the app on a real device with many photo contacts. The full Photo is still available per-contact via GetById(). See Photos vs Thumbnails.
Feature
IContactStore interface — full CRUD operations for device contacts: GetAll, GetById, Create, Update, Delete
Feature
LINQ query supportIQueryable<Contact> with native translation for Contains, StartsWith, EndsWith, Equals on name, phone, and email fields
Feature
MAUI permissionsContactPermission class wrapping both READ_CONTACTS and WRITE_CONTACTS with Granted, Limited, and Denied states on Android
Feature
Permission extensionsRequestPermissionsAsync() and CheckPermissionStatusAsync() extension methods on IContactStore
Feature Android
PermissionStatus.Limited — returned when only one of read/write is granted, enabling read-only or write-only scenarios
Feature
GetFamilyNameFirstLetters — extension method returning sorted, distinct first letters of family names for alphabetical index UIs
Feature
Comprehensive contact model — phones, emails, addresses, dates, relationships, websites, organization, photos, and thumbnails
Feature iOS
Notes entitlement auto-detection — gracefully handles missing com.apple.developer.contacts.notes entitlement at runtime
Feature
DI registrationbuilder.Services.AddContactStore() registers IContactStore as singleton
Feature
AOT and trimmer compatibleIsAotCompatible and EnableTrimAnalyzer enabled