Skip to main content
Version: Next (unreleased)

Getting started

Let's discover what Topaz is and how to set it up for local Azure development.

What is Topaz?

Topaz is an Azure emulator that lets you develop and test Azure-based applications without connecting to real cloud services. It implements the ARM control plane and the data planes of popular services such as Azure Storage, Key Vault, Service Bus, and more — all running locally on your machine.

Early stage

Topaz is still in active development. Breaking changes may be introduced in upcoming releases. Check the release notes before upgrading.

Prerequisites

Standalone executableDocker container
RuntimeNone — self-contained binaryDocker (or compatible runtime)
CertificatesMust be installed & trustedHandled automatically
DNSOne-time setup script requiredOne-time setup script required

Releases are published on the GitHub releases page. Download the package that matches your platform and architecture.

Windows users

The recommended way to run Topaz on Windows is inside WSL 2 (Windows Subsystem for Linux). This gives you a normal Linux environment and avoids certificate and DNS complications. All shell examples below assume a Linux/macOS shell; run them inside WSL if you're on Windows.

Step 1 — One-time DNS configuration

macOS — install with Homebrew

On macOS you can skip Steps 1 and 3 by installing via Homebrew. DNS setup and the topaz binary are handled automatically:

brew tap thecloudtheory/topaz
brew install topaz

You will still need to complete Step 2 (trusting the certificate). The certificate is installed at $(brew --prefix)/bin/topaz.crt.

Topaz emulates Azure service hostnames (e.g. *.blob.core.windows.net) locally. A one-time DNS configuration is required so that these hostnames resolve to 127.0.0.1. This needs admin privileges, but once done Topaz needs none at runtime.

curl -fsSL https://raw.githubusercontent.com/TheCloudTheory/Topaz/main/install/install-macos.sh | sudo bash

Or clone the repo and run it directly:

sudo bash install/install-macos.sh

You only need to run this script once per machine (or WSL instance).

Step 2 — Trust the certificate

Topaz exposes HTTPS endpoints using a self-signed certificate that is bundled in the release package. You need to add it to your system trust store so that tools like the Azure CLI and the Azure SDKs can connect without TLS errors.

Open Keychain Access, import topaz.crt, and mark it as Always Trust, or use the terminal:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain topaz.crt
Skip certificates with Docker

When running Topaz as a Docker container you can expose only the HTTP data-plane ports and skip this step entirely. HTTPS is still available inside the container on port 8899 (ARM), but services like Blob and Table Storage use plain HTTP on their own ports.

Step 3 — Run the emulator

cd <download-directory>
chmod +x topaz-host-linux-x64 # use topaz-host-osx-x64 on macOS; topaz-host-linux-arm64 on ARM
./topaz-host-linux-x64 --log-level Information

Topaz is split into two executables:

BinaryPurpose
topaz-host-*Runs the emulator — start this first
topaz-*CLI for managing resources in the running emulator

Available Host binaries by platform:

PlatformBinary
macOS (Apple Silicon)topaz-host-osx-arm64
macOS (Intel)topaz-host-osx-x64
Linux x64topaz-host-linux-x64
Linux ARM64topaz-host-linux-arm64
Windowstopaz-host-win-x64.exe

Available CLI binaries by platform:

PlatformBinary
macOS (Apple Silicon)topaz-osx-arm64
macOS (Intel)topaz-osx-x64
Linux x64topaz-linux-x64
Linux ARM64topaz-linux-arm64
Windowstopaz-win-x64.exe (or use the Linux binary inside WSL)

Typing the full binary name every time is tedious. Create a shell alias or move the binary to a directory on your PATH:

# Option A — symlink into /usr/local/bin
sudo ln -s "$(pwd)/topaz-host-linux-x64" /usr/local/bin/topaz-host
sudo ln -s "$(pwd)/topaz-linux-x64" /usr/local/bin/topaz

# Option B — add alias to your shell profile
echo 'alias topaz-host="/path/to/topaz-host-linux-x64"' >> ~/.zshrc # macOS (Zsh)
echo 'alias topaz-host="/path/to/topaz-host-linux-x64"' >> ~/.bashrc # Linux / WSL
source ~/.zshrc # or ~/.bashrc

After this you can run topaz-host --log-level Information to start the emulator and topaz in a second terminal to manage resources.

Step 4 — Verify the emulator is running

Once started, Topaz logs the list of bound endpoints. You can also do a quick health check against the ARM endpoint:

curl -k https://localhost:8899/subscriptions
# Expected: HTTP 200 with an empty subscriptions list

The -k flag skips TLS verification for the quick check. In normal usage the certificate will be trusted after Step 2, so you won't need it.

Next steps

Star on GitHub