Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

floci-io/floci-az

DevOps & Self-hosting

A local Azure emulator for developing and testing Azure SDK, CLI, and Terraform workflows without a cloud account.

831
150
Java
MIT
6 months old

What it does

Floci AZ runs Azure-compatible services on your own machine for development, testing, and CI. Point existing Azure SDK clients, the Azure CLI, or Terraform at http://localhost:4577 and keep your current connection strings and workflows, without an Azure account, auth token, or paid feature gating What is Floci AZ?.

It covers storage (Blob, Queue, Table), Azure Functions, App Configuration, Key Vault, Event Hubs, Service Bus, Cosmos DB, SQL and managed PostgreSQL/MySQL/MariaDB, AKS, Container Apps, API Management, networking, ARM resource management, Entra ID, and more Supported Services. Most services are emulated in-process; Azure Functions, Event Hubs brokers, and the Cosmos DB MongoDB/PostgreSQL/Cassandra/Gremlin engines run as real Docker containers where wire-protocol fidelity matters Real Docker Integration.

The project targets developers and CI pipelines that need a lightweight, cross-platform alternative to Azurite, Functions Core Tools, and the Windows-first Cosmos DB Emulator comparison. It is the Azure member of the Floci emulator family, alongside AWS, GCP, and OCI variants.

Quick start

You need Docker, plus Docker Compose for the compose path. Create docker-compose.yml:

services:
  floci-az:
    image: floci/floci-az:latest
    ports:
      - "4577:4577"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock  # required for Azure Functions

Then run docker compose up. Alternatively, run it directly:

docker run -d --name floci-az \
  -p 4577:4577 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  floci/floci-az:latest

All services answer at http://localhost:4577; any account name and key are accepted because SharedKey credentials are not validated Quick Start. A web console is started on demand at the local UI.

For a Python Blob smoke test, install azure-storage-blob and use the documented connection string:

from azure.storage.blob import BlobServiceClient

conn_str = (
    "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;"
    "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;"
    "BlobEndpoint=http://localhost:4577/devstoreaccount1;"
)

client = BlobServiceClient.from_connection_string(conn_str)
client.create_container("my-container")
blob = client.get_container_client("my-container").get_blob_client("hello.txt")
blob.upload_blob(b"Hello from floci-az!")
print(blob.download_blob().readall())

This should create the container, upload, and print the stored content Python SDK example.

Storage and persistence

Storage mode is set with FLOCI_AZ_STORAGE_MODE: memory (default, lost on stop), persistent (loaded at startup, flushed on graceful shutdown), hybrid (periodic async flush every 5s), or wal (every mutation logged before responding). Each service can override the global mode, for example FLOCI_AZ_STORAGE_BLOB_MODE=wal Persistence and Storage Modes.

Constraints

Most services use plain HTTP on port 4577; do not use DefaultEndpointsProtocol=https unless TLS is explicitly enabled. SDKs that require an HTTPS URL, such as App Configuration and Key Vault, need a ForceHttp transport policy to rewrite requests back to HTTP. The Cosmos DB Java SDK enforces TLS, so set FLOCI_AZ_TLS_ENABLED=true and use https://localhost:4577; the self-signed certificate is generated at runtime and retrievable from GET /_floci/tls-cert TLS setup.

Functions and container-backed services require access to the Docker socket. Authentication is effectively disabled in the default dev mode: all keys pass. APIM is an intentionally scoped subset, not a full gateway; the listed unsupported features include the full policy language, JWT/OIDC validation, revisions, and developer portal behavior APIM scope. The project is designed for dev/test, not production-scale or high-availability storage, and is MIT licensed.

HotRepo's take

Floci AZ recorded a best position of 4 on the GitHub Java daily list in the 2026-11-03 snapshot, with 829 stars and 12 stars gained that day. This is a single snapshot rather than a sustained trend, but the ranking places it among the more visible Java repositories on that day. Its differentiator is breadth: consolidating storage, messaging, Functions, databases, and a management plane behind one port makes it a more practical single dependency for CI than combining Azurite and Functions Core Tools, while its Linux-native containers avoid the Windows-container path of the official Cosmos DB Emulator.

Written by AI from the project's README, updated . The project's own docs are the source of truth.