Allan's Feed
- The Feedback Service — One Hook to Rule Them All
Allan Ritchie introduces IFeedbackService in Shiny Controls v1.0 — a single injectable service that every interactive control calls for haptic, TTS, sound effects, analytics, or any combination. Implement it once, and every control uses it automatically.
Read more - AI-Powered Navigation in Shiny MAUI Shell — Chat to Navigate, Intent to Form
Allan Ritchie introduces AI-driven navigation for Shiny MAUI Shell, where users type natural language and the app opens the right form with fields pre-filled. The source generator extends existing ShellMap and ShellProperty metadata with intent descriptions, producing just two AI tools that scale to any number of routes.
Read more - DocumentDb AI Tools — Give Your LLM a Database
Allan Ritchie introduces Shiny.DocumentDb.Extensions.AI, which generates Microsoft.Extensions.AI tool functions from your registered document types. Each type can expose up to seven operations — get, query, count, aggregate, insert, update, and delete — with full control over capabilities and field visibility.
Read more - One Contract, Three Transports — Mediator AI Tooling
Allan Ritchie shows how Shiny Mediator 6.3 turns any mediator contract with a [Description] attribute into a fully typed AI tool — with zero adapter code. The same contract can simultaneously serve as an AI tool, a typed HTTP client, and a REST endpoint.
Read more - Turn Any Interface Into an AI Tool — Shiny DI 3.0
Allan Ritchie adds AI tool generation to the Shiny DI source generator. Mark a service interface with [Tool], add [Description] to methods and parameters, and the generator produces fully typed AIFunction subclasses — AOT-safe, with automatic argument extraction and DI registration.
Read more - UI Automated Testing for .NET MAUI with MauiDevFlow — And How AI Wrote the Tests
Allan Ritchie demonstrates how MauiDevFlow enables lightweight UI testing for .NET MAUI without Appium or WebDriver. He walks through building a full suite of 48 UI tests for a real app — with AutomationIds, a custom driver, and AI-generated test code.
Read more - Shiny Client v4 - Windows Support, .NET 10, and a Ton of Improvements
Allan Ritchie announces Shiny Client v4, a major release that brings Windows support for BluetoothLE, BLE Hosting, HTTP Transfers, and Locations. The release also moves to .NET 10 and includes significant fixes across locations, HTTP transfers, push notifications, and BLE modules.
Read more - Shiny.DocumentDb v3 — One API, Four Databases
Allan Ritchie announces Shiny.DocumentDb v3, expanding the schema-free document store from SQLite-only to support MySQL, SQL Server, and PostgreSQL through a provider abstraction. Same fluent query API, same LINQ expressions, same AOT support — different backend.
Read more - Shiny.Maui.ContactStore — Device Contact Access That Does It All
Allan Ritchie introduces Shiny.Maui.ContactStore, a library that provides full CRUD contact management with LINQ queries that translate to native platform operations. It goes beyond what MAUI Essentials offers, with one unified API for both Android and iOS.
Read more - Shiny MAUI Shell — A Library That Takes Shell to the Next Level
Allan Ritchie introduces Shiny MAUI Shell, a library that wraps standard MAUI Shell with source-generated type-safe navigation, ViewModel lifecycle management, testable services, and zero boilerplate wiring. It replaces string-based routes and Shell.Current with compile-time validated, injectable navigation.
Read more - Shiny.SqliteDocumentDb v2.0.0 — Table-Per-Type, Custom Ids, Diffing, and Batch Insert
Allan Ritchie releases Shiny.SqliteDocumentDb v2 with table-per-type mapping, custom Id properties, RFC 6902 document diffing, and batch insert with prepared command reuse. The DI extensions have also moved to a separate package for lighter core dependencies.
Read more - BeatTheBank — A .NET MAUI Game
Allan Ritchie shares BeatTheBank, a .NET MAUI game that serves as a showcase for building interactive, real-time applications with .NET MAUI. A fun example of what's possible beyond business apps.
Read more