Amber
Local-first Azure emulator — Build, test, and iterate on Azure services without an Azure account.
Amber emulates 86 Azure service-family surfaces across 17 categories, all running locally with zero core runtime dependencies. Every operation records billing usage so you can estimate costs before deploying to real Azure.
Amber is a developer test double, not Microsoft Azure. It provides useful local behavior, ARM-shaped resource IDs, region and zone metadata, billing ledgers, and adapter hooks while documenting where cloud validation is still required.
Amber is inspired by the local-cloud developer experience pioneered by Floci for AWS, and brings that same kind of fast local workflow to Azure-shaped Python, CLI, and REST development.
Quick Start
from amber import AmberWorkspace
ws = AmberWorkspace.create(".amber")
# Blob Storage
ws.storage.blob.create_container("data")
ws.storage.blob.put_blob("data", "hello.txt", b"Hello, Azure!")
# Redis Cache
ws.redis.set(0, "session:1", "active")
assert ws.redis.get(0, "session:1") == "active"
# Cosmos DB
ws.cosmosdb.create_account("myaccount")
ws.cosmosdb.create_database("myaccount", "mydb")
ws.cosmosdb.create_container("myaccount", "mydb", "items", "/category")
ws.cosmosdb.create_document("myaccount", "mydb", "items", {
"id": "doc1", "category": "fruit", "name": "apple"
})
# Service Bus messaging
ws.servicebus.create_queue("orders")
ws.servicebus.send_to_queue("orders", "new-order-123")
# Check billing
for key, usage in sorted(ws.billing.summary().items()):
print(f"{key}: {usage.quantity} {usage.unit}")
ws.close()
Installation
pip install amber-cloud
Amber is published on PyPI as amber-cloud, while the import package and CLI are both amber.
Documentation
- Documentation: https://vishwa-docs.github.io/amber/
- PyPI: https://pypi.org/project/amber-cloud/
- Issues and roadmap: https://github.com/Vishwa-docs/amber/issues
Local Azure Workflows
amber doctor
amber az group create --name apps --location eastus --tags env=dev
amber az group list
eval "$(amber env --endpoint http://127.0.0.1:8000)"
For an optional ARM-shaped local endpoint:
pip install "amber-cloud[server]"
python -m amber.server --workspace .amber --host 127.0.0.1 --port 8000
Why Amber
- Run Azure-shaped integration tests locally without cloud accounts or shared test subscriptions.
- Keep application code close to ARM-shaped IDs, locations, tags, resource groups, and service-family names.
- Prototype lift-and-shift flows before replacing local adapters with real Azure SDK clients or deployment pipelines.
- Give students, teams, and open-source projects a fast local playground for Azure concepts.
Service Coverage (86 services)
| Category | Services |
|---|---|
| Storage | Blob, Queue, Table, Files, Data Lake Gen2 |
| Databases | Redis, Cosmos DB, Azure SQL, PostgreSQL, MySQL, Database Migration Service |
| Messaging | Service Bus, Event Hubs, Event Grid |
| Compute | Functions, App Service, Container Apps, Batch, Static Web Apps, Virtual Machines, Managed Disks, VM Scale Sets, Service Fabric, Azure Virtual Desktop |
| Containers | ACR, AKS |
| Networking | VNet, Load Balancer, DNS, Firewall, App Gateway, Front Door, CDN, Traffic Manager, NAT Gateway, Private DNS, Bastion, Private Link, ExpressRoute, VPN Gateway, WAF |
| AI | Azure OpenAI, Azure AI services, AI Search, Maps, Document Intelligence/Form Recognizer, Speech, Content Safety/Content Moderator compatibility |
| Analytics | Data Factory, Kusto (Data Explorer), Stream Analytics, Purview, Synapse Analytics, Machine Learning |
| Governance | Policy, RBAC, Cost Management, Advisor, Resource Graph |
| Observability | Azure Monitor, Application Insights |
| Identity | Managed Identity / Service Principals |
| Security | Key Vault, Managed HSM, Confidential Ledger, DDoS Protection |
| Integration | Logic Apps, API Management, IoT Hub, SignalR, Communication Services, Notification Hubs, Web PubSub, Digital Twins |
| DevOps | Azure DevOps (projects, pipelines) |
| Automation | Azure Automation (runbooks, jobs, variables) |
| Media | Azure Media Services-style legacy workflows (retired in Azure; local compatibility only) |
| Management | Billing, Resource Groups, Subscriptions, Locks, Tags, Activity Log, Blueprints legacy workflows, Maintenance, Change Analysis |
Public Python API
Amber is packaged as amber-cloud and imported as amber:
from amber import AmberWorkspace
from amber.core import ServiceRegistry
from amber.cosmosdb import CosmosDBService
from amber.storage import BlobStorageService, QueueStorageService
from amber.networking import VNetService
The subpackages intentionally mirror Azure service families so tests and prototypes can move from local Amber code toward Azure SDK or deployment workflows with minimal conceptual translation. See the Sphinx documentation's Microsoft References page for the official Microsoft docs that each local service surface maps to.
Architecture
- SQLite persistence with WAL mode for concurrent access
- Content-addressed blob storage with SHA-256 deduplication
- Lazy service initialization — only loaded when accessed
- Thread-safe workspace with double-checked locking
- Zero external dependencies — pure Python stdlib
Commands
| Command | Description |
|---|---|
pip install -e '.[dev]' |
Install for local development |
.venv/bin/python -m pytest |
Run the Python test suite |
.venv/bin/ruff check src tests |
Run Python lint checks |
.venv/bin/mypy src |
Run the configured type checks |
.venv/bin/python -m build |
Build sdist and wheel |
amber registry list |
List all registered services |
amber doctor |
Check local package, workspace, SQLite, registry, and optional server deps |
amber status |
Show workspace, registered services, resource groups, and resources |
amber env --format json |
Emit local endpoint and Azure-shaped environment metadata |
amber az account show |
Show the local subscription document |
amber az group create --name apps --location eastus |
Create an ARM-shaped local resource group |
amber compose |
Print a Docker Compose service for the optional REST server |
amber billing summary |
Show local billing summary |
Go Core
The Go runtime and CLI remain alongside the Python package:
go test ./...
go run ./cmd/amber --workspace .amber doctor
go run ./cmd/amber --workspace .amber status
License
Apache 2.0. Azure, Microsoft Azure, and related service names are trademarks of Microsoft Corporation. Amber is independent and is not affiliated with, endorsed by, or sponsored by Microsoft Corporation.
Release files for amber-cloud 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| amber_cloud-1.0.0.tar.gz | 1.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| amber_cloud-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / amber_cloud-1.0.0.tar.gz
| Download URL | amber_cloud-1.0.0.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
edbbffb8885d1c8ea9f1e1a9dd53d194910a974051b4562beb647bb640ce843c
|
|
BLAKE2b-256 checksum How to use checksums |
28cff77e35d27899c9f138681e8b7723867cd9c4c39e7c048cea8ef305b13c5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 12, 2026.
Transparency logRelease files / amber_cloud-1.0.0-py3-none-any.whl
| Download URL | amber_cloud-1.0.0-py3-none-any.whl |
|---|---|
| Size | 198.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9bc12bb1f5d77deb217ce195f2161d54e123f2d8080710660a2aada2416cc567
|
|
BLAKE2b-256 checksum How to use checksums |
0fd90a60ac1ea621c0831a7ac3e1016adc14fb1ba43d992101bcc83f176d731e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 12, 2026.
Transparency log