bash — the-runtime

user@runtime:~/blog$ cat welcome.md

# The Runtime

Exploring technology from a .NET perspective

user@runtime:~/blog$

user@runtime:~/blog$ ls -la posts/ --sort=date
signalr 2026-09-15 8m

SignalR Authentication Refresh in .NET 11: No More Forced Reconnects on Token Expiry

.NET 11 lets SignalR clients swap in a fresh access token on a live connection instead of forcing a reconnect when the old one expires. Here's how to configure it on the server and client, and where the guardrails are.

csharp 2026-07-22 8m

Extension Indexers in C# 15: Finally, this[] on Types You Don't Own

C# 15 rounds out extension members with indexers, letting you add this[] syntax to types you can't modify. Here's how the syntax works, how resolution is prioritised against real indexers, and where the preview feature still bites.

security 2026-07-15 11m

ASP.NET Core Ditches CSRF Tokens for Fetch Metadata in .NET 11

.NET 11 introduces an automatic CSRF protection middleware that uses browser Fetch Metadata headers instead of tokens. It's on by default, requires no code changes, and fundamentally changes how cross-site request forgery is handled in ASP.NET Core.

tooling 2026-07-14 10m

ReSharper 2026.2 Brings Debugging to VS Code, Cursor, and Every Editor Microsoft Locked Out

ReSharper 2026.2 ships the most requested feature for its VS Code extension: a full debugger built on the Rider engine. With Microsoft's C# Dev Kit banned from Cursor and other editors, JetBrains now offers the only complete .NET development experience outside Visual Studio and Rider.

dotnet 2026-07-13 11m

The MSBuild Binlog MCP Server Turns Your AI Assistant into a Build Detective

Microsoft's Binlog MCP Server exposes 38 tools that let AI assistants query MSBuild binary logs directly, turning cryptic build failures and performance bottlenecks into natural-language conversations.

dotnet-11 2026-07-12 10m

LINQ Finally Gets FullJoin and Tuple-Returning Overloads in .NET 11

.NET 11 adds Enumerable.FullJoin for full outer joins and tuple-returning overloads for Join, GroupJoin, LeftJoin, and RightJoin, eliminating the result selector boilerplate that has plagued LINQ joins since 2007.

csharp 2026-07-11 10m

Closed Class Hierarchies in C# 15: Exhaustive Matching Comes to Inheritance

C# 15 introduces the closed modifier for class hierarchies, restricting derivation to the declaring assembly and enabling exhaustive switch expressions without a default arm. Here is how it works, how it differs from unions and sealed classes, and where it fits in domain modelling.

dotnet 2026-07-10 10m

dotnetup: The .NET SDK Version Manager That Should Have Existed Years Ago

Microsoft is building dotnetup, an official cross-platform .NET SDK and runtime version manager inspired by rustup. Here's what it does, how it works with global.json, and why it matters for teams and CI pipelines.

dotnet 2026-07-07 10m

SkiaSharp 4.0 Reaches Stable with 24% Faster GPU Rendering and Animated WebP Support

SkiaSharp 4.148.0 is the first production-ready v4 release, delivering up to 24% faster GPU rendering, animated WebP encoding via SKWebpEncoder, a legacy-free API surface, and critical lifecycle fixes. Here is what changed since Preview 1 and how to migrate.

blazor 2026-06-16 9m

Blazor SSR Finally Gets Client-Side Validation in .NET 11

With .NET 11 Preview 5, Blazor SSR forms gain automatic client-side validation and a new async validation pipeline, closing the biggest gap between static rendering and interactive modes.

aspire 2026-06-03 9m

Aspire 13.4: TypeScript AppHost Goes GA, Plus Go, Bun, and Blazor WASM Integrations

Aspire 13.4 lands at Build 2026 with TypeScript AppHost graduating to general availability, new hosting integrations for Go, Bun, and Blazor WebAssembly, process-backed resource commands, persistent resource lifetimes, and a stack of Kubernetes deployment improvements.

dotnet-maui 2026-05-25 9m

.NET MAUI Moves to CoreCLR: The End of the Mono Split

.NET 11 Preview 4 makes CoreCLR the default runtime for MAUI on Android, iOS, and Mac Catalyst, ending the long-standing Mono/CoreCLR split and bringing tiered JIT, PGO, full diagnostics, and a path to NativeAOT on mobile.

csharp 2026-05-25 12m

C# Is Redesigning unsafe: What Safety Contracts Mean for Your Code

C# is overhauling the unsafe keyword from a syntax gate into a formal safety contract system with propagation, suppression boundaries, and documentation requirements. Here is what changes, how it compares to Rust, and what you need to do to prepare.

dotnet 2026-05-14 11m

Foundry Local 1.1: Running AI Models on Device in Any .NET Application

Foundry Local lets you ship AI-powered .NET applications that run entirely on the user's device — no cloud, no per-token costs, no network latency. Version 1.1 adds text embeddings, live audio transcription, and broadens .NET compatibility all the way back to .NET Framework 4.6.1.

aspnet-core 2026-05-13 11m

HTTP QUERY: The New Method That Fixes What GET and POST Got Wrong

.NET 11 Preview 4 adds first-class support for the HTTP QUERY method -- a safe, idempotent verb that accepts request bodies. Here is how it works in ASP.NET Core, why it matters for API design, and where the ecosystem stands today.

performance 2026-05-12 12m

Escape Analysis in .NET 10: How the JIT Eliminates Heap Allocations Automatically

The .NET 10 JIT compiler can now prove that many objects never leave their parent method and allocate them on the stack instead of the heap, eliminating GC pressure without any code changes.

blazor 2026-05-11 11m

[PersistentState] in .NET 10: Blazor Finally Solves the Prerendering State Problem

.NET 10 introduces the [PersistentState] attribute, replacing dozens of lines of manual serialisation boilerplate with a single attribute. It also extends state persistence to services, enhanced navigation, and circuit reconnection.

dotnet-10 2026-05-10 9m

WebSocketStream in .NET 10: Treating WebSockets Like Any Other Stream

The new WebSocketStream class in .NET 10 wraps a WebSocket in a standard System.IO.Stream, eliminating the frame-management boilerplate that has plagued WebSocket code for years and unlocking the entire stream ecosystem for WebSocket transports.

aspire 2026-05-09 9m

Aspire 13.3: Kubernetes Deployment with Helm, Browser Telemetry, and a CLI That Cleans Up After Itself

Aspire 13.3 ships native Kubernetes deployment via Helm, browser telemetry streaming, three JavaScript publishing models, and an aspire destroy command that tears down what aspire deploy created. Here is what changed and why it matters.

aspnet-core 2026-05-08 9m

Global Exception Handling in ASP.NET Core with IExceptionHandler

IExceptionHandler gives ASP.NET Core apps a structured, testable, and chainable way to handle exceptions globally — replacing hand-rolled middleware and scattered try-catch blocks with a first-class framework feature.

ai 2026-05-07 10m

Durable Workflows in the Microsoft Agent Framework: From Prototype to Production

The Microsoft Agent Framework can define multi-agent workflows, but they vanish when the process dies. The Durable Task extension fixes that, taking your workflows from in-memory prototypes to fault-tolerant, scalable Azure Functions deployments without changing your workflow code.

visual-studio 2026-05-06 10m

GitHub Copilot Testing for .NET: AI-Powered Unit Tests That Actually Build and Run

Visual Studio 2026 ships a purpose-built @Test agent that generates, builds, runs, and self-heals C# unit tests across your entire solution. Here is how the workflow operates, what it does well, and where you still need to think for yourself.

dotnet 2026-05-05 9m

A2A v1 in .NET: Cross-Platform Agent Communication Without the Glue Code

The A2A protocol gives AI agents a standard way to discover and talk to each other across frameworks, languages, and vendors. With v1 shipping in the Microsoft Agent Framework for .NET, here is how to expose and consume agents over A2A using familiar ASP.NET Core patterns.

caching 2026-05-04 10m

PostgreSQL as a Distributed Cache in .NET: One Database, Two Jobs

Microsoft's new Caching.Postgres package turns your existing PostgreSQL instance into a distributed cache. Combined with HybridCache, it delivers a tiered caching architecture without adding Redis to your infrastructure.

dotnet 2026-05-03 11m

Governing MCP Tool Calls in .NET with the Agent Governance Toolkit

The Agent Governance Toolkit gives .NET developers policy-based control over MCP tool execution, from prompt injection detection to privilege rings. Here is how to lock down your AI agents before they reach production.