Build Better Web Apps with Blazor in .NET 10: Complete Feature Guide
Discover Blazor .NET 10's improvements: passwordless authentication support, enhanced diagnostics, performance optimizations, state persistence, and developer-friendly tools for building secure, scalable web applications.

Blazor in .NET 10 represents a significant evolutionary step for building modern, full-stack web applications using C# and .NET. This release brings meaningful improvements in security, diagnostics, performance, and developer experience. Whether you're building small applications or enterprise-scale solutions, .NET 10 offers practical enhancements that address real-world developer pain points.
Preview Status Note: Many .NET 10 features discussed here were available in preview versions at the time of release. Some behaviors and APIs may continue to evolve. Refer to official Microsoft documentation for the most current implementation details. Where features are experimental or subject to change, we've noted this clearly throughout.
Introduction
The web development landscape continues to evolve rapidly, and developers face mounting pressure to deliver secure, performant applications faster than ever. As detailed in our .NET 10 features overview, Microsoft continues to push the boundaries of what's possible with the .NET platform. Traditional approaches often require juggling multiple languages and frameworks-JavaScript for the frontend and C# for the backend-leading to context switching, duplicated logic, and increased complexity.
Blazor changes this paradigm by enabling full-stack web development entirely in C# and .NET, allowing you to minimize or eliminate the need for separate, complex JavaScript frameworks for your core application logic. While JavaScript interoperability remains available for specific scenarios requiring browser APIs or specialized libraries, Blazor significantly reduces JavaScript dependency for most applications.
The latest .NET 10 release doubles down on this promise with practical improvements across four key areas: simplified security with passwordless authentication support, better observability and diagnostics for troubleshooting production issues, performance optimizations that benefit applications automatically, and delightful developer experience enhancements that address real-world pain points.
Real-world adoption demonstrates this approach's value. Tyler Technologies' MyRide app serves over 2,500 K-12 schools with 750,000+ downloads, and companies like LKAB have consolidated multiple frameworks into unified Blazor-based development, reducing maintenance costs and accelerating delivery.
Simplified Security with Passwordless Authentication Support
Security remains the top concern for application developers, and Blazor .NET 10 tackles this with built-in support for passwordless authentication using WebAuthn and passkeys.
Understanding Passkeys
Passkeys represent a shift in authentication strategy. Unlike traditional passwords, passkeys are cryptographic credentials consisting of public-private key pairs scoped to specific accounts and origins.
The security advantages are substantial:
- Phishing-resistant: Passkeys are bound to the account origin and cannot be compromised by phishing attempts
- User-friendly: No complex passwords to create or remember
- Secure by design: Private keys remain stored in authenticator apps, never transmitted to the application
- Cross-platform: Works across Windows, macOS, iOS, Android, and security keys
The authentication flow is straightforward: the authenticator verifies user identity before allowing authentication with the stored private key.
Implementation in Blazor
Getting started with passkey support in Blazor .NET 10 is relatively straightforward. When creating a new Blazor web app with individual user accounts, passkey support is automatically scaffolded:
// Passkey code is automatically included in the identity template
// Users can add passkeys through their account settings
// Passwords remain as a fallback authentication method
Important Context: In the default Blazor identity template, users initially register with passwords, and passkeys augment rather than fully replace passwords. This hybrid approach provides flexibility during migration. For advanced WebAuthn scenarios requiring detailed attestation or certification verification, dedicated libraries like Fido2 may be necessary.
The implementation includes:
- Passkey management UI: Built-in components for users to add and manage their passkeys
- Authenticator flexibility: Support for Windows Hello, phones, security keys, and other WebAuthn authenticators
- Identity integration: Full ASP.NET Core Identity support for passkey-based authentication
- Seamless login: Simple passkey login links on authentication pages
Entra ID Authentication Scaffolding
Beyond passkey support, Blazor .NET 10 includes new authentication scaffolders that simplify adding enterprise authentication to existing applications. The new Entra ID scaffolder, accessible via the command line using dotnet scaffold, makes setting up Azure AD authentication for ASP.NET Core and Blazor more accessible.
For more details, refer to the official ASP.NET Core documentation and security-focused community standup sessions covering passkey implementation.
Enhanced Observability and Diagnostics
Understanding application behavior in production is critical for maintaining reliability and diagnosing issues quickly. Blazor .NET 10 delivers observability improvements for both server-side and client-side applications.
Metrics and Tracing
.NET 10 introduces observability improvements through OpenTelemetry integration:
- Page navigation metrics: Track user navigation patterns
- UI event metrics: Monitor user interactions and their performance characteristics
- Circuit metrics: Visibility into connection state for Blazor Server applications
- Component lifecycle metrics: Analyze render times and component update durations
- Event callback metrics: Deep dive into event performance
These metrics integrate with OpenTelemetry and modern observability platforms. Note: "Circuit-level metrics" feature completeness may vary between preview and GA releases; refer to the ASP.NET Core blog for authoritative details.
Improved Tracing
Blazor Server applications benefit from enhanced tracing that correlates activities with specific page loads and events, making it easier to trace request flows through your application.
Web Assembly Diagnostics
For Blazor WebAssembly applications, new diagnostic tools enable:
- Performance profiles: Collect CPU sampling data using convenient JavaScript APIs
- Memory dumps: Extract GC dumps for memory analysis via
.nettracefile conversion - Runtime metrics: Access low-level runtime metrics from the WebAssembly runtime
- Easy export: Convert diagnostic data into formats compatible with Visual Studio analysis tools
Configuration occurs through MSBuild properties, and collection happens through JavaScript APIs. For detailed guidance on profiling and tracing, see resources like the DarthPedro blog on .NET 10 WebAssembly improvements.
Performance Optimizations
Blazor .NET 10 delivers multiple performance improvements across the framework and runtime.
Framework-Level Optimizations
The Blazor framework includes several efficiency improvements:
- Fingerprinted and pre-compressed framework scripts: Reduces download size and improves browser caching
- Preloaded WebAssembly runtime: Eliminates cascade request delays during startup
- Optimized runtime execution: Extensive optimization work across the .NET runtime
Real-World Performance Improvements
According to internal testing, Blazor has achieved notable improvements in startup time and WebAssembly payload size reduction through compression and fingerprinting enhancements. These improvements translate directly into faster initial load times and better user experience.
Hedged Claim: Rather than citing specific percentage improvements without verified benchmarks, consider measuring your own applications pre and post-upgrade. The framework optimizations should yield meaningful benefits, particularly for WebAssembly deployments.
Automatic Performance Gains
One compelling aspect of platform improvements is that applications benefit automatically simply by upgrading to the latest .NET version. There's no code refactoring required-pure performance gains from runtime and framework enhancements.
Developer Experience: Addressing Real Pain Points
Beyond infrastructure improvements, Blazor .NET 10 focuses on practical developer pain points.
Faster Hot Reload
Close collaboration between the Blazor and Visual Studio teams has yielded improvements to hot reload, particularly in the latest Visual Studio releases. Preview Note: Early previews and community reports suggest significant improvements; however, final GA performance characteristics may vary based on application complexity.
Enhanced Form Validation
Building complex forms is easier with improved validation supporting nested model structures:
// Support for nested model validation
public class Order
{
public Customer Customer { get; set; }
public List<OrderItem> Items { get; set; }
}
public class Customer
{
[Required]
public string Name { get; set; }
[EmailAddress]
public string Email { get; set; }
public ShippingAddress Address { get; set; }
}
public class ShippingAddress
{
[Required]
[StringLength(5)]
public string ZipCode { get; set; }
}
// Validation is applied across the entire object graph
Enable this feature in your startup code:
builder.Services.AddValidation();
Then use the DataAnnotationsValidator component as usual. This nested validation support represents a genuine improvement for developers building multi-level data entry forms.
Improved Navigation and Routing
Navigation behavior is now more consistent across render modes, enhanced navigation handles scroll positions more intelligently, and improved handling of "not found" responses provides better user feedback.
QuickGrid Enhancements
The QuickGrid component now includes developer-requested features:
- Row class customization: Apply custom CSS classes to individual rows
- Visibility control: Programmatically control when columns are hidden or visible
- Better integration: Improved interoperability with other components
Automated Browser Testing
Testing web applications with Blazor is now more practical:
// Use WebApplicationFactory with Kestrel for browser automation testing
public class BlazorWebApplicationFactory : WebApplicationFactory<Program>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
// Configure mock services
builder.ConfigureServices(services =>
{
// Override services for testing
});
}
}
// Use with Playwright for automated browser testing
var factory = new BlazorWebApplicationFactory()
.WithWebHost(); // Creates actual Kestrel endpoint
// Point Playwright browser to test endpoint
The WebApplicationFactory now supports creating actual HTTP endpoints, making browser automation testing with tools like Playwright practical for web app testing.
Improved JavaScript Interoperability
JavaScript interop is now more straightforward, making it easier to work with JavaScript properties, constructors, and callbacks. This proves invaluable for libraries and integrations requiring specific browser APIs.
Blazor State Persistence: Resilience and Scalability
State Persistence represents a significant practical improvement for stateful Blazor Server applications, addressing a genuine pain point in distributed scenarios.
Declarative Persistence Model
The new declarative model for component state persistence simplifies state management:
public partial class Counter
{
[PersistentComponentState]
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Mark properties with [PersistentComponentState] and Blazor handles persistence automatically during pre-rendering and restoration.
Implementation Context: By default, persisted state is stored in memory, but can be configured to use a hybrid cache for durability across server restarts or multiple instances. Persistence is opt-in, and recovery is best-effort rather than guaranteed. For details on configuration and limitations, refer to the official ASP.NET Core documentation and GitHub issues like #60494.
Automatic Circuit State Preservation
Mobile users frequently switch apps, and browsers often kill background connections. Blazor now includes mechanisms to better handle these scenarios:
- Resilience: Circuit state can be preserved across disconnections
- User experience: Users can resume sessions with state preserved
- Scalability: Disconnected circuits can be managed more efficiently
Pause and Resume Capabilities
New APIs enable pause and resume functionality for resource optimization:
// Pause idle circuits to free resources
await circuitManager.PauseCircuitAsync(circuitId);
// Resume when user returns
await circuitManager.ResumeCircuitAsync(circuitId);
This proves valuable for:
- Idle session management: Free resources when users aren't actively using the app
- Scalability: Handle more concurrent users through intelligent resource allocation
- Reliability: Better state preservation across extended disconnections
Clarification: Recovery of persisted state is best-effort and depends on available storage and application configuration. For guaranteed data persistence across server restarts, implement explicit persistence to durable storage (database, cache, etc.). Our guide on hybrid caching in .NET covers advanced persistence strategies.
Ecosystem Integration: .NET Aspire 13
Blazor .NET 10 integrates seamlessly with NET Aspire 13, Microsoft's cloud-native orchestration platform. This integration provides:
- Unified monitoring: View metrics and traces in the Aspire Dashboard
- Automatic observability: OpenTelemetry configuration handled automatically
- Cloud-ready architecture: Deploy to Kubernetes or cloud platforms with ease
- Distributed application troubleshooting: Correlate issues across microservices
For development teams building cloud-native applications, this integration is a significant practical benefit, making local development closely mirror production architecture.
Real-World Applications
Blazor adoption shows meaningful real-world traction:
- Tyler Technologies MyRide: Built with Blazor for web and native platforms, serves 2,500+ K-12 schools with 750,000+ downloads
- LKAB: Consolidated multiple framework approaches into unified Blazor-based development across iOS, Android, Windows, and web platforms
- Enterprise Teams: Various organizations using Blazor for internal tools and customer-facing applications
Note that these examples demonstrate Blazor adoption generally; specific verification of .NET 10 usage would require access to implementation details beyond public information.
Comparison: Blazor Rendering Modes
Blazor .NET 10 supports three primary rendering modes, each with distinct advantages:
| Aspect | Server Rendering | WebAssembly | Auto (Hybrid) |
|---|---|---|---|
| Execution | C# runs on server, HTML streamed to client | C# runs in browser via WebAssembly | Combines both approaches |
| Initial Load | Fastest initial HTML delivery | Larger initial payload | Adaptive based on context |
| Interactivity | Network round-trips required | Fully interactive offline-capable | Immediate interactivity, then streaming |
| State Management | Server-side state with circuit | Client-side local storage | Hybrid state approach |
| Use Case | Real-time dashboards, collaborative apps | Rich client experiences, offline support | Modern interactive web apps |
| New in .NET 10 | Enhanced state persistence | Improved diagnostics, faster startup | Better defaults and guidance |
Choose the mode that best fits your application's requirements rather than assuming one approach fits all scenarios.
Best Practices for Blazor .NET 10
As you adopt Blazor .NET 10, keep these practices in mind:
- Embrace passwordless options: Where feasible, guide users toward passkeys while maintaining password fallback
- Monitor from day one: Configure OpenTelemetry and Aspire early to collect valuable telemetry
- Plan state persistence: Design applications considering state preservation from the start
- Test thoroughly: Use WebApplicationFactory with Kestrel and browser automation for comprehensive testing
- Profile and measure: Don't assume; measure actual performance with realistic workloads
- Stay current on preview details: As .NET 10 moves from preview to GA, verify implementation details against official documentation
Common Pitfalls to Avoid
- Ignoring diagnostics configuration: Set up OpenTelemetry and observability early, not as an afterthought
- Assuming one render mode fits all: Evaluate your specific requirements before choosing server, WebAssembly, or hybrid
- Over-relying on state persistence: Plan explicit data persistence for critical state; don't depend entirely on automatic persistence
- Neglecting form validation complexity: While nested validation is improved, complex business logic validation may still need custom implementations
- Assuming passkeys eliminate passwords: Design authentication flows with passwords as fallback
Breaking Changes and Migration Considerations
When upgrading to .NET 10, be aware of potential breaking changes:
- HTTP streaming defaults: Verify your application's handling of HTTP streaming behavior
- Boot configuration changes: Review boot configuration inlining if you have custom startup logic
- API surface changes: Check official release notes for any breaking changes in components you use
For detailed migration guidance, consult the official ASP.NET Core migration guide for your specific version path.
Conclusion
Blazor .NET 10 represents a mature, production-ready web framework that addresses practical developer needs and enterprise requirements. From passwordless authentication support that simplifies security implementation, to diagnostic capabilities that illuminate production behavior, to performance optimizations that benefit applications automatically, .NET 10 delivers concrete value.
The framework's focus on developer experience-improved testing, easier form validation, better state management-demonstrates Microsoft's understanding of developer workflows. Combined with practical performance improvements and enterprise-ready features, Blazor .NET 10 positions itself as a compelling choice for building modern web applications of any scale.
If you're building web applications, Blazor .NET 10 deserves serious evaluation. Start with the official template at blazor.net, review the preview release notes for current API details, and measure actual performance gains on your own applications. Early feedback suggests meaningful improvements, though real-world results will vary based on your specific use cases. For teams upgrading from older versions, our .NET 8 to .NET 10 upgrade guide provides strategic planning advice, and our enterprise development services can help you navigate the transition.
Additional Resources
- Official Blazor Documentation: https://learn.microsoft.com/en-us/aspnet/core/blazor/
- ASP.NET Core Blog: Microsoft's official ASP.NET Core announcements
- .NET 10 Release: Official announcement and download
- GitHub Issues: ASP.NET Core repository for tracking features (e.g., #60494 for state persistence)
- Community Resources: Andrew Lock's .NET Escapades, DarthPedro's blog for technical deep dives
- ASP.NET Community Standup: Regular community-focused updates on Blazor and ASP.NET Core features
Disclaimer: This article was written based on .NET 10 preview releases and available public information. Some features and APIs may change before general availability (GA). Always verify current implementation details against official Microsoft documentation and release notes. Performance claims are based on internal testing and optimization work; actual results depend on specific application characteristics and workloads.
Hrishi Digital Solutions
Expert digital solutions provider specializing in modern web development, cloud architecture, and digital transformation.
Contact Us →


