Skip to content
Shiny.NET
Shiny MAUI Shell v7 - App Links, App Shortcuts, & Navigation Interception!Shortcut me to it

Foundation

Start here. These libraries have no platform code of their own; they are the patterns the rest of Shiny is built on, and most of them are just as useful in a console app or an ASP.NET service as in a phone app.

Core

The host, lifecycle hooks and device monitoring every Shiny module builds on

Get started

Shiny.Core is the package every other Shiny module sits on — you rarely reference it on purpose because Jobs, Locations, BluetoothLE and Push pull it in. It still gives your own code a lot: platform abstractions, lifecycle hooks, startup tasks and device monitoring.

  • Boots a Shiny host with or without .NET MAUI
  • Platform abstractions and lifecycle hooks
  • Startup tasks and device monitoring
  • Shiny's AccessState permission model and Android foreground service helpers

Mediator

A source-generated mediator with middleware for offline, caching, validation and resiliency

Get started

A mediator pattern implementation built for every kind of .NET app — mobile, desktop and server. Source-generated and AOT-ready, with middleware you switch on with a single attribute.

  • Offline support, caching, validation and resiliency middleware — one attribute each
  • HTTP request handlers generated from contracts
  • Expose contracts as AI-callable tools
  • Works with MAUI, Blazor, Uno Platform, ASP.NET Core, Prism and Dapper

Dependency Injection

Attribute-driven service registration, generated at compile time

Get started

Stop wiring up every service by hand. Tag a class with an attribute and a source generator writes the registration — no reflection, no startup scan, fully AOT-compatible.

  • Add an attribute, and the service is registered
  • Categories and configuration-driven registration
  • Generate reflection-free AI tools from service interfaces
  • Every registration generated into one readable file

Reflector

Reflection-style property access without runtime reflection

Get started

Reflection is powerful but slow, and it breaks AOT. Reflector uses source generators to give you the same dynamic property access at compile time — mark a class partial, add an attribute, done.

  • Enumerate, read and write properties with zero reflection
  • Records supported
  • JSON serialization and assembly-info helpers
  • Trimming and Native AOT safe

Serialization

Every JsonSerializerContext in your app behind one AOT-safe ISerializer

Get started

Centralize every JsonSerializerContext behind a single ISerializer. Contexts auto-register, and element types opt into collection support, so lists and arrays round-trip without reflection.

  • [ShinyJsonContext] auto-registers a context
  • [ShinyJsonInclude] makes List<T>, T[] and friends round-trip
  • Compose inline JsonConverter<T>s
  • DI and static usage patterns, with diagnostics

Localization Generator

Strongly-typed classes generated from your .resx files

Get started

Microsoft.Extensions.Localization has great abstractions but loses the strong typing .resx files used to give you. This generator brings it back — a typed class per resource file, with compile-time safety and IntelliSense.

  • No more typo-prone string lookups
  • Compile-time safety and IntelliSense for every key
  • Built on Microsoft.Extensions.Localization
  • Namespaces follow your directory structure