I-Synergy.Framework.AspNetCore 2026.10201.12332

Prefix Reserved
dotnet add package I-Synergy.Framework.AspNetCore --version 2026.10201.12332
                    
NuGet\Install-Package I-Synergy.Framework.AspNetCore -Version 2026.10201.12332
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I-Synergy.Framework.AspNetCore" Version="2026.10201.12332" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="I-Synergy.Framework.AspNetCore" Version="2026.10201.12332" />
                    
Directory.Packages.props
<PackageReference Include="I-Synergy.Framework.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add I-Synergy.Framework.AspNetCore --version 2026.10201.12332
                    
#r "nuget: I-Synergy.Framework.AspNetCore, 2026.10201.12332"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package I-Synergy.Framework.AspNetCore@2026.10201.12332
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=I-Synergy.Framework.AspNetCore&version=2026.10201.12332
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.AspNetCore&version=2026.10201.12332
                    
Install as a Cake Tool

I-Synergy Framework ASP.NET Core

A comprehensive ASP.NET Core integration library for .NET 10.0 applications, providing middleware, filters, extensions, and utilities for building modern web APIs and applications. This package includes OpenTelemetry integration, health checks, global exception handling, result pattern extensions, and more.

NuGet License .NET

Features

  • OpenTelemetry integration for distributed tracing, metrics, and logging
  • Global exception handling with ProblemDetails responses
  • Health check endpoints with detailed JSON responses
  • Result pattern extensions for converting Result<T> to IActionResult
  • Action filters for validation, caching, and request filtering
  • Model binders for custom DateTime parsing
  • HTTP extensions for request/response manipulation
  • JWT token service abstractions for authentication
  • CORS configuration with environment-aware options
  • Service locator integration for legacy scenarios
  • View model base classes for MVC applications

Installation

Install the package via NuGet:

dotnet add package I-Synergy.Framework.AspNetCore

Quick Start

1. Configure Services with OpenTelemetry

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.Core.Abstractions.Services;
using ISynergy.Framework.Core.Services;

var builder = WebApplication.CreateBuilder(args);

// Add info service for application metadata
builder.Services.AddSingleton<IInfoService>(new InfoService(
    productName: "My API",
    productVersion: new Version(1, 0, 0)));

// Configure OpenTelemetry
builder.Logging.AddTelemetry(
    builder,
    builder.Services.BuildServiceProvider().GetRequiredService<IInfoService>(),
    tracerProviderBuilder =>
    {
        // Add custom instrumentation
        tracerProviderBuilder.AddSource("MyApi");
    },
    meterProviderBuilder =>
    {
        // Add custom metrics
        meterProviderBuilder.AddMeter("MyApi");
    });

// Add controllers and services
builder.Services.AddControllers();
builder.Services.AddHealthChecks()
    .AddCheck("api", () => HealthCheckResult.Healthy());

var app = builder.Build();

// Configure middleware pipeline
app.UseExceptionHandler();
app.MapDefaultHealthEndpoints();
app.MapControllers();

app.Run();

2. Use Result Pattern in Controllers

using ISynergy.Framework.Core.Models.Results;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductService _productService;

    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetProduct(int id)
    {
        var result = await _productService.GetProductByIdAsync(id);

        // Convert Result<Product> to IActionResult
        return result.Match<Product, IActionResult>(
            value => value is not null ? Ok(value) : NoContent(),
            () => NotFound()
        );
    }

    [HttpPost]
    public async Task<IActionResult> CreateProduct([FromBody] ProductDto dto)
    {
        var result = await _productService.CreateProductAsync(dto);

        return result.Match<int, IActionResult>(
            id => CreatedAtAction(nameof(GetProduct), new { id }, id),
            () => BadRequest(result.ErrorMessage)
        );
    }

    [HttpGet]
    public async Task<IActionResult> GetProducts(
        [FromQuery] int pageIndex = 0,
        [FromQuery] int pageSize = 10)
    {
        var result = await _productService.GetProductsPagedAsync(pageIndex, pageSize);

        return result.Match<PaginatedResult<ProductDto>, IActionResult>(
            paginatedResult => Ok(paginatedResult),
            () => NotFound()
        );
    }
}

3. Add Action Filters

using ISynergy.Framework.AspNetCore.Filters;

[ApiController]
[Route("api/[controller]")]
[ValidateModelFilter] // Validates ModelState automatically
public class OrdersController : ControllerBase
{
    [HttpPost]
    [NoCache] // Prevents caching of this endpoint
    public async Task<IActionResult> CreateOrder([FromBody] OrderDto order)
    {
        // ModelState is already validated by ValidateModelFilter
        // Response will not be cached due to NoCacheFilter

        await _orderService.CreateOrderAsync(order);
        return Ok();
    }

    [HttpGet("local-only")]
    [RequestShouldBeLocalFilter] // Only allows requests from localhost
    public IActionResult GetSensitiveData()
    {
        return Ok(new { Secret = "This is sensitive" });
    }
}

4. Configure Global Exception Handling

var app = builder.Build();

// Add global exception handler
app.UseExceptionHandler(exceptionHandlerApp =>
{
    exceptionHandlerApp.Run(async context =>
    {
        var exceptionHandler = context.RequestServices
            .GetRequiredService<IExceptionHandler>();

        await exceptionHandler.TryHandleAsync(
            context,
            context.Features.Get<IExceptionHandlerFeature>()?.Error!,
            context.RequestAborted);
    });
});

// Or register the built-in GlobalExceptionHandler
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
app.UseExceptionHandler();

Architecture

Core Components

ISynergy.Framework.AspNetCore/
├── Extensions/                 # Extension methods
│   ├── TelemetryExtensions    # OpenTelemetry configuration
│   ├── HealthCheckExtensions  # Health check endpoints
│   ├── ResultExtensions       # Result pattern conversions
│   ├── HttpContextExtensions  # HttpContext utilities
│   └── WebApplicationExtensions
│
├── Filters/                   # Action filters
│   ├── ValidateModelFilterAttribute
│   ├── NoCacheFilterAttribute
│   ├── NullResultFilterAttribute
│   ├── NoNullModelsFilterAttribute
│   └── RequestShouldBeLocalFilterAttribute
│
├── Handlers/                  # Exception handlers
│   └── GlobalExceptionHandler
│
├── Binders/                   # Model binders
│   ├── DateTimeModelBinder
│   └── DateTimeModelBinderProvider
│
├── Abstractions/              # Service interfaces
│   └── IJwtTokenService
│
└── Options/                   # Configuration options
    ├── CORSOptions
    ├── KeyVaultOptions
    ├── AzureOptions
    └── TelemetryOptions

Core Features

OpenTelemetry Integration

Configure comprehensive observability for your application:

using ISynergy.Framework.AspNetCore.Extensions;

builder.Logging.AddTelemetry(
    builder,
    infoService,
    tracerProviderBuilder =>
    {
        // Add custom sources
        tracerProviderBuilder
            .AddSource("MyApi")
            .AddSource("MyApi.Database");

        // Add exporters
        if (builder.Environment.IsProduction())
        {
            tracerProviderBuilder.AddOtlpExporter(options =>
            {
                options.Endpoint = new Uri("http://otel-collector:4317");
            });
        }
    },
    meterProviderBuilder =>
    {
        // Add custom meters
        meterProviderBuilder.AddMeter("MyApi.Metrics");

        // Add exporters
        if (builder.Environment.IsProduction())
        {
            meterProviderBuilder.AddOtlpExporter();
        }
    },
    loggerProviderBuilder =>
    {
        // Configure logging
        if (builder.Environment.IsProduction())
        {
            loggerProviderBuilder.AddOtlpExporter();
        }
    });

Health Check Endpoints

Configure detailed health checks with JSON responses:

using ISynergy.Framework.AspNetCore.Extensions;

// Configure health checks
builder.Services.AddHealthChecks()
    .AddCheck("database", () => HealthCheckResult.Healthy(), tags: ["live"])
    .AddCheck("external-api", () => HealthCheckResult.Healthy())
    .AddCheck("cache", () => HealthCheckResult.Healthy(), tags: ["live"]);

var app = builder.Build();

// Map default health endpoints
app.MapDefaultHealthEndpoints();
// Creates:
// - /health (all checks must pass)
// - /alive (only checks tagged with "live" must pass)

// Or use custom health check endpoint with telemetry
app.MapTelemetryHealthChecks("/healthz");

Example health check response:

{
  "Status": "Healthy",
  "Duration": "00:00:00.0234567",
  "Info": [
    {
      "Key": "database",
      "Description": "Database connection is healthy",
      "Status": "Healthy",
      "Duration": "00:00:00.0123456",
      "Data": {}
    }
  ]
}

Action Filters

Model Validation Filter

Automatically validate ModelState:

[ApiController]
[Route("api/[controller]")]
[ValidateModelFilter]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult CreateUser([FromBody] CreateUserRequest request)
    {
        // If ModelState is invalid, filter returns BadRequest automatically
        // No need to check ModelState.IsValid here
        return Ok();
    }
}
No Cache Filter

Prevent caching of responses:

[HttpGet("real-time-data")]
[NoCache]
public IActionResult GetRealTimeData()
{
    // Response headers will include:
    // Cache-Control: no-store, no-cache, must-revalidate
    // Pragma: no-cache
    // Expires: 0
    return Ok(new { Timestamp = DateTime.UtcNow });
}
Local Request Filter

Restrict endpoints to localhost only:

[HttpGet("admin/diagnostics")]
[RequestShouldBeLocalFilter]
public IActionResult GetDiagnostics()
{
    // Returns 403 Forbidden if request is not from localhost
    return Ok(GetSystemDiagnostics());
}
Null Result Filter

Handle null results automatically:

[HttpGet("{id}")]
[NullResultFilter] // Returns 404 if result is null
public async Task<Product?> GetProduct(int id)
{
    return await _productService.GetProductByIdAsync(id);
    // If null, filter automatically returns 404 Not Found
}

HTTP Extensions

HttpContext Extensions
using ISynergy.Framework.AspNetCore.Extensions;

public class MyMiddleware
{
    public async Task InvokeAsync(HttpContext context)
    {
        // Get client IP address
        var ipAddress = context.GetClientIpAddress();

        // Check if request is from localhost
        if (context.IsLocalRequest())
        {
            // Handle local request
        }

        // Get user agent
        var userAgent = context.Request.GetUserAgent();

        await _next(context);
    }
}
HttpRequest Extensions
using ISynergy.Framework.AspNetCore.Extensions;

public IActionResult GetRequestInfo()
{
    var request = HttpContext.Request;

    var info = new
    {
        IsAjax = request.IsAjaxRequest(),
        IsMobile = request.IsMobileRequest(),
        UserAgent = request.GetUserAgent(),
        ContentType = request.ContentType
    };

    return Ok(info);
}

Custom DateTime Model Binder

Handle DateTime parsing with custom formats:

using ISynergy.Framework.AspNetCore.Providers;

// In Program.cs
builder.Services.AddControllers(options =>
{
    options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());
});

// In Controller
[HttpGet]
public IActionResult GetOrders(
    [FromQuery] DateTime? startDate,
    [FromQuery] DateTime? endDate)
{
    // Supports multiple date formats automatically
    // - ISO 8601: 2024-01-15T10:30:00Z
    // - Custom formats: 01/15/2024
    return Ok();
}

Advanced Features

Result Pattern HTTP Extensions

Convert HttpResponseMessage to Result objects:

using ISynergy.Framework.AspNetCore.Extensions;

public class ApiClient
{
    private readonly HttpClient _httpClient;

    public async Task<Result<Product>> GetProductAsync(int id)
    {
        var response = await _httpClient.GetAsync($"api/products/{id}");

        // Convert HttpResponseMessage to Result<Product>
        var result = await response.ToResult<Product>();

        return result ?? Result<Product>.Fail("Invalid response");
    }

    public async Task<PaginatedResult<Product>> GetProductsAsync(int page)
    {
        var response = await _httpClient.GetAsync($"api/products?page={page}");

        // Convert to PaginatedResult
        var result = await response.ToPaginatedResult<Product>();

        return result ?? PaginatedResult<Product>.Empty;
    }
}

JWT Token Service

Implement JWT token generation and validation:

using ISynergy.Framework.AspNetCore.Abstractions.Services;
using ISynergy.Framework.Core.Models;

public class JwtTokenService : IJwtTokenService
{
    private readonly IConfiguration _configuration;

    public JwtTokenService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public Token GenerateJwtToken(TokenRequest request)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Secret"]);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[]
            {
                new Claim(ClaimTypes.Name, request.Username),
                new Claim(ClaimTypes.Email, request.Email)
            }),
            Expires = DateTime.UtcNow.AddHours(8),
            SigningCredentials = new SigningCredentials(
                new SymmetricSecurityKey(key),
                SecurityAlgorithms.HmacSha256Signature)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        var tokenString = tokenHandler.WriteToken(token);

        return new Token
        {
            AccessToken = tokenString,
            ExpiresIn = 28800,
            TokenType = "Bearer"
        };
    }

    public List<Claim> GetClaims(Token token)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var jwtToken = tokenHandler.ReadJwtToken(token.AccessToken);
        return jwtToken.Claims.ToList();
    }

    public string GetSingleClaim(Token token, string claimType)
    {
        var claims = GetClaims(token);
        return claims.FirstOrDefault(c => c.Type == claimType)?.Value ?? string.Empty;
    }
}

// Register in DI
builder.Services.AddSingleton<IJwtTokenService, JwtTokenService>();

CORS Configuration

Configure CORS with environment-aware settings:

using ISynergy.Framework.AspNetCore.Options;

// In appsettings.json
{
  "CORS": {
    "AllowedOrigins": ["https://myapp.com", "https://admin.myapp.com"],
    "AllowedMethods": ["GET", "POST", "PUT", "DELETE"],
    "AllowedHeaders": ["*"],
    "AllowCredentials": true
  }
}

// In Program.cs
var corsOptions = builder.Configuration
    .GetSection("CORS")
    .Get<CORSOptions>();

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policy =>
    {
        policy.WithOrigins(corsOptions.AllowedOrigins.ToArray())
            .WithMethods(corsOptions.AllowedMethods.ToArray())
            .WithHeaders(corsOptions.AllowedHeaders.ToArray());

        if (corsOptions.AllowCredentials)
            policy.AllowCredentials();
    });
});

app.UseCors();

Service Locator Integration

Use service locator for legacy scenarios:

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.Core.Locators;

var app = builder.Build();

// Set service locator provider
app.SetLocatorProvider();

// Now you can use ServiceLocator anywhere
public class LegacyService
{
    public void DoWork()
    {
        var logger = ServiceLocator.Default.GetInstance<ILogger>();
        logger.LogInformation("Working...");
    }
}

Best Practices

Use Result pattern extensions to maintain consistent API responses and error handling.

Always configure global exception handling to prevent sensitive error details from leaking to clients.

OpenTelemetry integration automatically instruments ASP.NET Core, HttpClient, and runtime metrics.

API Design

  • Use Result<T> pattern for all service methods
  • Return appropriate HTTP status codes (200, 201, 204, 400, 404, 500)
  • Use ProblemDetails for error responses
  • Implement health check endpoints for monitoring
  • Use action filters to avoid repetitive validation code

Security

  • Always validate input using [ValidateModelFilter] or manual validation
  • Use [RequestShouldBeLocalFilter] for administrative endpoints
  • Implement JWT token authentication for protected endpoints
  • Configure CORS appropriately for your environment
  • Never expose internal exception details in production

Performance

  • Use [NoCache] filter sparingly - only for real-time data
  • Implement health checks that don't impact application performance
  • Use async/await throughout the application
  • Configure response compression for API endpoints
  • Monitor telemetry data to identify bottlenecks

Observability

  • Configure OpenTelemetry early in application startup
  • Tag health checks appropriately (live, ready)
  • Use structured logging with proper log levels
  • Instrument custom operations with ActivitySource
  • Monitor metrics for request duration, error rates, and throughput

Testing

The framework is designed for testability:

[TestClass]
public class ProductsControllerTests
{
    [TestMethod]
    public async Task GetProduct_ReturnsOk_WhenProductExists()
    {
        // Arrange
        var mockService = new Mock<IProductService>();
        mockService.Setup(s => s.GetProductByIdAsync(1))
            .ReturnsAsync(Result<Product>.Success(new Product { Id = 1 }));

        var controller = new ProductsController(mockService.Object);

        // Act
        var result = await controller.GetProduct(1);

        // Assert
        Assert.IsInstanceOfType(result, typeof(OkObjectResult));
    }

    [TestMethod]
    public async Task GetProduct_ReturnsNotFound_WhenProductDoesNotExist()
    {
        // Arrange
        var mockService = new Mock<IProductService>();
        mockService.Setup(s => s.GetProductByIdAsync(999))
            .ReturnsAsync(Result<Product>.Fail("Not found"));

        var controller = new ProductsController(mockService.Object);

        // Act
        var result = await controller.GetProduct(999);

        // Assert
        Assert.IsInstanceOfType(result, typeof(NotFoundResult));
    }
}

Integration Testing

public class ApiIntegrationTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly WebApplicationFactory<Program> _factory;

    public ApiIntegrationTests(WebApplicationFactory<Program> factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task HealthEndpoint_ReturnsHealthy()
    {
        // Arrange
        var client = _factory.CreateClient();

        // Act
        var response = await client.GetAsync("/health");

        // Assert
        response.EnsureSuccessStatusCode();
        var content = await response.Content.ReadAsStringAsync();
        Assert.Contains("Healthy", content);
    }
}

Dependencies

  • ISynergy.Framework.Core - Core framework components
  • ISynergy.Framework.OpenTelemetry - OpenTelemetry integration
  • ISynergy.Framework.Storage - Storage abstractions
  • Microsoft.AspNetCore.App - ASP.NET Core framework
  • OpenTelemetry.Instrumentation.AspNetCore - ASP.NET Core instrumentation
  • OpenTelemetry.Instrumentation.Http - HttpClient instrumentation
  • OpenTelemetry.Instrumentation.Runtime - Runtime metrics

Configuration Examples

Complete Startup Configuration

using ISynergy.Framework.AspNetCore.Extensions;
using ISynergy.Framework.AspNetCore.Handlers;
using ISynergy.Framework.AspNetCore.Filters;

var builder = WebApplication.CreateBuilder(args);

// Add services
builder.Services.AddControllers(options =>
{
    // Add model binders
    options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());

    // Add global filters
    options.Filters.Add<ValidateModelFilterAttribute>();
});

// Add OpenTelemetry
var infoService = new InfoService("MyApi", new Version(1, 0, 0));
builder.Services.AddSingleton<IInfoService>(infoService);

builder.Logging.AddTelemetry(builder, infoService);

// Add health checks
builder.Services.AddHealthChecks()
    .AddCheck("self", () => HealthCheckResult.Healthy(), tags: ["live"]);

// Add exception handling
builder.Services.AddExceptionHandler<GlobalExceptionHandler>();
builder.Services.AddProblemDetails();

// Add CORS
builder.Services.AddCors();

var app = builder.Build();

// Configure middleware pipeline
app.UseExceptionHandler();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

app.MapDefaultHealthEndpoints();
app.MapControllers();

app.SetLocatorProvider();

app.Run();

Documentation

For more information about the I-Synergy Framework:

  • I-Synergy.Framework.Core - Core framework components
  • I-Synergy.Framework.CQRS - CQRS implementation
  • I-Synergy.Framework.EntityFramework - Entity Framework integration
  • I-Synergy.Framework.OpenTelemetry - OpenTelemetry utilities

Support

For issues, questions, or contributions, please visit the GitHub repository.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on I-Synergy.Framework.AspNetCore:

Package Downloads
I-Synergy.Framework.AspNetCore.Authentication

I-Synergy Framework Authentication

I-Synergy.Framework.AspNetCore.Globalization

I-Synergy Framework Globalization

I-Synergy.Framework.AspNetCore.Proxy

I-Synergy Framework Proxy for .net 8.0

I-Synergy.Framework.AspNetCore.Blazor

I-Synergy Framework Blazor

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.10201.12332 27 2/1/2026
2026.10201.12300-preview 29 2/1/2026
2026.10116.10015-preview 119 1/15/2026
2026.10110.10203 131 1/10/2026
2026.10110.10121-preview 122 1/10/2026
2026.10109.12335-preview 123 1/9/2026
2026.10105.11358-preview 112 1/5/2026
2026.10105.11229-preview 111 1/5/2026
2025.11231.11750-preview 121 12/31/2025
2025.11225.12213 226 12/25/2025
2025.11225.12003-preview 212 12/25/2025
2025.11218.11301 319 12/18/2025
2025.11218.10050-preview 302 12/18/2025
2025.11211.11307-preview 449 12/11/2025
2025.11211.11225-preview 444 12/11/2025
2025.11210.10145-preview 456 12/10/2025
2025.11209.11459 477 12/9/2025
2025.11209.11422-preview 469 12/9/2025
2025.11207.11553-preview 236 12/7/2025
2025.11204.11448-preview 227 12/4/2025
2025.11130.12248 457 11/30/2025
2025.11130.12134-preview 385 11/30/2025
2025.11130.11725-preview 385 11/30/2025
2025.11130.11553-preview 383 11/30/2025
2025.11130.11515-preview 383 11/30/2025
2025.11130.11420.59-preview 388 11/30/2025
2025.11130.11323.56-preview 280 11/30/2025
2025.11129.10227.14-preview 142 11/29/2025
2025.11120.10114 440 11/20/2025
2025.11119.12324.6-preview 425 11/19/2025
2025.11119.10110 439 11/19/2025
2025.11119.10037-preview 395 11/19/2025
2025.11118.12340.33-preview 427 11/18/2025
2025.11117.12349.4-preview 423 11/17/2025
2025.11117.11937.47-preview 429 11/17/2025
2025.11113.11532.29-preview 309 11/13/2025
2025.11113.10128.57-preview 278 11/13/2025
2025.11110.10306.55-preview 257 11/10/2025
2025.11109.10018.48-preview 171 11/8/2025
2025.11108.10119.29-preview 152 11/8/2025
2025.11106.10037.1-preview 223 11/6/2025
2025.11105.10254.54-preview 221 11/5/2025
2025.11105.10141.16-preview 231 11/5/2025
2025.11104.12308.54-preview 222 11/4/2025
2025.11104.10144.47-preview 227 11/4/2025
2025.11102.12003.8-preview 225 11/2/2025
2025.11102.11228.52-preview 191 11/2/2025
2025.11102.10309.42-preview 176 11/2/2025
2025.11029.11433.38-preview 235 10/29/2025
2025.11029.10201.38-preview 221 10/29/2025
2025.11027.11947.55-preview 221 10/27/2025
2025.11022.12207.12-preview 210 10/22/2025
2025.11019.12053.37-preview 212 10/19/2025
2025.11016.11750.24-preview 204 10/16/2025
2025.11015.10219.44-preview 202 10/15/2025
2025.11014.10245.12-preview 206 10/14/2025
2025.11012.10130.11-preview 183 10/12/2025
2025.11010.10052.52-preview 258 10/9/2025
2025.11001.12118.13-preview 241 10/1/2025
2025.10925.10144.25-preview 271 9/25/2025
2025.10921.11353.29-preview 286 9/21/2025
2025.10913.11841.29-preview 219 9/13/2025
2025.10912.12351.59-preview 172 9/12/2025
2025.10912.10210.52-preview 239 9/12/2025
2025.10911.10131.43-preview 234 9/10/2025
2025.10910.12340.34-preview 250 9/10/2025
2025.10910.11327.15-preview 236 9/10/2025
2025.10910.11206.45-preview 242 9/10/2025
2025.10910.10230.58-preview 255 9/10/2025
2025.10908.12343.47-preview 250 9/8/2025
2025.10904.12337.35-preview 262 9/4/2025
2025.10904.12245.51-preview 268 9/4/2025
2025.10904.11425.5-preview 246 9/4/2025
2025.10904.10323.39-preview 271 9/4/2025
2025.10826.11425.3-preview 317 8/26/2025
2025.10825.12350.9-preview 254 8/25/2025
2025.10810.10248-preview 218 8/10/2025
2025.10809.10146.35-preview 247 8/9/2025
2025.10806.12031.49-preview 319 8/6/2025
2025.10806.11955.54-preview 309 8/6/2025
2025.10806.11433.24-preview 329 8/6/2025
2025.10709.10105.39-preview 241 7/8/2025
2025.10707.12320.3-preview 245 7/7/2025
2025.10706.11957.9-preview 226 7/6/2025
2025.10702.11752.47-preview 240 7/2/2025
2025.10702.11256.17-preview 241 7/2/2025
2025.10702.11119.10-preview 244 7/2/2025
2025.10702.10000.31-preview 247 7/1/2025
2025.10701.11524.1-preview 241 7/1/2025
2025.10701.11310.13-preview 250 7/1/2025
2025.10630.12022.58-preview 240 6/30/2025
2025.10612.12134.8-preview 416 6/12/2025
2025.10611.12313.53-preview 413 6/11/2025
2025.10603.10159.54-preview 270 6/3/2025
2025.10602.11908.9-preview 268 6/2/2025
2025.10601.10124.29-preview 229 5/31/2025
2025.10531.12235.29-preview 213 5/31/2025
2025.10530.10121.50-preview 285 5/29/2025
2025.10527.12202.4-preview 268 5/27/2025
2025.10526.12034.25-preview 247 5/26/2025
2025.10521.11828.30-preview 273 5/21/2025
2025.10520.11715.6-preview 270 5/20/2025
2025.10520.11515.16-preview 245 5/20/2025
2025.10518.12303.43-preview 272 5/18/2025
2025.10518.11257.36-preview 278 5/18/2025
2025.10517.12347.27-preview 205 5/17/2025
2025.10517.12003.6-preview 212 5/17/2025
2025.10516.11720.13-preview 295 5/16/2025
2025.10514.12334.2-preview 366 5/14/2025
2025.10514.10015.27-preview 342 5/13/2025
2025.10511.11032.32-preview 285 5/11/2025
2025.10413.11530 360 4/13/2025
2025.10413.11434.33-preview 342 4/13/2025
2025.10413.10205.50-preview 270 4/13/2025
2025.10412.11526.4-preview 231 4/12/2025
2025.10412.10141 272 4/12/2025
2025.10411.11811.23-preview 254 4/11/2025
2025.10411.11645.1-preview 262 4/11/2025
2025.10410.11458.35-preview 305 4/10/2025
2025.10405.10143.28-preview 192 4/5/2025
2025.10403.12208.1-preview 308 4/3/2025
2025.10403.11954.16-preview 303 4/3/2025
2025.10401.11908.24-preview 294 4/1/2025
2025.10401.11559.45-preview 303 4/1/2025
2025.10331.12215.59-preview 288 3/31/2025
2025.10331.12130.34-preview 288 3/31/2025
2025.10331.10056.40-preview 291 3/30/2025
2025.10328.10150.21-preview 257 3/28/2025
2025.10323.11359-preview 408 3/23/2025
2025.10320.11800 302 3/20/2025
2025.10320.11616.45-preview 256 3/20/2025
2025.10320.10000 259 3/19/2025
2025.10319.12311.26-preview 256 3/19/2025
2025.10319.12238.6-preview 272 3/19/2025
2025.10319.12057.59-preview 279 3/19/2025
2025.10318.10055 278 3/18/2025
2025.10317.11728.13-preview 269 3/17/2025
2025.10317.11201.3-preview 281 3/17/2025
2025.10315.11523.14-preview 204 3/15/2025
2025.10305.12342 361 3/5/2025
2025.10305.12321.9-preview 349 3/5/2025
2025.10301.12313 277 3/1/2025
2025.10301.12129.38-preview 209 3/1/2025
2025.10221.10043.29-preview 220 2/21/2025
2025.1051.1246 291 2/20/2025
2025.1051.44.54-preview 233 2/20/2025
2025.1044.1 246 2/13/2025
2025.1044.0.2-preview 223 2/13/2025
2025.1043.0.2-preview 211 2/12/2025
2025.1041.0.1-preview 238 2/10/2025
2025.1038.1 311 2/7/2025
2025.1038.0.1-preview 236 2/7/2025
2025.1035.1 304 2/4/2025
2025.1035.0.1-preview 265 2/4/2025
2025.1034.1 310 2/3/2025
2025.1034.0.1-preview 253 2/3/2025
2025.1033.0.5-preview 245 2/2/2025
2025.1033.0.3-preview 254 2/2/2025
2025.1033.0.2-preview 264 2/2/2025
2025.1033.0.1-preview 209 2/2/2025
2025.1025.1 309 1/25/2025
2025.1025.0.1-preview 249 1/25/2025
2025.1021.1 284 1/21/2025
2025.1021.0.1-preview 250 1/21/2025
2025.1020.1 271 1/20/2025
2025.1020.0.3-preview 259 1/20/2025
2025.1020.0.1-preview 257 1/20/2025
2025.1018.0.7-preview 230 1/18/2025
2025.1018.0.5-preview 259 1/18/2025
2025.1018.0.4-preview 247 1/18/2025
2025.1017.0.2-preview 235 1/17/2025
2025.1017.0.1-preview 265 1/17/2025
2025.1016.0.1-preview 236 1/16/2025
2025.1010.1 297 1/10/2025
2025.1010.0.1-preview 241 1/9/2025
2025.1009.0.3-preview 256 1/9/2025
2025.1007.1 289 1/7/2025
2025.1007.0.5-preview 251 1/7/2025
2025.1007.0.3-preview 252 1/7/2025
2025.1006.1 278 1/7/2025
2025.1005.1 330 1/5/2025
2025.1005.0.2-preview 260 1/5/2025
2025.1004.1 313 1/4/2025
2024.1366.1 284 12/31/2024
2024.1366.0.2-preview 263 12/31/2024
2024.1366.0.1-preview 280 12/31/2024
2024.1365.0.2-preview 225 12/30/2024
2024.1365.0.1-preview 259 12/30/2024
2024.1361.0.2-preview 260 12/26/2024
2024.1353.0.1-preview 239 12/18/2024
2024.1352.0.3-preview 253 12/17/2024
2024.1352.0.2-preview 240 12/17/2024
2024.1352.0.1-preview 231 12/17/2024
2024.1351.1 307 12/16/2024
2024.1351.0.3-preview 245 12/16/2024
2024.1350.1 307 12/15/2024
2024.1343.1 309 12/8/2024
2024.1339.1 311 12/4/2024
2024.1336.1 306 12/1/2024
2024.1332.1 281 11/27/2024
2024.1330.1 296 11/25/2024
2024.1328.1 287 11/23/2024
2024.1325.1 322 11/20/2024
2024.1323.1 322 11/18/2024
2024.1316.1 156 11/11/2024
2024.1307.1 147 11/2/2024
2024.1300.1 162 10/26/2024
2024.1294.1 180 10/20/2024
2024.1290.1 320 10/16/2024
2024.1283.1 326 10/8/2024
2024.1282.1 256 10/8/2024
2024.1278.1 290 10/4/2024
2024.1277.1 297 10/3/2024
2024.1275.2 259 10/1/2024
2024.1275.1 245 10/1/2024
2024.1274.1 242 9/30/2024
2024.1263.1 241 9/19/2024
2024.1261.1 296 9/17/2024
2024.1258.1 270 9/13/2024
2024.1257.1 246 9/13/2024
2024.1256.1 239 9/12/2024
2024.1254.1 262 9/10/2024
2024.1250.1 280 9/6/2024
2024.1249.1 275 9/5/2024
2024.1246.1 281 9/2/2024
2024.1245.1 272 9/1/2024
2024.1237.1 302 8/24/2024
2024.1235.0.1-preview 252 8/23/2024
2024.1230.1 259 8/18/2024
2024.1229.1 300 8/16/2024
2024.1228.1 260 8/15/2024
2024.1222.1 332 8/8/2024
2024.1221.1 250 8/7/2024
2024.1221.0.2-preview 242 8/8/2024
2024.1221.0.1-preview 242 8/8/2024
2024.1220.1 251 8/7/2024
2024.1219.0.2-preview 230 8/6/2024
2024.1219.0.1-preview 196 8/6/2024
2024.1217.0.2-preview 206 8/4/2024
2024.1217.0.1-preview 220 8/4/2024
2024.1216.0.2-preview 210 8/3/2024
2024.1216.0.1-preview 216 8/3/2024
2024.1208.0.1-preview 243 7/26/2024
2024.1207.0.7-preview 201 7/25/2024
2024.1207.0.5-preview 219 7/25/2024
2024.1166.1 350 6/14/2024
2024.1165.1 273 6/13/2024
2024.1164.1 236 6/12/2024
2024.1162.1 258 6/10/2024
2024.1158.1 319 6/6/2024
2024.1156.1 280 6/4/2024
2024.1152.1 341 5/31/2024
2024.1151.1 309 5/29/2024
2024.1150.2 269 5/29/2024
2024.1150.1 279 5/29/2024
2024.1149.1 268 5/28/2024
2024.1147.1 280 5/26/2024
2024.1146.2 258 5/25/2024
2024.1146.1 261 5/25/2024
2024.1145.1 283 5/24/2024
2024.1135.2 276 5/14/2024
2024.1135.1 259 5/14/2024
2024.1134.1 234 5/13/2024
2024.1130.1 301 5/9/2024
2024.1123.1 307 5/2/2024
2024.1121.1 295 4/30/2024
2024.1114.1 336 4/22/2024
2024.1113.0.5-preview 267 4/22/2024
2024.1113.0.3-preview 268 4/22/2024
2024.1113.0.2-preview 246 4/22/2024
2024.1113.0.1-preview 245 4/22/2024
2024.1108.0.1-preview 269 4/17/2024
2024.1107.0.1-preview 270 4/16/2024
2024.1094.2 301 4/3/2024
2024.1094.1 258 4/3/2024
2024.1092.1 272 4/1/2024
2024.1088.1 280 3/28/2024
2024.1085.1 301 3/25/2024
2024.1080.2 310 3/20/2024
2024.1080.1 293 3/20/2024
2024.1078.1 306 3/18/2024
2024.1077.1 297 3/17/2024
2024.1073.1 329 3/13/2024
2024.1070.1 329 3/10/2024
2024.1069.1 313 3/9/2024
2024.1068.1 315 3/8/2024
2024.1066.2 292 3/6/2024
2024.1066.1 299 3/6/2024
2024.1065.1 320 3/5/2024
2024.1065.0.1-preview 265 3/5/2024
2024.1063.2 307 3/3/2024
2024.1063.1 287 3/3/2024
2024.1062.1 316 3/2/2024
2024.1061.2 312 3/1/2024
2024.1061.1 302 3/1/2024
2024.1060.2 307 2/29/2024
2024.1060.1 285 2/29/2024
2024.1060.0.5-preview 262 2/29/2024
2024.1060.0.3-preview 262 2/29/2024
2024.1059.0.1-preview 223 2/28/2024
2024.1058.1 278 2/27/2024
2024.1056.1 265 2/25/2024
2024.1055.1 265 2/24/2024
2024.1052.1 318 2/21/2024
2024.1050.2 290 2/20/2024
2024.1050.1 278 2/19/2024
2024.1049.1 299 2/18/2024
2024.1048.1 314 2/17/2024
2024.1047.1 283 2/16/2024
2024.1035.1 303 2/4/2024
2024.1034.2 281 2/3/2024
2024.1029.1 378 1/29/2024
2024.1023.1 380 1/23/2024
2024.1022.1 391 1/22/2024
2024.1020.1 361 1/20/2024
2024.1019.1 374 1/19/2024
2024.1017.1 400 1/17/2024
2024.1012.1 399 1/12/2024
2024.1010.1 406 1/10/2024
2024.1008.1 416 1/8/2024
2024.1007.1 407 1/7/2024
2024.1005.1 405 1/5/2024
2024.1004.1 446 1/4/2024
2023.1365.1 441 12/31/2023
2023.1362.1 399 12/28/2023
2023.1361.1 393 12/27/2023
2023.1359.1 433 12/25/2023
2023.1358.1 358 12/24/2023
2023.1357.1 368 12/23/2023
2023.1342.1 450 12/8/2023
2023.1336.1 441 12/2/2023
2023.1332.1 408 11/28/2023
2023.1330.1 401 11/26/2023
2023.1325.1 414 11/21/2023
2023.1323.1 324 11/19/2023
2023.1320.1 299 11/17/2023
2023.1318.1 405 11/15/2023
2023.1317.1 344 11/13/2023
2023.1307.1 359 11/3/2023
2023.1305.1 367 11/1/2023
2023.1304.1 350 10/31/2023
2023.1294.1 345 10/21/2023
2023.1290.1 375 10/16/2023
2023.1289.1 321 10/16/2023
2023.1284.1 383 10/11/2023
2023.1276.1 388 10/3/2023
2023.1275.1 382 10/2/2023
2023.1272.1 411 9/29/2023
2023.1269.1 361 9/26/2023
2023.1242.1 481 8/30/2023
2023.1231.1 525 8/19/2023
2023.1229.1 502 8/17/2023
2023.1228.1 501 8/16/2023
2023.1227.1 498 8/15/2023
2023.1224.2 506 8/12/2023
2023.1224.1 524 8/12/2023
2023.1213.2 583 8/1/2023
2023.1213.1 547 8/1/2023
2023.1209.1 520 7/27/2023
2023.1201.1 551 7/20/2023
2023.1197.1 547 7/16/2023
2023.1178.1 584 6/27/2023
2023.1175.1 596 6/24/2023
2023.1174.1 564 6/22/2023
2023.1169.1 579 6/18/2023
2023.1165.1 576 6/14/2023
2023.1161.1 640 6/11/2023
2023.1159.1 649 6/7/2023
2023.1157.1 624 6/6/2023
2023.1146.1 607 5/27/2023
2023.1139.1 661 5/19/2023
2023.1137.1 697 5/17/2023
2023.1136.1 671 5/16/2023
2023.1118.1 709 4/28/2023
2023.1111.1 735 4/21/2023
2023.1110.1 766 4/20/2023
2023.1105.1 766 4/15/2023
2023.1103.1 741 4/13/2023
2023.1102.1 734 4/12/2023
2023.1101.1 731 4/11/2023
2023.1090.1 788 3/31/2023
2023.1089.1 799 3/30/2023
2023.1088.1 816 3/29/2023
2023.1082.1 867 3/23/2023
2023.1078.1 876 3/19/2023
2023.1070.1 856 3/11/2023
2023.1069.1 878 3/10/2023
2023.1064.1 883 3/5/2023
2023.1060.1 941 3/1/2023
2023.1057.1 933 2/26/2023
2023.1046.1 957 2/15/2023
2023.1043.2 970 2/12/2023
2023.1043.1 954 2/12/2023
2023.1042.1 936 2/11/2023
2023.1041.1 967 2/10/2023
2023.1039.1 918 2/8/2023
2023.1036.1 975 2/5/2023
2023.1035.1 980 2/4/2023
2023.1033.1 1,007 2/2/2023
2023.1030.1 1,016 1/30/2023
2023.1028.1 1,015 1/28/2023
2023.1026.1 994 1/26/2023
2023.1025.1 999 1/25/2023
2023.1024.1 983 1/24/2023
2023.1023.1 1,002 1/23/2023
2022.1319.1 682 11/15/2022
2022.1309.1 980 11/5/2022
2022.1307.1 981 11/3/2022
2022.1295.1 1,027 10/22/2022
2022.1290.1 1,044 10/17/2022
2022.1289.2 1,022 10/16/2022
2022.1289.1 998 10/16/2022
2022.1283.1 1,072 10/10/2022
2022.1282.1 1,014 10/9/2022
2022.1278.1 1,039 10/5/2022
2022.1272.2 1,037 9/29/2022
2022.1272.1 1,052 9/29/2022
2022.1271.1 1,052 9/28/2022
2022.1266.1 1,084 9/23/2022
2022.1259.1 1,074 9/16/2022
2022.1257.1 1,095 9/14/2022
2022.1250.1 1,076 9/7/2022
2022.1250.0.2-preview 381 9/7/2022
2022.1249.0.2-preview 370 9/6/2022
2022.1249.0.1-preview 342 9/6/2022
2022.1197.1 1,150 7/16/2022
2022.1196.1 1,103 7/15/2022
2022.1194.1 1,161 7/13/2022
2022.1182.1 1,138 7/1/2022
2022.1178.1 1,141 6/27/2022
2022.1166.1 1,162 6/15/2022
2022.1157.1 1,153 6/6/2022
2022.1150.1 1,169 5/30/2022
2022.1149.1 1,159 5/29/2022
2022.1144.1 1,142 5/24/2022
0.6.2 1,146 5/23/2022
0.6.1 1,124 5/23/2022
0.6.0 1,161 5/14/2022
0.5.3 1,195 5/8/2022
0.5.2 1,190 5/1/2022
0.5.1 1,157 5/1/2022
0.5.0 1,169 4/23/2022
0.4.1 1,165 4/15/2022
0.4.0 1,180 4/9/2022
0.3.3 1,191 4/8/2022
0.3.2 1,174 4/1/2022
0.3.1 1,170 3/29/2022
0.3.0 1,123 3/28/2022
0.2.3 1,175 3/28/2022
0.2.2 1,204 3/25/2022
0.2.1 1,163 3/21/2022
0.2.0 1,201 3/18/2022