0.10.0
🎉 Highlights
This release adds MySQL, MariaDB, and diagnostic settings, expands Cosmos DB with custom indexing policies and composite-index enforcement, brings Service Bus subscription rules and topic filters, and lands ADLS user delegation key vending. Blob storage sees a coordinated conformance pass and the ARM plumbing gets a substantial refactor for cleaner service dispatch. Welcome to the 5 first-time contributors.
🆕 New: MySQL and MariaDB
Azure Database for MySQL and MariaDB support lands (#150), extending the PostgreSQL Flexible Server story from 0.9.0. All three major open-source database engines are now emulated on the Azure side, matching what real Azure PaaS offers.
📊 New: Diagnostic settings
Diagnostic settings emulation ships alongside MySQL/MariaDB (#150). IaC and applications that wire up log routing to Log Analytics, Storage, or Event Hubs can now be tested locally.
🌐 New: LB, NSG, Application Gateway shapes
Synthesized network resource shapes for Load Balancers, Network Security Groups, and Application Gateway (#153), unblocking azurerm Terraform patterns that provision these resources. Combined with the Private Endpoint / Private DNS work from 0.9.0, the Azure networking IaC story is meaningfully more complete.
🗃️ Cosmos DB: custom indexing policies
Cosmos DB gains custom indexing policies with composite-index ORDER BY enforcement (#129). Applications with real-world query patterns that depend on composite indexes for correctness now behave the way real Cosmos does — enforcing index requirements rather than silently ignoring them.
🚌 Service Bus: subscription rules and topic filters
Subscription rules with CorrelationFilter, SqlFilter, and $Default filters support (#130). Real Service Bus fan-out patterns using content-based routing are now testable end to end.
🔐 ADLS user delegation keys
User delegation key vending for Azure Data Lake Storage (#122). Applications that use user delegation SAS instead of account keys — the recommended pattern for Entra ID-authenticated access — now work locally.
🪣 Blob storage conformance pass
Four coordinated Blob storage improvements this cycle:
- Service properties XML serialized properly instead of returning
toString()(@thomhurst, #133) - Service properties XML returned (@aniketshukla1, #144)
- Mandatory Get Blob and container response headers returned (@mcarvalho-singlestore, #146)
- Unimplemented
compoperations no longer route toputBlob(#155)
🧱 ARM plumbing refactor
Two coordinated internals improvements:
- Handlers describe their own routes and enablement (#115)
- ARM provider dispatch unified with strict ARM body parsing (#118)
Groundwork for consistent behavior as the service catalog continues to grow. Also lands: bare Key Vault deleted- collections* correctly routed, and disabled services report 503 instead of confusing fall-through errors (#114).
🐳 Docker labeling
Emulator containers and volumes are now labeled with a centralized floci-az prefix (#157). Easier cleanup, debugging, and multi-tenant orchestration.
🪟 Windows TLS fix
TLS certificate paths now use forward slashes so TLS starts on Windows (#142). Windows users can now use HTTPS locally without the path-separator mismatch that previously broke certificate loading.
📧 ACS Email SDK contract fix
ACS Email operation contract now matches what the SDKs expect (#148), so real SDKs can complete a send end to end rather than getting stuck partway through the operation.
✨ New Features
New services
- feat(mysql, mariadb, diagnostic-settings): add MySQL, MariaDB, and diagnostic settings emulation by @hectorvent in #150
- feat(network): synthesize LB, NSG, and Application Gateway shapes for
azurermby @hectorvent in #153
Service expansions
- feat(cosmos): custom indexing policies with composite-index
ORDER BYenforcement by @thomhurst in #129 - feat(servicebus): subscription rules and topic filters (
CorrelationFilter,SqlFilter,$Default) by @thomhurst in #130 - feat(adls): add user delegation key vending by @snazy in #122
Docker
- feat(docker): label emulator containers and volumes, centralize the
floci-azname prefix by @hectorvent in #157
🐛 Bug Fixes
Blob storage
- fix(storage): serialize service properties XML instead of returning
toStringby @thomhurst in #133 - fix(storage): return service properties XML by @aniketshukla1 in #144
- fix(blob): return mandatory Get Blob and container response headers by @mcarvalho-singlestore in #146
- fix(blob): stop routing unimplemented
compoperations toputBlobby @hectorvent in #155
Service Bus / Email / TLS
- fix(servicebus): stop the CBS responder from exhausting file descriptors by @hectorvent in #154
- fix(email): match the ACS operation contract so the SDKs can complete a send by @jogerj in #148
- fix(tls): emit forward-slash certificate paths so TLS starts on Windows by @Ali-Shaikh in #142
Core
- fix(core): route bare Key Vault deleted-* collections and report disabled services as 503 by @hectorvent in #114
- fix(core): unify ARM provider dispatch and parse ARM bodies strictly by @hectorvent in #118
🧰 Refactors
- chore(core): let handlers describe their own routes and enablement by @hectorvent in #115
🧪 Tests
- chore(test): merge duplicate service-properties test methods from #133 / #144 by @hectorvent in #152
- chore(test): compare delegation-key expiry as instants, not strings by @hectorvent in #156
🧰 CI
- chore(ci): welcome first-time contributors on their first issue or PR by @hectorvent in #151
📚 Documentation
- docs(services): flesh out blob / queue / table docs and add ARM reference by @hectorvent in #117
- chore(config): document Postgres and SQL storage defaults in
application.ymlby @hectorvent in #116
👋 New Contributors
A warm welcome to everyone making their first contribution to floci-az:
- @snazy in #122
- @thomhurst in #129
- @aniketshukla1 in #144
- @mcarvalho-singlestore in #146
- @jogerj in #148
Full Changelog: 0.9.0...0.10.0