Four Office editors, a free-form notebook, ribbons on everything, Find across all of them, presenting mode for decks, and a camera you call instead of a screen you build. All of it in the box, on .NET MAUI and Blazor, no WebViews.
Somebody is waiting on bytes that were supposed to have arrived. Usually nothing was carrying them — HttpClient stops the second iOS suspends your app, and Android will reclaim the process while you are not looking. Shiny.Net.Http hands the bytes to the platform instead — NSURLSession, a foreground service, a connectivity-driven managed loop, Service Worker Background Sync — under one API. Plus why I sign Azure Blob and S3 uploads by hand instead of taking the vendor SDKs, what the Android service does when the network drops, and why a Live Activity has to animate a time range instead of a percentage.
DocumentDb runs on ten-odd backends, but picking one used to be a line of C# inside your service. The Aspire integration moves that decision into the AppHost — the consuming code becomes one provider-agnostic line with health checks and OpenTelemetry attached, the admin UI becomes a resource, and an entire Orleans silo points at the same store.
Membership, grain storage, reminders, grain directory and streams are five separate provider contracts. Shiny.DocumentDb.Orleans implements all five on one IDocumentStore — one connection string, grain state you can query without waking a grain, and a stream backlog you can actually open and look at.
A seekable keyframe engine for .NET MAUI with CSS @keyframes semantics in XAML, 42 motion icons compiled from one spec into a drawn scene on MAUI and real CSS keyframes on Blazor, and a ShinyButton that finally makes press-wait-see-if-it-worked a one-liner.
Sixty-odd controls, one token contract, two renderers, zero WebViews. Shiny Controls hits 1.0 for .NET MAUI and Blazor — and there is a live playground you can click through before you install anything.
Thirteen major versions in, there's a lot of DocumentDb that shipped in a bullet list and never got explained. A store that diffs documents for you, a read path that never deserializes, and an extensibility surface that soft delete is entirely built out of.
v13 puts AES-256-GCM field encryption in the core package, adds a transactional outbox that commits with the write that caused it, and gives a document type a front door — REST + Server-Sent Events, and an MCP server. Plus Orleans streams on the database you already have, and admin tools that read an encrypted store without a key.
Ten new packages: a dependency-light, AOT/trim-clean HTTP/1.1, HTTP/2 and HTTP/3 server that runs anywhere .NET runs — including inside a .NET MAUI app on iOS and Android. Routing, middleware, DI scopes, WebSockets, SSE, TLS with managed self-signed certs, an OpenAPI document built with zero reflection, source-generated typed endpoints, XML/MessagePack/protobuf without reflection, gRPC and gRPC-Web, a WebDAV mount, mediator handlers and DocumentDb documents as endpoints, tunnelling so a phone is reachable from the internet, and an MCP server you can point Claude at.
A shower thought about writing SwiftUI from C# turned into a Kotlin shim for Jetpack Compose, and then into the realization that the shim was never the point. One C# view tree, a diff engine, and a patch protocol — now rendering as real SwiftUI, real Compose, real GTK4, real WinUI, real DOM, a from-scratch SkiaSharp toolkit that paints the whole thing itself, and — as of today — characters in a terminal, images and all. Plus 28 real controls built on it, what writing your own looks like on each backend, and an honest accounting of how far the Skia renderers still have to go. Think .NET Comet, but without the MAUI underneath it.
v12 ships an admin UI for your document stores, schema-free JSON collections with no CLR type at all, interceptors that can replace a write, soft delete in the box, a fully trim/AOT-clean package set, and a provider consolidation that deleted 4,300 lines and found four real bugs on its way out.
A MAUI UI July post: two drop-in MAUI controls — FaceRecognitionView and FaceEnrollmentView — that put live face recognition and a guided enrollment wizard on screen in one line of XAML, plus the CameraView frame analyzer, a GraphicsView overlay with an even-odd scrim, speaker recognition, and Shiny.DocumentDb + sqlite-vec as the on-device vector database.