Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

TinyCloud Azure Emulator

Go 1.26 Docker Single Container Azure 18 emulation areas X TheOmniDev

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.

Supported Today

Current emulator status:

  • 17 implemented emulator areas
  • 1 partial emulator area: ARM deployments
  • 0 listed 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.

Quick Start

From tinycloud\:

$env:TINYCLOUD_DATA_ROOT="$PWD\data"
go run .\cmd\tinycloud init
go run .\cmd\tinycloud start
go run .\cmd\tinycloud status runtime

Docker:

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-azure

For direct API examples and per-service usage, see docs/services.md. For shared smoke-test and development flows, see ../docs/development.md.

Install

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 runtime

See ../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:

  1. bootstrap the tinycloud CLI from a TinyCloud-hosted installer URL
  2. run tinycloud setup --full
  3. let the CLI validate or install the full local suite

That bootstrap-plus-setup flow is planned, not implemented today.

CLI

TinyCloud exposes three user-facing command surfaces:

  • tinycloud: runtime lifecycle, status, endpoints, config, logs, services, and environment helpers
  • tinyterraform: Terraform compatibility wrapper
  • tinyaz: 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:

Wrapper Direction

TinyCloud follows a LocalStack-style wrapper model:

  • tinyterraform is the TinyCloud analogue to tflocal
  • tinyaz is the planned TinyCloud analogue to azlocal
  • 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:

  • tinyaz is intended to cover all 18 current emulation-scope areas
  • tinyterraform is intended to cover the Terraform-feasible portion of that same scope
  • the broader tinyterraform implementation 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 tinyterraform targets 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 tinyterraform target 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.

Documentation

Current Limitations

  • ARM deployment execution is still partial and intentionally narrow
  • tinyterraform support is still limited by real Terraform provider/resource coverage
  • tinyterraform is 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 tinyterraform contract
  • standalone tinyaz is 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

Examples

Contributing

For local smoke tests, development commands, and Docker validation flows, start with ../docs/development.md.