Skip to main content

Roadmap

Recent releases and planned milestones for upcoming Topaz versions. The roadmap reflects current intentions and may change.

What's coming

v1.6 is now released. Here is a quick overview of the services and features planned for upcoming releases.

v1.7 beta
  • Entra IDInteractive /devicelogin sign-in page
  • Virtual NetworkPrivate endpoint IP tracking
  • Azure StorageService SAS permission & source IP enforcement
  • Cosmos DBSQL API data plane (CRUD, query, auth)
  • App ServiceKudu / SCM zip deploy & deployment list
  • Load BalancerInitial control plane
  • Service BusDead-letter queues · sessions · topic filters · SAS keys
  • Container RegistryReal Docker build-and-push for ACR Tasks
v1.8 preview
  • Azure StorageBlob auth enforcement · revoke user delegation keys
  • App ServiceTransparent HTTP request forwarding to Docker containers
  • Chaos EngineeringFault injection middleware · rule configuration · CLI
  • App ConfigurationInitial control plane · data plane · feature flags
  • Azure DisksSAS access LRO polling
v1.9 preview
  • Application InsightsInitial control plane · telemetry ingestion · KQL query
  • Log AnalyticsInitial control plane · logs ingestion · KQL query
  • Azure DisksFull azcopy-compatible disk streaming via SAS URL
  • Azure StorageGeo-replication sync simulation
  • Cosmos DBTTL enforcement · container-level RBAC
v1.10 preview
  • API ManagementInitial control plane · APIs · Products · Backends · Policies
  • Container InstancesInitial control plane · lifecycle operations · container logs
  • Availability SetsInitial control plane · list available VM sizes
  • Private EndpointsInitial control plane · IP allocation via subnet CIDR
  • Redis CacheInitial control plane · firewall rules · MCP provisioning tool

v1.7-beta

Entra — /devicelogin interactive sign-in page

FeatureDescription
PreviewGET /devicelogin pageServe an HTML form that accepts a user_code and a username; completing the form marks the corresponding device code as authorized for the submitted user
PreviewPOST /devicelogin handlerLook up the device code by user_code, write into DeviceCodeEndpoint.AuthorizedDeviceCodes, and redirect to a confirmation page
PreviewProper authorization_pending pollingToken polling returns {"error":"authorization_pending"} until the /devicelogin form is submitted, matching real Azure device code flow semantics

Virtual Network — Private Endpoint IP tracking

FeatureDescription
PreviewPrivate Endpoint IP trackingExtend the IP allocation registry to record IPs for Private Endpoints; requires implementing the Microsoft.Network/privateEndpoints control plane (PUT/GET/DELETE/LIST) and hooking it into IpAllocationRegistry

Storage — Service SAS permission enforcement

FeatureDescription
PreviewService SAS permission-letter enforcementMap sp= letters to HTTP verb; return 403 AuthorizationPermissionMismatch on mismatch for Blob, Queue, and Table
PreviewSAS source IP (sip) enforcementParse single-address and hyphenated-range sip= values; return 403 AuthorizationSourceIPMismatch when the request source IP falls outside the declared range; applies to Blob, Queue, and Table

Azure Cosmos DB — SQL API data plane

FeatureDescription
PreviewData plane scaffold and master-key authDedicated port; HMAC-SHA256 master-key signature validation (verb/resourceType/resourceLink/date StringToSign); 401 on invalid or expired signatures
PreviewDatabase operationsPOST /dbs, GET /dbs/{db}, DELETE /dbs/{db}, GET /dbs — full resource lifecycle with _rid, _self, _etag, _ts and x-ms-request-charge header
PreviewCollection operationsPOST/GET/PUT/DELETE /dbs/{db}/colls/{coll}, GET /dbs/{db}/colls — create, replace, and delete collections including indexingPolicy and partitionKey
PreviewDocument CRUDPOST/GET/PUT/PATCH/DELETE /dbs/{db}/colls/{coll}/docs/{id} — full item lifecycle with partition key enforcement, ETag optimistic concurrency (If-Match / 412), and JSON Patch partial updates
PreviewSQL query executionPOST /dbs/{db}/colls/{coll}/docs with x-ms-documentdb-isquery: true — parameterised SQL subset: SELECT, FROM, WHERE, ORDER BY, OFFSET/LIMIT, aggregates (COUNT, SUM, MIN, MAX, AVG); continuation-token pagination
PreviewMCP Server toolsCreateCosmosDbAccount, CreateCosmosDbDatabase, CreateCosmosDbContainer; GetConnectionStrings extended with Cosmos DB endpoint and key
PreviewPublic IP Address APIMicrosoft.Network/publicIPAddresses — PUT/GET/DELETE/LIST/PATCH endpoints; stub ipAddress assigned on creation; supports az vm create public IP flow
PreviewCLI configurable defaultstopaz configure command persists default --subscription-id, --resource-group, and --location to ~/.topaz/defaults.json; all commands apply them when the flag is omitted, following the precedence: explicit flag > environment variable > config file

Azure App Service — Kudu / SCM data plane

FeatureDescription
PreviewKudu zip deployPOST /api/zipdeploy on *.scm.azurewebsites.topaz.local.dev:8896 — accepts a zip archive, stores it to disk, persists a DeploymentRecord, returns 202 Accepted with a Location header
PreviewDeployment listGET /api/deployments — returns the persisted deployment records for the site as a JSON array

Azure Load Balancer — initial control plane

FeatureDescription
StableNew service scaffoldTopaz.Service.LoadBalancer project with models (LoadBalancerResource, LoadBalancerResourceProperties), resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.Network/loadBalancers
PreviewLoad Balancer CRUDCreate, get, update tags, delete, list by resource group, and list by subscription for Microsoft.Network/loadBalancers; all structural properties (frontend IP configurations, backend pools, LB rules, probes, inbound NAT rules, outbound rules) persisted and round-tripped; provisioningState always Succeeded

Service Bus — advanced messaging features

FeatureDescription
PreviewDead letter queuesMove messages exceeding MaxDeliveryCount or explicitly dead-lettered to <entity>/$DeadLetterQueue; expose as an addressable AMQP entity so SDK receivers can consume it
PreviewMessage sessionsSession-based messaging (requiresSession = true) for queues and subscriptions; session-filtered AMQP Attach frames; per-session lock enforcement; RenewSessionLock, GetSessionState, and SetSessionState via AMQP management link
PreviewTopic filters and rulesFull ARM CRUD for subscription rules (CorrelationRuleFilter, SqlRuleFilter, SqlRuleAction); message routing at publish time evaluates active rules and only forwards matching messages to each subscription
PreviewAuthorization rules and SAS keysPer-namespace, per-queue, and per-topic authorization rule CRUD; listKeys and regenerateKeys actions; 256-bit SAS key pairs persisted and rotatable

ARM Deployments — subscription-scoped Bicep support

FeatureDescription
PreviewMicrosoft.Resources/resourceGroups template resourceHandle resourceGroups entries in subscription-scoped templates: create or update the resource group before processing dependent resources; required for any Bicep file compiled with targetScope = 'subscription'
PreviewMicrosoft.Resources/deployments nested deploymentExecute inline nested deployment resources: extract the properties.template payload, resolve scope to the target resource group, and recursively provision all inner resources; persist the nested deployment as a child object retrievable via ARM GET
PreviewDeployment outputs populated on completionAfter all template resources are provisioned, evaluate the outputs block and persist the result; return populated outputs on every subsequent GET so that az deployment sub create, azure/arm-deploy, and the Terraform azurerm provider can read cross-stage values

Container Registry — Real Docker build-and-push execution

FeatureDescription
PreviewReal Docker execution for ACR TasksUpgrade the ACR run emulation from immediate-Succeeded to real container workloads: detect Docker at host startup, git clone the contextPath, spawn docker build + docker push to the local OCI registry, drive real status transitions (QueuedRunningSucceeded / Failed), and stream actual build output to the log endpoint

v1.8-preview

ARM Deployments — deployment operations tracking

FeatureDescription
PreviewGet deployment operation (resource group / subscription scope)GET .../deployments/{name}/operations/{operationId} — requires per-resource operation tracking in the orchestrator
PreviewList / Get deployment operations at management group scopeGET .../managementGroups/{id}/providers/Microsoft.Resources/deployments/{name}/operations[/{operationId}]
PreviewList / Get deployment operations at tenant scopeGET /providers/Microsoft.Resources/deployments/{name}/operations[/{operationId}]

Azure Storage — Blob authentication enforcement

FeatureDescription
PreviewReject unauthenticated requests to private containersReturn 401 + WWW-Authenticate when a Blob data-plane request has no Authorization header and no valid SAS query string, and the target container's public-access level is none
PreviewRevoke User Delegation KeysARM POST .../revokeUserDelegationKeys — persist a per-account revocation timestamp and reject User Delegation SAS tokens whose skt predates it

Azure App Service — transparent request forwarding

FeatureDescription
PreviewHTTP request forwardingData-plane endpoint on *.azurewebsites.topaz.local.dev:8895 that proxies all traffic to the user's Docker Compose container; target port read from the WEBSITES_PORT app setting (default 80), container resolved by matching the Compose service name to the App Service site name

Chaos Engineering — controllable fault injection

FeatureDescription
StableChaos mode toggle and CLItopaz chaos enable/disable/status CLI commands and corresponding REST control-plane endpoints (POST /topaz/chaos/enable, POST /topaz/chaos/disable, GET /topaz/chaos/status); state is in-memory
PreviewFault rule configurationPer-service (or global *) fault rules with fields: serviceNamespace, faultType (Timeout | TransientError | Throttle | ServiceUnavailable), faultRate (0–1), and optional httpStatusCode; CRUD via PUT/GET/DELETE /topaz/chaos/rules/{ruleId}
PreviewRouter-level fault injection middlewareWhen chaos mode is enabled, the router evaluates active rules before dispatching: injects configurable delays, 429/500/503 responses, or connection drops at the configured probability; every injected fault is logged

Azure App Configuration — initial control plane and data plane

FeatureDescription
StableNew service scaffoldTopaz.Service.AppConfiguration project with ConfigurationStoreResource, ConfigurationStoreResourceProperties, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.AppConfiguration/configurationStores
PreviewConfigurationStore CRUDCreate, get, update (tags, SKU, publicNetworkAccess), delete, list by resource group, and list by subscription; endpoint field emitted as https://{name}.azconfig.topaz.local.dev:<port>/
StableAccess key managementlistKeys and regenerateKey ARM actions; two read-write and two read-only key pairs persisted and rotatable
PreviewData plane — key-value APIGET/PUT/DELETE /kv/{key} and GET /kv (list with ?key=, ?label=, $select= filtering); GET /labels; PUT/DELETE /locks/{key}; HMAC-SHA256 credential authentication; ETag / If-Match concurrency
PreviewFeature flag supportKey-values with content type application/vnd.microsoft.appconfig.ff+json under the .appconfig.featureflag/ key prefix; compatible with the Azure SDK FeatureFlagConfigurationSetting model
StableMCP Server toolCreateAppConfigurationStore tool; GetConnectionStrings extended with App Configuration connection string

Azure Disks — SAS access LRO polling

FeatureDescription
PreviewLRO polling for beginGetAccessUpgrade beginGetAccess to return 202 Accepted + Azure-AsyncOperation polling URL; GET on the URL transitions InProgressSucceeded with the accessSAS stub in properties.output; LRO state held in-memory per disk

v1.9-preview

Application Insights — initial control plane and ingestion

FeatureDescription
StableNew service scaffoldTopaz.Service.ApplicationInsights project with models, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for microsoft.insights/components
PreviewComponent CRUDCreate, get, update (tags, retentionInDays), delete, list microsoft.insights/components; instrumentationKey and connectionString generated on creation and stable across updates
PreviewTelemetry ingestionPOST /v2/track accepts JSON arrays of Application Insights telemetry envelopes (RequestData, TraceData, ExceptionData, EventData, MetricData, DependencyData); persists to disk per instrumentation key
PreviewBasic query APIPOST /v1/apps/{instrumentationKey}/query — minimal KQL subset over persisted telemetry; supports requests, traces, exceptions, customEvents, customMetrics, dependencies tables; where, project, summarize count(), order by, take operators; returns standard {"tables":[...]} schema

Log Analytics — initial control plane and ingestion

FeatureDescription
StableNew service scaffoldTopaz.Service.LogAnalytics project with WorkspaceResource, WorkspaceResourceProperties, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.OperationalInsights/workspaces
PreviewWorkspace CRUDCreate, get, update (tags, retentionInDays, SKU), delete, list Microsoft.OperationalInsights/workspaces; workspaceId / customerId generated as stable GUIDs on creation
PreviewLogs Ingestion APIPOST https://{workspaceId}.ods.opinsights.topaz.local.dev/api/logs — accepts JSON log arrays with Log-Type header; persists records per custom table name; returns 200 with empty body
PreviewKQL query APIPOST /v1/workspaces/{workspaceId}/query — minimal KQL subset over ingested custom tables; where, project, extend, summarize, order by, take, union operators; returns standard {"tables":[...]} schema

Azure Disks — full disk data streaming (azcopy)

FeatureDescription
PreviewFull azcopy-compatible disk streamingUpgrade the SAS endpoint from empty-body to a fully streamable sparse disk image: GET /disk-sas/{uniqueId} honours Range requests; PUT accepts page-blob byte-range uploads; HEAD reports Content-Length = diskSizeGB * 1073741824; large disks use an on-disk .topaz/disks/{uniqueId}.vhd sparse file

Azure Storage — geo-replication sync simulation

FeatureDescription
PreviewGeo-replication sync schedulerBackground service (GeoReplicationSyncScheduler) that periodically updates LastGeoSyncTime on RA-GRS/RAGZRS accounts; stats endpoints return the persisted timestamp instead of wall-clock time, simulating realistic replication lag

Azure Cosmos DB — SQL Container advanced features

FeatureDescription
PreviewTTL enforcementBackground scheduler that purges expired documents from SQL containers where defaultTtl is set; prerequisite: data-plane document store (v1.7-beta)
PreviewContainer-level RBACPer-container access policy enforcement integrated with the data-plane auth layer; prerequisite: data-plane authentication surface (v1.7-beta)

v1.10-preview

Azure API Management — initial control plane and data plane

FeatureDescription
StableNew service scaffoldTopaz.Service.ApiManagement project with ApiManagementServiceResource, ApiManagementServiceResourceProperties, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.ApiManagement/service
PreviewService CRUDCreate, get, update (tags, SKU, publisherEmail), delete, list by resource group, and list by subscription for Microsoft.ApiManagement/service; gatewayUrl, portalUrl, and managementApiUrl derived from service name and persisted on creation
PreviewAPIs CRUDCreate, get, update, delete, and list API definitions under a service instance; fields: displayName, description, serviceUrl, path, protocols, apiType (http/soap/websocket/graphql); persisted as subresources
PreviewProducts CRUDCreate, get, update, delete, and list Products; product-to-API association via PUT/DELETE/GET .../products/{id}/apis/{apiId}; fields: displayName, description, state, subscriptionRequired, approvalRequired
PreviewBackends CRUDCreate, get, update, delete, and list Backends; fields: url, protocol, description, title, resourceId; backends are referenced by policy expressions and persisted as subresources
PreviewPolicies CRUDService-level and API-level policy documents stored and returned as raw APIM XML; no policy execution in v1.10 — storage and round-trip only

Azure Container Instances — initial control plane

FeatureDescription
StableNew service scaffoldTopaz.Service.ContainerInstances project with ContainerGroupResource, ContainerGroupResourceProperties, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.ContainerInstance/containerGroups
PreviewContainer Groups CRUDCreate, get, update (tags), delete, list by resource group, and list by subscription for Microsoft.ContainerInstance/containerGroups; provisioningState is always Succeeded; instanceView.state is always Running
PreviewLifecycle operationsStart, stop, and restart container group operations (no-op in emulation; provisioningState and instanceView.state remain unchanged)
PreviewContainer logsGET .../containers/{containerName}/logs returns a stub log line; satisfies az container logs without running real containers

Availability Sets — initial control plane

FeatureDescription
StableAvailability Set CRUDCreate, get, update (tags, platformFaultDomainCount), delete, list by resource group, and list by subscription for Microsoft.Compute/availabilitySets; provisioningState is always Succeeded; full Deploy() and RouteDeployment() support
PreviewList available VM sizesGET .../availabilitySets/{name}/vmSizes returns the same stub catalogue as the compute SKUs endpoint

Private Endpoints — initial control plane

FeatureDescription
StablePrivate Endpoint CRUDCreate, get, delete, list by resource group, and list by subscription for Microsoft.Network/privateEndpoints; assigns an IP from the linked subnet CIDR via IpAllocationRegistry on creation; privateLinkServiceConnectionState is always Approved; full Deploy() and RouteDeployment() support

Azure Redis Cache — initial control plane

FeatureDescription
StableNew service scaffoldTopaz.Service.Redis project with RedisResource, RedisResourceProperties, resource provider, control plane (including Deploy()), host registration, and RouteDeployment() case for Microsoft.Cache/redis
PreviewRedis Cache CRUDCreate, get, update (tags, SKU, enableNonSslPort, minimumTlsVersion, redisConfiguration), delete, list by resource group, and list by subscription; access keys generated on creation and exposed via listKeys / regenerateKey
PreviewFirewall Rules CRUDCreate, get, update, delete, and list firewall rules per cache; no actual IP filtering enforced in the emulator
PreviewMCP provisioning toolCreateRedisCache MCP tool; GetConnectionStrings extended with Redis connection string

Future / Unplanned

Ideas not yet tied to a specific milestone.

OpenTofu integration

FeatureDescription
PreviewVerified compatibility & test suiteDedicated Topaz.Tests.OpenTofu project mirroring the Terraform suite; build script and integration guide

Have a suggestion?

Open a discussion or upvote an existing issue on GitHub.

Star on GitHub