Develop and test Azure-facing applications locally with a focused emulator for ARM, identity, storage, document data, private DNS, network security, secrets, messaging, and event streaming workflows.
TinyCloud is a local Azure-compatible emulator for ARM, identity, storage, secrets, messaging, event streaming, and selected network workflows. It is designed for targeted local Azure workflow testing, not full Azure parity.
Normal product usage should converge on compiled tinycloud, tinyterraform, and tinyaz binaries. The current PowerShell scripts are transitional compatibility paths, not the intended long-term dependency model.
Current emulator status:
17implemented emulator areas1partial emulator area: ARM deployments0listed areas not implemented
Current implemented areas include:
- ARM tenants, subscriptions, providers, resource groups, storage accounts, Key Vault resources, VNets, subnets, NSGs, private DNS zones, and private DNS A records
- metadata, OAuth, managed identity, and admin/runtime endpoints
- Blob, Queue, Table, Key Vault secrets, Service Bus, Event Hubs, App Configuration, and Cosmos data-plane workflows
The current emulation scope is tracked as 18 emulator areas. That scope is broader than the runtime service-selection surface.
See docs/overview.md for the full support table, current port layout, and exact emulated surface.
From tinycloud\:
$env:TINYCLOUD_DATA_ROOT="$PWD\data"
go run .\cmd\tinycloud init
go run .\cmd\tinycloud start
go run .\cmd\tinycloud status runtimeDocker:
docker build -t tinycloud-azure .
docker run --rm -p 4566:4566 -p 4577:4577 -p 4578:4578 -p 4579:4579 -p 4580:4580 -p 4581:4581 -p 4582:4582 -p 4583:4583 -p 4584:4584/udp -p 4585:4585 tinycloud-azureFor direct API examples and per-service usage, see docs/services.md. For shared smoke-test and development flows, see ../docs/development.md.
To use real terminal commands like tinycloud init instead of repo-local go run commands, build the current CLI binaries and put them on PATH:
New-Item -ItemType Directory -Force .\bin | Out-Null
go build -o .\bin\tinycloud.exe .\cmd\tinycloud
go build -o .\bin\tinyterraform.exe .\cmd\tinyterraform
$env:PATH = "$PWD\bin;$env:PATH"Then:
tinycloud init
tinycloud start
tinycloud status runtimeSee ../docs/installation.md for the full install/setup flow, including the future separate tinyaz.exe build once standalone tinyaz exists.
The current install path is still manual. The intended official install story is:
- bootstrap the
tinycloudCLI from a TinyCloud-hosted installer URL - run
tinycloud setup --full - let the CLI validate or install the full local suite
That bootstrap-plus-setup flow is planned, not implemented today.
TinyCloud exposes three user-facing command surfaces:
tinycloud: runtime lifecycle, status, endpoints, config, logs, services, and environment helperstinyterraform: Terraform compatibility wrappertinyaz: planned Azure CLI compatibility wrapper
The built-in tinycloud CLI manages the local runtime through the repo-root Go entrypoints under cmd\... and the repo-root wrappers under scripts\....
See:
TinyCloud follows a LocalStack-style wrapper model:
tinyterraformis the TinyCloud analogue totflocaltinyazis the planned TinyCloud analogue toazlocal- both wrappers should preserve normal upstream command shape as closely as practical
- both wrappers should invoke the real upstream tools rather than reimplementing their command sets
Current roadmap direction:
tinyazis intended to cover all 18 current emulation-scope areastinyterraformis intended to cover the Terraform-feasible portion of that same scope- the broader
tinyterraformimplementation work has its own explicit roadmap step after contract locking; it is not just implied future work inside the contract definition step - the strongest future
tinyterraformtargets are the resource-oriented Azure families Terraform already covers well: storage accounts, Blob containers, storage queues, storage tables and table entities, Key Vault resources and secrets, VNets, subnets, NSGs, private DNS zones and records, Service Bus namespaces/queues/topics/subscriptions, Event Hubs namespaces/hubs/consumer groups, and selective App Configuration, Cosmos DB, or deployment-template-backed resources once the real provider contract is verified against TinyCloud - live operational objects such as queue messages, Service Bus messages, event payload publishing/consumption, and Cosmos document CRUD are not the primary
tinyterraformtarget even when TinyCloud implements the underlying service
The current tinyterraform support is still narrow and ARM-first. See docs/terraform.md for the current support statement and routing notes.
- ARM deployment execution is still partial and intentionally narrow
tinyterraformsupport is still limited by real Terraform provider/resource coveragetinyterraformis still ARM-first today; broad automatic per-service Terraform routing is not yet verified- many additional AzureRM resource families are Terraform-feasible in principle, but TinyCloud has not yet validated and locked that broader
tinyterraformcontract - standalone
tinyazis not implemented yet - some current Windows wrapper flows still use PowerShell; removing PowerShell as a hard dependency for normal CLI usage remains an explicit portability goal
- this is not a blanket Azure CLI, Terraform-provider, or SDK parity environment today
- Terraform resource group example:
examples/terraform/resource-group - Pulumi environment notes:
examples/pulumi
For local smoke tests, development commands, and Docker validation flows, start with ../docs/development.md.
