3.0.0¶
Release Date: December 17, 2025
๐ฏ Overview¶
Forge 3.0 is a major release that brings significant platform upgrades and architectural improvements. This release focuses on modernizing the platform with .NET 10, enhanced authentication with Entra ID support, and improved developer tooling.
Key Highlights¶
- ๐ Platform Upgrade: .NET 10.0 and Aspire 13.1 support
- ๐ Dual Authentication: Entra ID (corporate) + Okta (external) authentication
- ๐ ๏ธ CLI Rewrite: Unified services architecture with MCP integration
- ๐ฆ Terraform Restructuring: Snake_case variables and module version 3.0.0
- ๐ Documentation Overhaul: Restructured docs with new design system
โจ New Features¶
CLI Tools¶
CLI Rewrite with Unified Services Architecture ๐¶
Package: SAIF.Platform.CLI
Complete rewrite of the SAIF CLI with a modern unified services architecture and Model Context Protocol (MCP) integration for enhanced developer workflows.
Key Features:
- โ MCP Server Integration - Built-in MCP server for Forge documentation access
- โ Dynamic Command Discovery - ForgeCliTools for automatic CLI command registration
- โ
Token Generation - New
saif tokencommand for generating access tokens - โ HTML Content Extraction - ReverseMarkdown integration for documentation processing
New Commands:
saif token- Generate access tokens for API testingsaif update- Update CLI, templates, and development tools (including Aspire CLI)saif mcp start- Start MCP server for AI assistant integrationsaif mcp init- Initialize MCP configuration
Benefits:
- ๐ Simplified local development workflow
- ๐ Automatic mock configuration updates
- ๐ฏ Better integration with VS Code and GitHub Copilot
MCP Server for Forge Documentation ๐¶
Package: SAIF.Platform.CLI
Implement MCP server that provides Forge documentation directly to AI assistants and development tools.
Key Features:
- โ Markdown Download - Automatic download and caching of documentation
- โ Documentation Hooks - Improved content processing and navigation
Benefits:
- ๐ AI assistants can access Forge documentation in context
- ๐ Always up-to-date documentation access
NuGet Packages¶
.NET 10.0 and Aspire 13.1 Upgrade โฌ๏ธ¶
Packages: All SAIF.Platform packages
Upgraded the entire platform to .NET 10.0 LTS and Aspire 13.1 for improved performance and access to new framework features.
Key Changes:
- โ
Target Framework - Updated to
net10.0 - โ Aspire Integration - Updated to Aspire 13.1 components
- โ Preprocessor Cleanup - Removed legacy .NET compatibility shims
Configuration:
Enhanced Token Caching โก¶
Package: SAIF.Platform.Authentication
Improved token caching logic with maximum duration cap for better security and performance.
Benefits:
- ๐ Faster token retrieval from cache
- ๐ Maximum duration cap prevents stale tokens
- ๐ฏ Better handling of on-behalf-of token requests
Terraform Modules¶
Entra ID Authentication Module ๐¶
Module: security/azure/application
New internal authentication module for Entra ID (Azure AD) supporting corporate authentication scenarios.
Key Features:
- โ Application Registration - Full Entra ID app registration support
- โ Redirect URIs - Web application settings with redirect URI support
- โ Application Identifier URI - Custom identifier URI configuration
- โ Group Membership Claims - Support for groups claims in tokens
- โ Optional Claims - Configurable optional claims for access tokens
Example:
module "application" {
source = "app.terraform.io/saif/application/azure"
version = "~> 3.0.0"
display_name = "my-api"
identifier_uri = "api://my-api"
redirect_uris = ["https://my-api.saif.com/auth/callback"]
}
Application Permissions Module ๐¶
Module: security/azure/application_permissions
Comprehensive module for managing Entra ID application permissions, scopes, and app roles.
Key Features:
- โ Scopes and App Roles - Define OAuth2 scopes and application roles
- โ Pre-Authorized Applications - Automatic API access for trusted apps
- โ Admin Consent - Grant admin consent for delegated permissions
- โ Validation - Prevent overlapping app roles and scopes
Example:
module "permissions" {
source = "app.terraform.io/saif/application_permissions/azure"
version = "~> 3.0.0"
application_id = module.application.application_id
scopes = {
read = { description = "Read access" }
write = { description = "Write access" }
}
app_roles = {
admin = { description = "Administrator role" }
}
}
Entra ID Group Membership Module ๐ฅ¶
Module: security/azure/group_membership
New module for managing Entra ID group memberships for non-production role assignments.
Benefits:
- ๐ Simplified group membership management
- ๐ Role-based access control via Entra groups
- ๐ฏ Non-production environment support
APIM Policy Split for Entra/Okta ๐¶
Module: compute/azure/apim
Split API Management policies between Entra ID and Okta authentication providers for cleaner configuration.
Key Features:
- โ Separate Policies - Distinct policies for corporate (Entra) and external (Okta)
- โ JWT Validation - Proper openid-config URLs for each provider
- โ Centralized Auth URLs - Corp discovery keys and auth URLs in App Configuration
Project Templates¶
Template Updates for .NET 10 and Aspire 13.1 ๐ฆ¶
Templates: All SAIF templates
Updated all project templates to target .NET 10.0 with Aspire 13.1 integration.
Key Changes:
- โ Scalar Integration - Replaced Swagger with Scalar for API documentation
- โ JavaScriptAppResource - Updated web front-end resource type
- โ Event Subscription Setup - Azure packages for event subscription
- โ Pipeline Templates - Updated to reference releases/v3 branch
- โ Terraform Modules - Updated to version ~> 3.0.0
Usage:
Foundry Examples¶
Aspire Playwright Integration Testing ๐งช¶
Example: foundry/dotnet/aspire-playwright
New comprehensive example for integration testing with Playwright in Aspire applications.
Key Features:
- โ API Integration Tests - Test API endpoints with generated clients
- โ Web Integration Tests - End-to-end browser testing
- โ Kiota Client Generation - Generated API clients for Weather API
Documentation:
DevTunnels Webhook Receiver ๐¶
Example: foundry/dotnet/devtunnels-simple-webhook
Sample application demonstrating webhook receiver with DevTunnels and real-time dashboard.
Key Features:
- โ DevTunnels Integration - Receive webhooks via Azure DevTunnels
- โ Real-Time Dashboard - Live webhook monitoring UI
- โ Multi-Service Orchestration - Aspire-based service coordination
WireMock CLI Aspire Hosting Extension ๐งช¶
Package: SAIF.Platform.Aspire.Hosting
New Aspire hosting extension for WireMock CLI with full orchestration, cloud sync, and service discovery support.
Key Features:
- โ AddWiremockCli Extension - Aspire resource builder for WireMock CLI orchestration
- โ AddMock Method - Add mock services with port allocation and service discovery
- โ
WireMock Cloud Sync - Automatic pull from WireMock Cloud projects with
autoUpdateoption - โ
Health Checks - Built-in health monitoring via
/__admin/healthendpoint - โ Dashboard Integration - Mock resources visible in Aspire dashboard with state management
- โ
Service Discovery - Seamless
WithReference()integration for consuming services
๐ง Enhancements¶
CLI Tools¶
- โ SAIF.Platform.CLI - Enhanced application search functionality in token generation
- โ SAIF.Platform.CLI - Updated HttpClient configuration for token service
- โ SAIF.Platform.CLI - Improved command descriptions for clarity and consistency
NuGet Packages¶
- โ SAIF.Platform.Authentication - Simplified OpenID Connect service scope configuration
- โ SAIF.Platform.Authentication - Removed unnecessary email and User.Read scopes
- โ SAIF.Platform.Kiota - Consolidated ApiDescription.Client into HttpClientLibrary package
Terraform Modules¶
- โ All Modules - Standardized variable naming to snake_case
- โ All Modules - Updated provider version constraints (AzureRM >= 4.0, AzureAD >= 3.0)
- โ security/azure - Updated UUID generation for scopes and roles
- โ security/azure - Improved token timeout configuration logic
- โ security/okta - Standardized variable names and YAML keys to snake_case
Project Templates¶
- โ saif-feature-api - Added auth terraform templates and sample configs
- โ All Templates - Improved formatting and structure of resource builder
- โ All Templates - Added descriptions to project templates for clarity
Documentation¶
- โ MkDocs - Updated table of contents depth for better navigation
- โ Design System - New design system documentation and guidelines
- โ Navigation - Reordered navigation items for improved structure
๐ Bug Fixes¶
NuGet Packages¶
- ๐ SAIF.Platform.Authentication - Fixed on-behalf-of token request parameters handling
- ๐ SAIF.Platform.Authentication - Corrected casing for Microsoft Graph permission name
- ๐ SAIF.Platform.Authentication - Fixed support for missing projectId and null authTenant when building scopes
- ๐ SAIF.Platform.Authentication - Normalized environment name in scope generation
- ๐ SAIF.Platform.Authentication - Include roles claim when adding custom token claims
- ๐ SAIF.Platform.Aspire - Corrected scalar path in ApiResourceBuilder
- ๐ SAIF.Platform.Kiota - Updated scope assertions for tenant-specific configurations
Terraform Modules¶
- ๐ security/azure - Fixed group_membership_claims format to array
- ๐ security/azure - Fixed claim value formatting in JWT validation
- ๐ security/azure - Corrected openid-config URL in JWT validation policies
- ๐ security/azure - Use oauth2_permission_scopes when resolving scope ids
- ๐ security/azure - Use login.microsoftonline.com OIDC URLs for corporate auth
- ๐ security/okta - Updated audience to use correct value from OktaApp output
- ๐ security/okta - Updated Okta user and app auth prefix values
- ๐ compute/azure - Fixed for_each errors with unknown conditionals
- ๐ compute/azure - Enable public network access for function app
- ๐ Key Vault - Updated secret references to use versionless ID
Project Templates¶
- ๐ Templates - Added fallback port values for project templates
- ๐ Templates - Updated OpenAPI file paths in configuration and scripts
CI/CD¶
- ๐ Azure DevOps - Corrected branch reference in versioning configuration
- ๐ Azure DevOps - Updated vars template paths in multiple YAML files
๐ Documentation¶
New Documentation¶
- ๐ Forge 2.x to 3.0 Migration Guide - Comprehensive migration guide for upgrading
- ๐ API Integration Testing Guide - Testing APIs with Playwright
- ๐ Web Integration Testing Guide - Browser testing with Aspire
- ๐ Design System Guidelines - UI/UX patterns and components
- ๐ JWT Creation Guide (Updated) - Corporate and external user JWT creation
Updated Documentation¶
- ๐ Version Compatibility Matrix - Updated for .NET 10, Aspire 13.1
- ๐ TypeSpec Guide - Updated OpenAPI output path configuration
- ๐ CLI Installation Guide - Updated prerequisites and setup
- ๐ WireMock CLI Hosting Guide - New sections and examples
โ ๏ธ Breaking Changes¶
1. Okta Workspaces Limited to External Tenant¶
Change Description:
Okta authentication workspaces are now restricted to the External tenant only. Corporate authentication must use Entra ID.
Migration Guide:
# Before (Forge 2.x) - Okta for corporate
module "okta_auth" {
source = "app.terraform.io/saif/okta-app-auth/okta"
tenant = "Corporate" # No longer supported
}
# After (Forge 3.0) - Entra ID for corporate
module "entra_auth" {
source = "app.terraform.io/saif/application/azure"
version = "~> 3.0.0"
}
Impact:
- Applications using Okta for corporate authentication must migrate to Entra ID
- External tenant applications continue to use Okta
Action Required:
- Update Terraform configurations to use Entra ID modules for corporate auth
- Update application code to handle Entra ID tokens
- See Migration Guide for detailed steps
2. Terraform Variable Naming (snake_case)¶
Change Description:
All Terraform variable names have been standardized to snake_case for consistency.
Migration Guide:
# Before (Forge 2.x)
module "app" {
projectId = "my-project"
displayName = "My App"
authTenant = "Corporate"
}
# After (Forge 3.0)
module "app" {
project_id = "my-project"
display_name = "My App"
auth_tenant = "Corporate"
}
Impact:
- All Terraform configurations must update variable names
Action Required:
- Run the provided migration script or manually update variable names
- Validate Terraform plans before applying
3. .NET 10.0 Target Framework¶
Change Description:
All packages now target .NET 10.0 only. .NET 8.0 and 9.0 are no longer supported.
Migration Guide:
<!-- Before (Forge 2.x) -->
<TargetFramework>net8.0</TargetFramework>
<!-- After (Forge 3.0) -->
<TargetFramework>net10.0</TargetFramework>
Impact:
- Applications must upgrade to .NET 10.0 SDK
- CI/CD pipelines must use .NET 10.0 runtime
Action Required:
- Install .NET 10.0 SDK
- Update target framework in project files
- Update pipeline templates to use dotnet-10.0 images
4. Removed Templates¶
Change Description:
Legacy templates have been removed: saif-azure-web-onprem, saif-console, saif-web-api, saif-web-mvc.
Impact:
- New projects cannot use these templates
- Existing projects are unaffected
Action Required:
- Use
saif-feature-apiorsaif-aspiretemplates for new projects - See CLI Installation Guide for available templates
๐ Additional Notes¶
- Total commits: 240
- Files changed: 1,200+
- Contributors: Emmitt Johnson, Brian Sheridan, Jason Coria Corona Yue, Platform Build Service
Upgrade Path¶
- Review Breaking Changes - Understand impact on your applications
- Update .NET SDK - Install .NET 10.0 SDK
- Update Terraform - Run migration scripts for variable naming
- Update Authentication - Migrate corporate auth from Okta to Entra ID
- Test Thoroughly - Validate all integrations before deploying
Support¶
- ๐ง Teams Support Channel: Support
- ๐ Migration Guide