Azure on localhost:4577

A free, MIT-licensed Azure emulator with Azurite-compatible connection strings. Give your coding agents a real Azure to build and test against: no account, no subscription, no bill.

# Install floci-cli, then start floci-az
curl -fsSL https://floci.io/install.sh | sh
floci az start
eval $(floci az env)
29 Azure services ready on :4577. Blob · Queue · Table · Functions · Key Vault · +24 more

24 ms startup · ~13 MiB idle · MIT licensed · no Azure account

Homebrew, Windows and Docker options

Every way to run it.

One CLI installs and runs all four emulators: use Homebrew, the install script or PowerShell. Or skip the CLI and run the Docker image.

1 · Install floci CLI

brew install floci-io/floci/floci

2 · Start the emulator

floci az start

3 · Export env vars

eval $(floci az env)
# exports AZURE_STORAGE_CONNECTION_STRING

4 · Upload a file

# Create a container
az storage container create \
  --name my-container \
  --connection-string $AZURE_STORAGE_CONNECTION_STRING

# Write a file and upload it
echo "Azure locally: no bill, no drama." \
  > hello-floci.txt
az storage blob upload \
  --container-name my-container \
  --name hello-floci.txt \
  --file hello-floci.txt \
  --connection-string $AZURE_STORAGE_CONNECTION_STRING

# Download it back and read it
az storage blob download \
  --container-name my-container \
  --name hello-floci.txt \
  --file hello-back.txt \
  --connection-string $AZURE_STORAGE_CONNECTION_STRING
cat hello-back.txt

Teach your coding agent

# Asks which agents to install it for
npx skills add floci-io/floci-cli

The Floci skill teaches Claude Code, Codex, Cursor, Kiro and other coding agents to run the emulators with floci-cli.

Other useful commands

# Check status
floci az status

# View logs
floci az logs

# Stop the emulator
floci az stop

# Print individual SDK endpoint vars
eval $(floci az env --format sdk-vars)
# exports AZURE_STORAGE_BLOB_ENDPOINT,
# AZURE_APP_CONFIGURATION_ENDPOINT,
# AZURE_KEY_VAULT_ENDPOINT, ...

Start with persistence

floci az start --persist ./data
# state survives container restarts

Diagnose issues

floci az doctor
# checks Docker, Azure CLI, connectivity

One blob upload, four SDKs.

Each sample reads AZURE_STORAGE_CONNECTION_STRING, which eval $(floci az env) sets. On the Docker path, export it from the Quick Start.

# pip install azure-storage-blob
import os
from azure.storage.blob import BlobServiceClient

client = BlobServiceClient.from_connection_string(
    os.environ["AZURE_STORAGE_CONNECTION_STRING"])
container = client.get_container_client("my-container")
if not container.exists():
    container.create_container()

blob = container.get_blob_client("hello.txt")
blob.upload_blob(b"Hello from floci-az!", overwrite=True)

Azurite's connection string, and the rest of Azure.

Blob, Queue and Table answer the way Azurite does, next to Event Hubs, Service Bus, Cosmos DB, Key Vault and more on port 4577.

More than Azurite

Azurite covers Blob, Queue and Table. floci-az serves those with the same account name and key, plus 26 more services.

AMQP for native clients

Event Hubs and Service Bus also listen on AMQP ports 5672 and 5673, so native SDK clients connect without a proxy layer.

Real database engines

Azure SQL and the PostgreSQL, MySQL and MariaDB flexible servers run the real engines in Docker containers.

Native-image speed

Starts in 24 ms and idles at ~13 MiB, fast enough to start a fresh emulator for every test run.

Switching from Azurite?

Keep the account name, the key and the connection string format. Point the endpoints at port 4577 instead of Azurite's 10000, 10001 and 10002, and Queue and Table move to their own paths on the same port.

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;
DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:4577/devstoreaccount1;QueueEndpoint=http://localhost:4577/devstoreaccount1-queue;TableEndpoint=http://localhost:4577/devstoreaccount1-table;

Default credentials

The following fixed credentials match Azurite's defaults. All Azure SDK tooling expects these values for local development.

PropertyValue
Account Namedevstoreaccount1
Account KeyEby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
Blob endpointhttp://localhost:4577/devstoreaccount1
Queue endpointhttp://localhost:4577/devstoreaccount1-queue
Table endpointhttp://localhost:4577/devstoreaccount1-table
Event Hubs AMQPamqp://localhost:5672
Service Bus AMQPamqp://localhost:5673
Event Hubs Kafka (opt-in)localhost:9093

Azure, without the subscription.

MIT licensed and built for developer workflows. No Azure account, no subscription, no credit card. Just floci-cli and localhost.

Other emulators: AWSGCPOCI

license
MIT
real credentials
none
cloud account
none
cost
$0