# floci-io/floci-az architecture

> Architecture diagram of the GitHub repository floci-io/floci-az, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-03). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/floci-io/floci-az
- Repository: https://github.com/floci-io/floci-az

## Overview

Floci-Az is a local Azure emulator: clients send Azure SDK, CLI, or Terraform requests to its local endpoint and use the emulated services in place of Azure. Its documented surface spans data-plane services, identity, ARM resources and deployments, and container-backed runtimes. The graph preserves those major capability areas and the shared storage layer. Source excerpts are limited, so most service-to-service wiring is not asserted; edges show only documented relationships or connections visible in the source index.

Main entry points: [`src/main/java/io/floci/az/core/AzureRequest.java`](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/AzureRequest.java) (Local emulator), [`src/main/java/io/floci/az/core/storage/StorageFactory.java`](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/storage/StorageFactory.java) (Storage backends), [`src/main/java/io/floci/az/core/auth/AuthPipeline.java`](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/auth/AuthPipeline.java) (Request authentication), [`src/main/java/io/floci/az/core/tls/TlsProxyServer.java`](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/tls/TlsProxyServer.java) (TLS proxy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Request entry"]
  node_emulator["Local emulator<br/>[AzureRequest.java]"]
end

subgraph group_platform["Shared platform"]
  node_config["Emulator config"]
  node_storage[("Storage backends")]
  node_cloud["Cloud profiles<br/>[CloudProfile.java]"]
  node_directory[("Azure directory")]
  node_auth["Request authentication<br/>[AuthPipeline.java]"]
  node_tls["TLS proxy"]
  node_ui["Web console<br/>[UiController.java]"]
end

subgraph group_data["Data services"]
  node_storage_services["Storage services"]
  node_appconfig["App Configuration"]
  node_cosmos["Cosmos DB<br/>[CosmosHandler.java]"]
  node_database_engines["Cosmos engines"]
  node_keyvault["Key Vault"]
  node_sql_databases["Managed databases<br/>[SqlHandler.java]"]
end

subgraph group_compute["Compute and messaging"]
  node_functions["Azure Functions"]
  node_eventhub["Event Hubs"]
  node_servicebus["Service Bus"]
  node_aks["Kubernetes service"]
  node_container_services["Container services"]
end

subgraph group_management["Azure management"]
  node_arm[("ARM resources")]
  node_deployments["Template deployments"]
  node_policy["Azure Policy<br/>[PolicyEngine.java]"]
  node_resourcegraph["Resource Graph<br/>[KqlEngine.java]"]
  node_entra["Entra identity<br/>[TokenEndpoint.java]"]
  node_network["Virtual networks"]
  node_eventgrid["Event Grid"]
  node_apim["API Management"]
  node_monitor["Monitor and logs"]
end

node_clients(("Azure clients"))

node_clients -->|"send requests"| node_emulator
node_storage -->|"reads settings"| node_config
node_auth -->|"resolves request auth"| node_emulator
node_database_engines -.->|"Cosmos engine APIs"| node_cosmos
node_functions -.->|"runs uploaded functions"| node_clients
node_eventhub -.->|"AMQP and Kafka access"| node_clients
node_tls -.->|"serves HTTPS"| node_emulator
node_ui -.->|"console endpoint"| node_emulator

click node_emulator "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/AzureRequest.java"
click node_config "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/config/EmulatorConfig.java"
click node_storage "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/storage/StorageFactory.java"
click node_cloud "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/cloud/CloudProfile.java"
click node_directory "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/directory/AzureDirectory.java"
click node_auth "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/auth/AuthPipeline.java"
click node_storage_services "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/blob/BlobServiceHandler.java"
click node_appconfig "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/appconfig/AppConfigHandler.java"
click node_cosmos "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/cosmos/CosmosHandler.java"
click node_database_engines "https://github.com/floci-io/floci-az/tree/main/src/main/java/io/floci/az/services/cosmos/engine/impl"
click node_keyvault "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/keyvault/KeyVaultHandler.java"
click node_sql_databases "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/sql/SqlHandler.java"
click node_functions "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/functions/FunctionsServiceHandler.java"
click node_eventhub "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/eventhub/EventHubHandler.java"
click node_servicebus "https://github.com/floci-io/floci-az/blob/main/src/artemis-amqp-patch/java/org/apache/activemq/artemis/protocol/amqp/proton/ServiceBusSessionSupport.java"
click node_aks "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/aks/AksClusterManager.java"
click node_container_services "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/aci/AciContainerGroupManager.java"
click node_arm "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/arm/ArmResourceStore.java"
click node_deployments "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/deployments/DeploymentEngine.java"
click node_policy "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/policy/evaluation/PolicyEngine.java"
click node_resourcegraph "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/resourcegraph/kql/KqlEngine.java"
click node_entra "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/entra/TokenEndpoint.java"
click node_network "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/network/NetworkService.java"
click node_eventgrid "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/eventgrid/EventGridService.java"
click node_apim "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/apim/ApiManagementService.java"
click node_monitor "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/monitor/MonitorHandler.java"
click node_tls "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/tls/TlsProxyServer.java"
click node_ui "https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/ui/UiController.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_emulator,node_clients toneBlue
class node_config,node_storage,node_cloud,node_directory,node_auth,node_tls,node_ui toneAmber
class node_storage_services,node_appconfig,node_cosmos,node_database_engines,node_keyvault,node_sql_databases toneMint
class node_functions,node_eventhub,node_servicebus,node_aks,node_container_services toneRose
class node_arm,node_deployments,node_policy,node_resourcegraph,node_entra,node_network,node_eventgrid,node_apim,node_monitor toneIndigo
```

## Components

### Request entry

- [Local emulator](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/AzureRequest.java): `src/main/java/io/floci/az/core/AzureRequest.java`

### Shared platform

- [Emulator config](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/config/EmulatorConfig.java): `src/main/java/io/floci/az/config/EmulatorConfig.java`
- [Storage backends](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/storage/StorageFactory.java): `src/main/java/io/floci/az/core/storage/StorageFactory.java`
- [Cloud profiles](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/cloud/CloudProfile.java): `src/main/java/io/floci/az/core/cloud/CloudProfile.java`
- [Azure directory](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/directory/AzureDirectory.java): `src/main/java/io/floci/az/core/directory/AzureDirectory.java`
- [Request authentication](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/auth/AuthPipeline.java): `src/main/java/io/floci/az/core/auth/AuthPipeline.java`
- [TLS proxy](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/tls/TlsProxyServer.java): `src/main/java/io/floci/az/core/tls/TlsProxyServer.java`
- [Web console](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/ui/UiController.java): `src/main/java/io/floci/az/core/ui/UiController.java`

### Data services

- [Storage services](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/blob/BlobServiceHandler.java): `src/main/java/io/floci/az/services/blob/BlobServiceHandler.java`
- [App Configuration](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/appconfig/AppConfigHandler.java): `src/main/java/io/floci/az/services/appconfig/AppConfigHandler.java`
- [Cosmos DB](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/cosmos/CosmosHandler.java): `src/main/java/io/floci/az/services/cosmos/CosmosHandler.java`
- [Cosmos engines](https://github.com/floci-io/floci-az/tree/main/src/main/java/io/floci/az/services/cosmos/engine/impl): `src/main/java/io/floci/az/services/cosmos/engine/impl`
- [Key Vault](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/keyvault/KeyVaultHandler.java): `src/main/java/io/floci/az/services/keyvault/KeyVaultHandler.java`
- [Managed databases](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/sql/SqlHandler.java): `src/main/java/io/floci/az/services/sql/SqlHandler.java`

### Compute and messaging

- [Azure Functions](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/functions/FunctionsServiceHandler.java): `src/main/java/io/floci/az/services/functions/FunctionsServiceHandler.java`
- [Event Hubs](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/eventhub/EventHubHandler.java): `src/main/java/io/floci/az/services/eventhub/EventHubHandler.java`
- [Service Bus](https://github.com/floci-io/floci-az/blob/main/src/artemis-amqp-patch/java/org/apache/activemq/artemis/protocol/amqp/proton/ServiceBusSessionSupport.java): `src/artemis-amqp-patch/java/org/apache/activemq/artemis/protocol/amqp/proton/ServiceBusSessionSupport.java`
- [Kubernetes service](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/aks/AksClusterManager.java): `src/main/java/io/floci/az/services/aks/AksClusterManager.java`
- [Container services](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/aci/AciContainerGroupManager.java): `src/main/java/io/floci/az/services/aci/AciContainerGroupManager.java`

### Azure management

- [ARM resources](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/core/arm/ArmResourceStore.java): `src/main/java/io/floci/az/core/arm/ArmResourceStore.java`
- [Template deployments](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/deployments/DeploymentEngine.java): `src/main/java/io/floci/az/services/deployments/DeploymentEngine.java`
- [Azure Policy](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/policy/evaluation/PolicyEngine.java): `src/main/java/io/floci/az/services/policy/evaluation/PolicyEngine.java`
- [Resource Graph](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/resourcegraph/kql/KqlEngine.java): `src/main/java/io/floci/az/services/resourcegraph/kql/KqlEngine.java`
- [Entra identity](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/entra/TokenEndpoint.java): `src/main/java/io/floci/az/services/entra/TokenEndpoint.java`
- [Virtual networks](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/network/NetworkService.java): `src/main/java/io/floci/az/services/network/NetworkService.java`
- [Event Grid](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/eventgrid/EventGridService.java): `src/main/java/io/floci/az/services/eventgrid/EventGridService.java`
- [API Management](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/apim/ApiManagementService.java): `src/main/java/io/floci/az/services/apim/ApiManagementService.java`
- [Monitor and logs](https://github.com/floci-io/floci-az/blob/main/src/main/java/io/floci/az/services/monitor/MonitorHandler.java): `src/main/java/io/floci/az/services/monitor/MonitorHandler.java`

### Other components

- **Azure clients**

## Connections

- Azure clients → Local emulator: send requests (evidence: `README.md`)
- Storage backends → Emulator config: reads settings (evidence: `src/main/java/io/floci/az/core/storage/StorageFactory.java`)
- Request authentication → Local emulator: resolves request auth (evidence: `src/main/java/io/floci/az/core/auth/AuthPipeline.java`)
- Cosmos engines → Cosmos DB: Cosmos engine APIs (evidence: `README.md`)
- Azure Functions → Azure clients: runs uploaded functions (evidence: `README.md`)
- Event Hubs → Azure clients: AMQP and Kafka access (evidence: `README.md`)
- TLS proxy → Local emulator: serves HTTPS (evidence: `README.md`)
- Web console → Local emulator: console endpoint (evidence: `README.md`)
