Skip to content
Shiny.NET
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

Welcome to Shiny.NET

Shiny.NET

Native .NET,
without the platform code.

Bluetooth LE, OBD‑II, geofencing, background jobs, an HTTP server that runs inside your MAUI app — plus the data layer and 67 UI controls to build around them. One API per problem, on every platform .NET reaches.

Start a projectSponsor
40M+
NuGet downloads
30+
libraries
67
UI controls
AOT
trim-clean

Shipping in production at

SpeedyDockPoolMathMoultrie
Read what their teams say

Libraries

Thirty-plus packages, grouped by the problem they solve. Every one runs on .NET 9 and later, AOT and trimming clean.

Foundation

Start here — the concepts, tooling, and cross-cutting libraries that every Shiny app is built on, whatever it targets.

App Builder — Interactive wizard that generates boilerplate code for your project with the Shiny libraries and configuration you need.

Architecture — Core concepts including services, delegates, and observables that underpin the entire Shiny ecosystem.

Hosting Models — Choose and configure the right hosting model for your app — MAUI, Native, or Manual.

Mediator — A mediator pattern implementation built for all .NET apps — mobile, desktop, and server. Source-generated, AOT-ready, and packed with middleware that lets you add offline support, caching, validation, resiliency, and more with a single attribute. Works seamlessly with MAUI, Blazor, Uno Platform, ASP.NET Core, Prism, and Dapper.  Get Started · Middleware · Extensions

Dependency Injection — Attribute-driven DI registration with source generation. Tag your classes, generate your registrations, done.

Reflector — Source-generated property access that eliminates reflection for AOT-safe, high-performance code.

Serialization — Every JsonSerializerContext in your app behind one AOT-safe ISerializer. Mark a context with [ShinyJsonContext] and it auto-registers; mark an element type with [ShinyJsonInclude] and collections round-trip without reflection.

Localization Generator — Strongly-typed classes generated from your .resx files. No more typo-prone string lookups.

AI Skills — AI coding assistant skills for every Shiny library, compatible with Claude Code and GitHub Copilot.

Get started fast with our templates: NuGet package Shiny.Templates

Hardware & Connectivity

Talk to the radios, sensors and the local network. One API across iOS, Android, Windows, macOS, and beyond.

Bluetooth LE — Full BLE client with scanning, connection management, GATT services, background operations, and best-practice patterns.

BLE Hosting — Advertise your device as a BLE peripheral with custom GATT services.

GPS & Geofencing — Foreground and background location tracking with geofence monitoring.

OBD — On-board diagnostics over Bluetooth LE with extensible command support and custom transports.

Network Discovery — Find things on the local network and advertise your own across mDNS/DNS-SD (Bonjour/Zeroconf), SSDP/UPnP, and WS-Discovery — printers, casting targets, IoT devices, ONVIF cameras, and other instances of your own app.

Wi-Fi — Enumerate and connect to networks, manage known networks, and control the device hotspot.

Screen Recording — Capture the device screen with the platform’s native recorder.

Device Data

The data stores the OS already owns — music, health, contacts and calendars — behind one cross-platform API with permissions handled for you.

Music Library — Query tracks, browse by genre/decade/playlist, and play music from the device library.

Health Data — Unified access to Apple HealthKit and Android Health Connect — 12 metrics including steps, heart rate, blood pressure, sleep, and more.

Contact Store — Cross-platform device contact access with full CRUD, LINQ queries with native translation, and MAUI permission classes.

Calendar Store — Cross-platform device calendar & event access on iOS, Mac Catalyst, macOS, Android, and Windows. Full CRUD on calendars and events, a LINQ IQueryable<CalendarEvent> that pushes the calendar id and date window down to the native fetch, attendees/reminders/availability, and Shiny’s AccessState permissions with iOS 17 write-only support.

AI & Intelligence

Conversation, speech and on-device recognition — the intelligence layer, with the heavy lifting kept off the UI thread.

AI Conversations — A centralized AI conversation service combining Microsoft.Extensions.AI chat completions with speech recognition, text-to-speech, wake word detection, and audio feedback. Text chat, voice chat, and hands-free mode behind a single IAiConversationService interface.

Speech — Speech-to-text, text-to-speech, audio capture, and audio playback with pluggable cloud providers (Azure AI Speech, ElevenLabs).

Face Intelligence — Face enrollment and recognition with ArcFace embeddings and nearest-neighbour vector search. A dependency-free core plus swappable ONNX embedder/detector and vector-store packages, and MAUI controls for live recognition and a guided multi-shot enrollment wizard with quality and novelty gates.

Voice Intelligence — Speaker recognition built on the same architecture: ECAPA/CAM++ voiceprints, cosine-distance matching, and a guided enrollment session that checks every recording for level, clipping, SNR and agreement before it stores anything. Capture stays in your app, so it works with any audio pipeline.

Document Intelligence — The native document scanner (VisionKit, ML Kit, Vision) behind one IDocumentScanner, plus on-device extraction of receipts, invoices, driver’s licenses (AAMVA PDF417), passports (ICAO 9303 MRZ) and payment cards (Luhn-validated, CVV never read, PAN masked in logs).

Background & Delivery

Work that keeps running when your app isn’t on screen — scheduled jobs, transfers, and the notifications that bring users back.

Background Jobs — Periodic and one-shot background tasks that survive app restarts, with platform-aware scheduling and battery optimization.

HTTP Transfers — Resumable background file uploads and downloads with progress monitoring, Azure Blob Storage support, and foreground service integration.

Local Notifications — Rich local notifications with channels, scheduling triggers, and platform-specific customization.

Push Notifications — Native, Firebase, and Azure Notification Hub push providers with a unified delegate model (on-device client; to send from a .NET backend see Push (Server)).

MAUI App

The plumbing that holds a MAUI app together — navigation, hosting, configuration, and permissions.

Shell Navigation — Opinionated Shell navigation with source-generated routes, strongly-typed parameters, and proper ViewModel lifecycle management. No more magic strings or manual wiring.

MAUI Hosting — Modular MAUI app configuration with IMauiModule, static service access, and platform lifecycle dispatch.

Configuration — Platform preference bundles, JSON configuration, and remote configuration for mobile apps.

MSBuild Permissions — Declare permissions once in your project file and let MSBuild generate the right Android manifest and iOS Info.plist entries. No more editing XML by hand.

Already have a project? Try the App Builder to generate everything you need.

UI Controls

Rich, ready-to-use components for .NET MAUI and Blazor — one package per host, zero WebViews, and a shared theme system across both. See all controls →

Flagship   TableView · Scheduler · ChatView · DataGrid · ImageEditor · CameraView

Office   Open, render and edit real .xlsx, .docx and .pptx — a virtualized SkiaSharp surface shared verbatim by both hosts, over a document kernel with a transactional undo stack and a formula engine. Edits are surgical on the OOXML, so an untouched file saves byte-identical. The same kernel drives a OneNote-style free-form Notebook: an unbounded page you write anywhere on and draw over with a pressure-sensitive pen. Spreadsheet · Viewers · Document Editor · Slide Editor · Notebook

Collections & Grids   DataGrid (detail rows, frozen columns, column formatting) · TreeDataGrid · VirtualizedGrid · StaggeredGrid · ParallaxCollectionView · CarouselGallery · Carousel

Layout & Overlays   Stacks & Grid · AppLayout · Flyout · TabbedPage · NavigationPage · Quick Entry · FloatingPanel · Modal · Overlay · Fab & FabMenu · TreeView · FrostedGlassView · Toolbar & TabBar · Sheet View · Expander & Accordion · StateView · Wizard · Timeline · Walkthrough · Tooltip · Ribbon

Input   ShinyButton · TextEntry · AutoCompleteEntry · AddressEntry · CountryPicker · ColorPicker · FontPicker · Slider · RangeSlider · SecurityPin · PasswordStrength · SignaturePad · MediaPickerButton · DurationPicker · Speech Add-ins · Captcha

Display & Media   CameraView (AI document scanner, frame analyzers, effects, face masks) · MediaElement · ShinyImage · ImageViewer · Markdown · Mermaid Diagrams · Barcodes & QR · Keyframe Animation · Motion Icons

Status & Feedback   Toast · Dialogs · ProgressBar · ProgressLine · SkeletonView · Splash Screen · PillView · BadgeView · Feedback Service

Desktop   Tray Icon · Docking · File Drop · On-Screen Keyboard (Blazor; MAUI planned)

System   Theming — the shared token contract, the Basic / Ocean / Material / Terminal / Aurora packs, and the Theme Creator

Data & Storage

Lightweight, AOT-compatible data libraries that run everywhere .NET does — no ORM overhead.

Document DB — Store and query .NET objects as JSON documents with full CRUD, LINQ-style querying, projections, aggregates, composite JSON indexes, transactions, spatial/geo queries, vector / ANN search with auto-embed on insert, temporal / system-time history (point-in-time reads, audit trails, restore, version diffing), Orleans grain persistence (grain storage, reminders, clustering, and grain directory on any backend — query grain state without activating grains), optimistic concurrency, multi-tenancy, global query filters, in-process change monitoring, native database change feeds, and AI tool integration. Full AOT/trimming support. One API across SQLite, SQLCipher, LiteDB, CosmosDB, MongoDB, DuckDB, IndexedDB (Blazor WASM), SQL Server, MySQL, PostgreSQL, and Oracle.

Spatial — A dependency-free spatial database using SQLite R*Tree indexing and custom geometry algorithms. Ship pre-built datasets or build your own geospatial queries.

Data Sync — Bidirectional JSON record sync. A persistent outbox queues Create / Update / Delete operations, an inbox pulls cursor-based deltas, and the engine drains both with platform-tier transports: background NSURLSession on iOS / Mac Catalyst, foreground service + HttpClient on Android, and connectivity-driven HttpClient on Windows / Linux / macOS / Blazor WASM. Includes coalesced batching, tombstones, soft-delete predicates, conflict resolution, exponential-backoff retries, and AOT-safe serialization through Shiny.Json.

Stores — A cross-platform key/value store abstraction for Preferences, Secure Storage, Local/Session Storage, and more.

Server & Cloud

Server-side .NET — an embeddable HTTP stack that runs anywhere .NET runs, backend push dispatch, and first-class .NET Aspire integrations.

HTTP Server — ASP.NET Core is heavyweight and does not run on .NET MAUI. This does — a dependency-light, fully AOT/trim-clean HTTP/1.1, HTTP/2 & HTTP/3 server with routing, middleware, DI scopes, typed endpoints generated at compile time, static files, WebSockets, Server-Sent Events, sessions, OpenAPI, CORS, rate limiting, and IP filtering. Nothing is discovered by reflection, so a route that cannot bind fails your build rather than your deployment.  Get Started · .NET MAUI · Authentication

Tunnelling — Make a server embedded in a phone app reachable from the public internet: SSH remote forwarding and zero-account quick tunnels, or Azure Relay.

Protocol Add-OnsgRPC & gRPC-Web, Model Context Protocol, WebDAV, plus Shiny.Mediator handlers and Shiny.DocumentDb types published as endpoints.

Web Hosting — ASP.NET infrastructure modules for common server-side patterns, and Blazor Hosting for the Blazor equivalent.

Push (Server) — Send push notifications from your backend to APNs (direct .p8/ES256), FCM, and Web Push (VAPID) through one API — structured targeting, topics, interceptors, automatic dead-token pruning, multi-app keyed registration, and metrics + tracing. AOT-safe.

Aspire — Orleans — Simplified Orleans hosting for Aspire with streamlined AppHost configuration, Silo setup, and client wiring. Get a fully orchestrated Orleans cluster running in your Aspire app with minimal code.

Aspire — Gluetun VPN — Model a Gluetun VPN container as a first-class Aspire resource. Route other containers through the VPN tunnel with a single method call, with full Docker Compose publish support.

Aspire — Tunnelling — Give a project or container a public address for webhooks, OAuth redirects and demos. Quick tunnels with no account at all, SSH, the Shiny relay, Azure Relay, Cloudflare and ngrok — with the URL surfaced as a connection string, and SSH forwards to services behind a bastion.

Powered by Microsoft.Extensions.AI

Build AI Into Your Apps

Turn your contracts, services, routes, and data into AI-callable tools — or drop in a complete voice assistant. Source-generated, AOT-safe function calling that works across mobile, desktop, web, and server.

AI ConversationsA complete conversational service — chat, speech-to-text, text-to-speech, and wake word behind one interface. Swap OpenAI, Azure, Ollama, or Copilot freely.ExploreShell NavigationGenerated AITool instances let an AI discover your routes, infer parameters from natural language, and navigate to the right page.ExploreMediatorExpose request and command contracts as AI-callable tools — AIFunction wrappers and JSON schemas generated automatically from your attributes.ExploreDependency InjectionTag a service interface and source-generate fully typed, reflection-free AIFunction tools, all registered with a single call.ExploreDocument DBVector / ANN search across pgvector, SQL Server 2025, Cosmos DiskANN, Mongo Atlas, DuckDB vss, and sqlite-vec — plus LLM-callable tool functions, structured filters, and auto-embed on insert via Microsoft.Extensions.AI.ExploreHealthExpose HealthKit and Health Connect data as AI-callable tools — let an agent read steps, heart rate, sleep, and more, or log workouts and nutrition, with opt-in, read-only-by-default capabilities.ExploreContactsLet an agent search the device address book, look up a contact, and — when you opt-in to write — create, update, or delete contacts. Read-only by default.ExploreCalendarLet an agent list device calendars, search events in a date window, and — with per-operation write opt-in — create, update, or delete events. Read-only by default.ExploreRemindersTurn local notifications into reminder tools — an agent can list pending reminders and, with write opt-in, schedule one-time or daily reminders and cancel them.ExploreLocationGive an agent read-only GPS awareness — where the user is, plus great-circle distance and rough travel-time estimates to any destination.ExploreMusicLet an agent search and browse the device music library, pick a track for a mood, control playback, and manage playlists — with opt-in tool areas and structured JSON results.Explore

AI Coding Assistant Skills

Get contextual code generation and best practices directly in your IDE

Every Shiny library has an AI skill that understands its APIs, patterns, and conventions. These skills work with Claude Code and GitHub Copilot to help you scaffold projects, generate code, and follow best practices.

Browse all AI skills and installation instructions →


67 controls, two hosts, one theme contract

Native .NET MAUI and Blazor components out of the same design system — no WebViews, no per-platform forks.


Trusted In Production

Companies building real products with Shiny.NET

Boat launch scheduling for drystack marinas — iOS, Android and web since 2016

Shiny isn't just a tool for SpeedyDock; it's a cornerstone of our mobile app development.
  • Permissions
  • Local Notifications
  • Geofencing
  • Firebase Push
Read the full story

SpeedyDock is an essential application for drystack marinas, boat clubs, and their clientele, streamlining the process of scheduling and monitoring boat launch requests, reservations, and additional services. It offers a user-friendly alternative to the frequent calls customers used to make, enabling electronic scheduling around the clock. Since its initial release in 2016, SpeedyDock has been accessible across iOS, Android, and web platforms, seamlessly integrating Xamarin and Shiny to manage native functionalities.

A core component of SpeedyDock's efficiency is Shiny. It powers the app's capability to work with permissions requests, local notifications, geofencing, and Firebase push, ensuring customers are consistently informed about their request statuses. For marina operators, these timely notifications are instrumental in enhancing service quality when customers set foot on the premises. Shiny has expertly bridged the gap between iOS and Android, offering a structured way to organize and share code, which, in the absence of such a tool, would be intricate due to variances across platforms and different OS versions. It has streamlined our development process for new features and minimized the edge case bugs typically associated with varying Android versions.

Shiny isn't just a tool for SpeedyDock; it's a cornerstone of our mobile app development. Its integration has empowered us to deliver a top-tier app with a native experience. Looking ahead, we're eager to continue our journey with Shiny, leveraging its capabilities for upcoming projects and refining the SpeedyDock experience. It has undeniably been a key factor in our app's success story.

Travis WolfeCEO, SpeedyDock

Pool care for hundreds of thousands of pool owners

If you're building a .NET MAUI app and you're not using Shiny, you're making your life harder than it needs to be.
  • .NET MAUI
  • iOS
  • Android
Read the full story

PoolMath is the go-to pool care app for hundreds of thousands of pool owners, and Shiny has been a critical part of our stack from the beginning. Running on .NET MAUI across iOS & Android, Shiny handles the native plumbing that would take months to build and maintain on our own. It just works, and it works well.

Beyond PoolMath, I see Shiny's impact across the entire .NET MAUI ecosystem every day in my role at Microsoft. Shiny fills real gaps in the platform — areas where developers would otherwise be writing fragile, platform-specific code. It's become one of those libraries that the community leans on because it solves hard problems cleanly, and it's been instrumental in making .NET MAUI a viable choice for production mobile apps that need serious native integration.

If you're building a .NET MAUI app and you're not using Shiny, you're making your life harder than it needs to be.

Jonathan DickCEO PoolMath · Principal Manager, Microsoft .NET MAUI

Cellular trail cameras, feeders and land management tools

What would have been months of platform-specific work across iOS and Android gets reduced to clean, shared code that we can build on with confidence.
  • Background Ops
  • Device Comms
  • Notifications
Read the full story

At Moultrie, we build mobile apps that connect hunters and landowners to our cellular trail cameras, feeders, and land management tools. Our apps run on .NET MAUI and lean heavily on several Shiny libraries to deliver the kind of native experience our customers expect — reliable background operations, seamless device communication, and responsive notifications even when cellular connectivity is spotty.

Shiny has been instrumental to our product development. What would have been months of platform-specific work across iOS and Android gets reduced to clean, shared code that we can build on with confidence. The breadth of the library suite means we're not stitching together a dozen different packages with different conventions — Shiny gives us a cohesive foundation that covers our needs and lets our team focus on the features that matter to our users.

For any team building production .NET MAUI apps that need to go beyond the basics, Shiny is the library suite you want in your toolbox.

Tommy BaggettPrincipal Software Architect, Moultrie

Using Shiny in production?

We'd love to hear about it. Share your story and have your company logo featured here — it shows the rest of the community what's possible with Shiny.NET.

Tell us about it

The Company Behind Shiny

Modernizing businesses with technology

Shiny.NET isn’t a side project — it’s the open-source foundation of the consulting work we do every day. ShinySoft builds and maintains the entire Shiny suite (40M+ NuGet downloads and counting), which means the same people who ship your product also own the libraries underneath it. Bugs get fixed by the maintainer, not filed into a queue.

Fractional CTOSenior technical leadership — architecture, strategy, roadmaps, and mentoring your team without a full-time hire.
Team AugmentationSenior engineers embedded alongside your team to deliver features and level up the people around them.
Idea to ProductBusiness analysis that turns a concept into a scoped, buildable plan before a line of code is written.
AI ImplementationCapturing data, moving it reliably, storing it in a queryable shape, and integrating models responsibly.
Mobile & Cross-PlatformProduction .NET MAUI, iOS, and Android apps — built on the same Shiny libraries documented here.
IoT & BluetoothDevice fleet management and hardware integration, backed by years of real-world BLE experience.
Fleet & Field OperationsLocation tracking and telematics for teams that work away from a desk.

Behind Shiny

The person who maintains these libraries, and the show he records every week. You always know who is on the other end of an issue.

Allan RitchieAllan RitchieCreator & maintainer of Shiny.NET10× Microsoft MVPOpen Source Maintainer

A software engineer with 25+ years specializing in .NET architecture across cloud, mobile, desktop and web. Building cross-platform .NET libraries since the early Xamarin days — those packages have now been downloaded over 40 million times on NuGet.

25+
years in .NET
10×
Microsoft MVP
40M+
NuGet downloads

Need help integrating Shiny, or consulting support?

New episode every week

Gone .NET

Allan RitchieJon Dick

.NET deep dives, library walkthroughs and community discussions — the two of them working through the same problems these libraries were built to solve.

Watch on YouTube