4 min read
Miniblue

What it does

27 Azure services emulated behind a single port. Works with Terraform, Pulumi, Azure SDKs, and curl.

ServiceServiceService
Resource GroupsBlob StorageTable Storage
Queue StorageKey VaultCosmos DB
Service BusAzure FunctionsVirtual Networks
DNS ZonesContainer RegistryEvent Grid
App ConfigurationManaged IdentityDB for PostgreSQL
DB for MySQLAzure SQL DatabaseAzure Cache for Redis
Container InstancesKubernetes Service (AKS)Public IP Addresses
Network Security GroupsLoad BalancerApplication Gateway
Storage Accounts

How it compares

LocalStack (AWS)MiniStack (AWS)Azurite (Azure)miniblue
Services80+363 (storage only)27
Docker image~1GB~200MB~300MB~8MB
Startup~10s~5s~3s<1s
Real backendsDynamoDB LocalRDS, S3, SQSNoPostgres, Redis, Docker
TerraformYesYesNoYes
LicenseBSLMITMITMIT

Quick Start

# Homebrew
brew tap moabukar/tap && brew install miniblue

# Or Docker
docker run -p 4566:4566 -p 4567:4567 moabukar/miniblue:latest

Then interact with it:

azlocal health
azlocal group create --name myRG --location eastus
azlocal keyvault secret set --vault myvault --name db-pass --value secret123
azlocal storage blob upload --account myacct --container data --name file.txt --data "Hello!"

No Azure account or credentials needed.

Terraform

https://github.com/user-attachments/assets/eea72535-6eb7-419d-9f9c-6f42b80d5efc

bash scripts/trust-cert.sh  # one-time cert trust
provider "azurerm" {
  features {}
  metadata_host              = "localhost:4567"
  skip_provider_registration = true
  subscription_id            = "00000000-0000-0000-0000-000000000000"
  tenant_id                  = "00000000-0000-0000-0000-000000000001"
  client_id                  = "miniblue"
  client_secret              = "miniblue"
}

See examples/terraform/ for full examples including three-tier, serverless, and microservices scenarios.

Real Backends (optional)

FeatureEnv var
Real PostgreSQL databasesPOSTGRES_URL=postgres://user:pass@host:5432/db
Real Redis connectivityREDIS_URL=redis://host:6379
Real Docker containers (ACI)Docker daemon running
Real k3s cluster per AKS resourceAKS_BACKEND=k3s (Docker daemon required)
File persistencePERSISTENCE=1
Postgres persistenceDATABASE_URL=postgres://...

Real backends shell out to the host Docker daemon. The default moabukar/miniblue:latest image is FROM scratch and has no docker CLI, so use the binary install (Homebrew, releases page) or the full Docker target which adds it:

docker build --target=full -t miniblue:full .
docker run -v /var/run/docker.sock:/var/run/docker.sock \
  -p 4566:4566 -p 4567:4567 \
  -e AKS_BACKEND=k3s miniblue:full

miniblue tears down its k3s containers on graceful shutdown (SIGTERM/SIGINT/docker stop); orphans from a forced kill are reaped by the next start.

Configuration

VariableDefaultDescription
PORT4566HTTP port
TLS_PORT4567HTTPS port
LOG_LEVELinfodebug, info, warn, error
SERVICESallComma-separated list to enable selectively
PERSISTENCEoffSet to 1 for file-based persistence

Full configuration reference in the docs.

Documentation

Full docs at miniblue.io covering: