Skip to content

Installation

Pick whichever fits your platform. All methods give you the same single, self-contained entra-emulator binary (the Svelte portal is baked in — no Node toolchain required at runtime).

MethodPlatformsBest for
HomebrewmacOS, LinuxMac/Linux dev machines
wingetWindowsWindows dev machines
Dockeranywhere Docker runsCI, containers, zero local install
Pre-built binarymacOS, Linux, Windowspinned versions, air-gapped
go installany platform with GoGo developers
From sourceany platform with Gohacking on the emulator
Terminal window
brew install calvinchengx/tap/entra-emulator
entra-emulator version

Works on macOS and Linux (Intel and Apple Silicon / arm64). Each tagged release refreshes the cask, so brew upgrade picks up new versions. The cask clears the macOS quarantine attribute for you, so the unsigned binary runs without a Gatekeeper prompt.

Terminal window
winget install calvinchengx.entra-emulator
entra-emulator version

Each tagged release opens a manifest PR against microsoft/winget-pkgs; the package is installable once that PR is merged (Microsoft’s validation can take a day or two). Until then — or for scoop / choco, which aren’t published — use the release archive or go install.

A ~13 MB distroless image (pure-Go, no cgo) on GHCR, with a built-in HEALTHCHECK:

Terminal window
docker run -p 8443:8443 -v entra-emulator-data:/app/data \
ghcr.io/calvinchengx/entra-emulator:latest

The image defaults to ORIGIN_MODE=compat and binds 0.0.0.0. Mount a volume at /app/data to persist the SQLite store, TLS cert, and signing key across restarts. Tags: latest and each released X.Y.Z.

Every tagged release attaches cross-platform archives (linux / macOS / Windows × amd64 / arm64) to the GitHub Releases page. Download the one for your OS/arch and extract it.

macOS / Linux (…_darwin_arm64.tar.gz, …_linux_amd64.tar.gz, …):

Terminal window
tar -xzf entra-emulator_*_"$(uname -s | tr A-Z a-z)"_*.tar.gz
./entra-emulator version

Windows — download entra-emulator_<version>_windows_amd64.zip (or arm64), unzip it, and run entra-emulator.exe from PowerShell:

Terminal window
.\entra-emulator.exe version

Each release also publishes checksums.txt — verify with sha256sum -c (Linux) / shasum -a 256 -c (macOS) / Get-FileHash (Windows PowerShell).

With a Go toolchain (1.25+), install straight from the module — no clone, no Node — on any platform:

Terminal window
go install github.com/calvinchengx/entra-emulator/cmd/entra-emulator@latest
entra-emulator version

This works because the built portal is committed to the module, so the pure-Go build is fully self-contained. Use @vX.Y.Z instead of @latest to pin a release.

Terminal window
git clone https://github.com/calvinchengx/entra-emulator
cd entra-emulator
go build ./cmd/entra-emulator
./entra-emulator version

Rebuilding the portal UI needs pnpm (pnpm --filter entra-emulator-portal build), but a plain go build uses the committed portal/dist and needs no Node.

Terminal window
ORIGIN_MODE=compat entra-emulator # everything on https://localhost:8443

Then head to the Quickstart to acquire your first token, and TLS & origins if you want the subdomain layout (login. / graph. / portal.) instead of compat mode. To trust the self-signed cert, run entra-emulator trust (it prints the platform command).