Skip to content
Shiny.NET

Xamarin Plugins to .NET MAUI

Most Xamarin.Forms apps lean on a dozen or more plugins. Moving to .NET MAUI is mostly about finding where each of them went. Some are now part of MAUI itself, some have a MAUI release of their own, and the ones that ran work in the background (BLE, GPS, geofencing, jobs, push, transfers) are the ones most worth replacing rather than porting.

This page maps the common ones. Use it as a checklist: go through your .csproj PackageReferences and find each one below.

These need no package at all. The APIs live in Microsoft.Maui.* and ship with the MAUI workload.

Xamarin package On .NET MAUI
Xamarin.Essentials Built in (Microsoft.Maui.Devices, Microsoft.Maui.Storage, Microsoft.Maui.Networking, …)
Plugin.Connectivity Connectivity (built in)
Plugin.Permissions Permissions (built in). Shiny libraries request their own permissions.
Plugin.Media MediaPicker (built in)
Plugin.FilePicker FilePicker (built in)
Plugin.Settings Preferences / SecureStorage (built in), or Shiny Stores for strongly-typed, bindable settings
Plugin.TextToSpeech TextToSpeech (built in), or Shiny Speech for speech-to-text and cloud voices
Xamarin.Forms.Maps Microsoft.Maui.Controls.Maps
Xamarin.CommunityToolkit CommunityToolkit.Maui
SkiaSharp.Views.Forms SkiaSharp.Views.Maui.Controls

These are the plugins that touched the OS beneath the app. Shiny’s libraries do the same jobs on MAUI and keep working in the background, which is usually what the Xamarin plugin couldn’t do reliably.

Xamarin package On .NET MAUI Why switch
Acr.BluetoothLE Shiny.BluetoothLE Shiny.BluetoothLE is what Acr.BluetoothLE became: same author, with background scanning and connections, reconnect handling and managed peripherals
BLE peripheral/GATT server code (hand-rolled) Shiny.BluetoothLE.Hosting Advertising and GATT services from the phone, without platform code
Plugin.Geolocator Shiny.Gps MAUI’s Geolocation covers one-off foreground fixes; Shiny covers continuous and background tracking
Geofencing (hand-rolled, or Plugin.Geofencing) Shiny.Geofencing OS-managed geofences that fire with the app closed
Plugin.FirebasePushNotification / Plugin.PushNotification Shiny.Push Native APNs and Firebase, or Azure Notification Hubs, behind one API
Background jobs (Matcha.BackgroundService, hand-rolled WorkManager / BGTaskScheduler) Shiny.Jobs Runs on the OS schedulers on iOS and Android
Background downloads/uploads (hand-rolled NSURLSession / DownloadManager) Shiny.Net.Http Transfers that survive the app being suspended or killed
iBeacon code Shiny.Beacons Ranging and background monitoring
Plugin.InAppBilling Shiny.Mobile.InAppPurchases Store purchases with server-side verification
Plugin.Contacts Shiny.Contacts Read and write device contacts with a query builder
Plugin.Calendars Shiny.Calendar Device calendar and event CRUD
Offline data + sync (hand-rolled, or Azure Mobile Apps offline sync) Shiny.Data.Sync Background-capable bidirectional sync over HTTP

If the app already used Shiny 1.x or 2.x on Xamarin, most of the API carries over. The main changes:

  • Startup. The Xamarin ShinyStartup class and the per-platform ShinyHost.Init calls are gone. Add UseShiny() to MauiProgram.cs and register services on builder.Services. See MAUI hosting.
  • Locations split in two. GPS and geofencing are separate packages: Shiny.Gps and Shiny.Geofencing.
  • Platform boilerplate is gone. UseShiny() wires the Android lifecycle callbacks and iOS app delegate methods that used to be pasted into MainActivity and AppDelegate.

The v3 announcement covers what changed between the Xamarin and MAUI generations in more detail.

  1. List every package. dotnet list package on each project, including the platform heads. The platform projects are where forgotten plugins hide.
  2. Sort them into the three groups above. Built-in ones are a rename; the background ones are the real work; anything left over needs a check for a MAUI release, or a replacement.
  3. Check custom renderers. Xamarin.Forms renderers become MAUI handlers. Effects and renderers are usually the second-largest piece of work after background features.
  4. Test on real devices, early. Background behaviour on a simulator tells you very little. Test on the oldest OS version you support and on at least one aggressive Android OEM.

ShinySoft maintains Shiny and does Xamarin → MAUI migrations for a living. If yours has stalled on background BLE, location or sync, see Commercial Support.