Official command-line interface for Floci — the free, open-source local cloud emulator for AWS, GCP, Azure, and OCI.
# AWS (default)
floci start
eval $(floci env)
aws s3 mb s3://my-bucket
# GCP
floci gcp start
eval $(floci gcp env)
gcloud storage buckets create gs://my-bucket
# Azure
floci az start
eval $(floci az env)
az storage container create --name mycontainer
# OCI
floci oci start
floci oci setup
eval $(floci oci env)
oci os ns getbrew install floci-io/floci/flocicurl -fsSL https://floci.io/install.sh | shiwr https://floci.io/install.ps1 | iexscoop bucket add floci https://github.com/floci-io/scoop-floci
scoop install flociDownload floci.jar from the latest release and run it (requires Java 25+):
java -jar floci.jar versionNative-binary installs (install script, direct download) can self-update:
floci update --check # exit 0: up to date, exit 1: update available
floci update # download, verify checksum, replace the binaryHomebrew and Scoop installs are updated through their package manager (brew upgrade floci) — floci update detects Homebrew-managed binaries and refuses to touch them.
# Start Floci (AWS emulator)
floci start
# Check environment
floci doctor
# Export AWS environment variables
eval $(floci env)
# Use AWS services normally
aws s3 mb s3://my-bucket
aws dynamodb create-table --table-name users \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
# Stop Floci
floci stop# Start Floci GCP emulator
floci gcp start
# Check environment
floci gcp doctor
# Export GCP emulator host variables
eval $(floci gcp env)
# Use GCP services normally
gcloud storage buckets create gs://my-bucket
gcloud pubsub topics create my-topic
# Stop Floci GCP
floci gcp stop# Start Floci Azure emulator
floci az start
# Check environment
floci az doctor
# Export Azure connection string
eval $(floci az env)
# Use Azure services
az storage container create --name mycontainer
az storage blob upload --container-name mycontainer --name hello.txt --data "hello"
# Stop Floci Azure
floci az stop# Start Floci OCI emulator
floci oci start
# Check environment
floci oci doctor
# One-time: create a throwaway OCI CLI profile (API key + ~/.oci/config)
floci oci setup
# Export OCI endpoint variables
eval $(floci oci env)
# Use OCI services normally
oci os ns get
oci os bucket create --namespace-name floci-local --name my-bucket \
--compartment-id ocid1.tenancy.oc1..flocilocaltenancy0000000000000000000000000000000000000000
# Stop Floci OCI
floci oci stopBare commands like floci start route to the configured default product (AWS by default).
floci config default-product gcp # make floci gcp the default
floci config default-product az # make floci az the default
floci config default-product oci # make floci oci the default
floci config default-product aws # revert to awsCommands are organized into four product groups — floci aws (or bare floci), floci gcp, floci az, and floci oci. All groups expose the same lifecycle commands.
| Command | Description |
|---|---|
floci config show |
Show active configuration |
floci config validate |
Validate a docker-compose.yml |
floci config profile |
Manage named profiles |
floci config default-product |
Set the default product (aws, gcp, az, or oci) |
floci update |
Self-update the CLI to the latest release |
floci completion bash|zsh |
Generate shell completion scripts |
floci update |
Update the CLI to the latest release |
| Command | Description |
|---|---|
floci start |
Launch the Floci AWS container |
floci stop |
Stop (and optionally remove) the container |
floci restart |
Stop then start |
floci status |
Show container state and server health |
floci logs |
Stream container logs |
floci wait |
Poll until Floci is ready (CI-friendly) |
floci version |
Show CLI and server versions |
floci services |
List enabled AWS services |
floci doctor |
Run environment diagnostics |
floci env |
Print AWS environment variables |
floci snapshot save/load/list/delete |
Manage state snapshots |
| Command | Description |
|---|---|
floci gcp start |
Launch the Floci GCP container |
floci gcp stop |
Stop (and optionally remove) the container |
floci gcp restart |
Stop then start |
floci gcp status |
Show container state and server health |
floci gcp logs |
Stream container logs |
floci gcp wait |
Poll until Floci GCP is ready (CI-friendly) |
floci gcp version |
Show CLI and server versions |
floci gcp services |
List enabled GCP services |
floci gcp doctor |
Run GCP environment diagnostics |
floci gcp env |
Print GCP SDK emulator host variables |
floci gcp snapshot |
Snapshot commands (coming soon) |
| Command | Description |
|---|---|
floci az start |
Launch the Floci Azure container |
floci az stop |
Stop (and optionally remove) the container |
floci az restart |
Stop then start |
floci az status |
Show container state and server health |
floci az logs |
Stream container logs |
floci az wait |
Poll until Floci Azure is ready (CI-friendly) |
floci az version |
Show CLI and server versions |
floci az services |
List enabled Azure services |
floci az doctor |
Run Azure environment diagnostics |
floci az env |
Print Azure connection string / SDK env vars |
floci az snapshot |
Snapshot commands (coming soon) |
| Command | Description |
|---|---|
floci oci start |
Launch the Floci OCI container |
floci oci stop |
Stop (and optionally remove) the container |
floci oci restart |
Stop then start |
floci oci status |
Show container state and server health |
floci oci logs |
Stream container logs |
floci oci wait |
Poll until Floci OCI is ready (CI-friendly) |
floci oci version |
Show CLI and server versions |
floci oci services |
List enabled OCI services |
floci oci doctor |
Run OCI environment diagnostics |
floci oci env |
Print OCI endpoint variables |
floci oci setup |
Create a local OCI CLI profile (API key + ~/.oci/config) |
floci oci snapshot |
Snapshot commands (coming soon) |
All commands support --help.
--endpoint <url> Floci server URL (default: http://localhost:4566, env: FLOCI_ENDPOINT)
--container <name> Container name (default: floci, env: FLOCI_CONTAINER)
--output|-o text|json|yaml Output format (default: text)
--quiet, -q Suppress non-error output
--verbose, -v Debug logging to stderr
--no-color Disable ANSI colors
--profile <name> Load settings from ~/.floci/profiles/<name>.yaml
--endpoint <url> Floci GCP server URL (default: http://localhost:4588, env: FLOCI_GCP_ENDPOINT)
--container <name> Container name (default: floci-gcp, env: FLOCI_GCP_CONTAINER)
--output|-o text|json|yaml Output format (default: text)
--quiet, -q Suppress non-error output
--verbose, -v Debug logging to stderr
--no-color Disable ANSI colors
--profile <name> Load settings from ~/.floci/profiles/<name>.yaml
--endpoint <url> Floci Azure server URL (default: http://localhost:4577, env: FLOCI_AZ_ENDPOINT)
--container <name> Container name (default: floci-az, env: FLOCI_AZ_CONTAINER)
--output|-o text|json|yaml Output format (default: text)
--quiet, -q Suppress non-error output
--verbose, -v Debug logging to stderr
--no-color Disable ANSI colors
--profile <name> Load settings from ~/.floci/profiles/<name>.yaml
--endpoint <url> Floci OCI server URL (default: http://localhost:4599, env: FLOCI_OCI_ENDPOINT)
--container <name> Container name (default: floci-oci, env: FLOCI_OCI_CONTAINER)
--output|-o text|json|yaml Output format (default: text)
--quiet, -q Suppress non-error output
--verbose, -v Debug logging to stderr
--no-color Disable ANSI colors
--profile <name> Load settings from ~/.floci/profiles/<name>.yaml
Port auto-detection —
status,version,wait, andenvautomatically derive the correct endpoint from the container's port mapping. You don't need to pass--endpointwhen using a non-default port, as long as--containerpoints to the right container.
Pulls the image (if needed), starts the container, and waits for readiness.
# AWS
floci start # default port 4566
floci start --port 4567 # custom host port
floci start --services s3,dynamodb # enable specific services
floci start --persist ./data # persist state to a host directory
floci start --pull always # always pull the latest image
floci start --detach # return immediately, don't wait
# GCP
floci gcp start # default port 4588
floci gcp start --persist ./data # persist state to a host directory
# Azure
floci az start # default port 4577
floci az start --port 4578 # custom host port
floci az start --persist ./data # persist state to a host directory
# OCI
floci oci start # default port 4599
floci oci start --persist ./data # persist state to a host directoryThe Floci container needs access to a Docker-compatible daemon (for Lambda, EC2,
EKS, MSK, ECR, CodeBuild, and Kafka/Redpanda support). By default floci start
bind-mounts /var/run/docker.sock, but it honors the standard DOCKER_HOST
environment variable, so Podman, rootless setups, and remote Docker contexts work
without extra flags:
# Rootless Podman
export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock
floci start
# Rootful Podman
export DOCKER_HOST=unix:///run/podman/podman.sock
floci start
# Remote daemon over TCP
export DOCKER_HOST=tcp://10.0.0.5:2375
floci startResolution precedence:
DOCKER_HOST— the standard Docker/Podman variable (unix://socket,tcp://daemon, ornpipe://on Windows)DOCKER_SOCK— legacy override (a bare socket path)- OS default —
/var/run/docker.sockon Linux/macOS, or the Docker named pipe on Windows
For a unix:// socket the resolved path is bind-mounted into the container; for a
remote tcp:// daemon the DOCKER_HOST value is passed through to the container
instead. Run floci doctor to see which endpoint was resolved.
floci stop # graceful stop (10s timeout)
floci stop --timeout 30 # wait up to 30s before force-kill
floci stop --remove # also remove the container after stoppingfloci status # auto-detects endpoint from container port mapping
floci status --container myfloci # target a specific container
floci status -o json # structured outputPrints AWS environment variables pointing at the running Floci instance. The default
hostname is localhost.floci.io (resolves to 127.0.0.1, enables virtual-hosted S3 bucket names).
eval $(floci env) # bash/zsh — sets all four AWS vars
floci env --shell fish | source # fish
floci env --shell powershell | Invoke-Expression # PowerShell
floci env --host myhost.local # custom hostname
floci env --region eu-west-1 # custom region (default: us-east-1)
floci env -o json # structured output for scriptsVariables exported:
| Variable | Default value |
|---|---|
AWS_ENDPOINT_URL |
http://localhost.floci.io:<port> |
AWS_ACCESS_KEY_ID |
test |
AWS_SECRET_ACCESS_KEY |
test |
AWS_DEFAULT_REGION |
us-east-1 |
Prints GCP SDK emulator host variables for the running Floci GCP instance.
eval $(floci gcp env) # all emulator host vars
eval $(floci gcp env --service gcs,pubsub) # specific services only
floci gcp env --shell fish | source # fish
floci gcp env -o json # structured outputVariables exported (per enabled service):
| Variable | Service |
|---|---|
STORAGE_EMULATOR_HOST |
Cloud Storage (gcs) |
PUBSUB_EMULATOR_HOST |
Pub/Sub |
FIRESTORE_EMULATOR_HOST |
Firestore |
DATASTORE_EMULATOR_HOST |
Datastore |
SECRET_MANAGER_EMULATOR_HOST |
Secret Manager |
IAM_EMULATOR_HOST |
IAM |
Prints Azure connection variables for the running Floci Azure instance.
eval $(floci az env) # connection string (default)
eval $(floci az env --format sdk-vars) # individual SDK endpoint vars
eval $(floci az env --format sdk-vars --service blob,queue) # specific services only
floci az env --shell fish | source # fish
floci az env -o json # structured outputConnection string mode (default) exports:
| Variable | Value |
|---|---|
AZURE_STORAGE_CONNECTION_STRING |
Full Azurite-compatible connection string |
SDK vars mode (--format sdk-vars) exports:
| Variable | Default value |
|---|---|
AZURE_STORAGE_ACCOUNT |
devstoreaccount1 |
AZURE_STORAGE_KEY |
Azurite dev key |
AZURE_STORAGE_BLOB_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1 |
AZURE_STORAGE_QUEUE_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1-queue |
AZURE_STORAGE_TABLE_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1-table |
AZURE_FUNCTIONS_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1-functions |
AZURE_APP_CONFIGURATION_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1-appconfig |
AZURE_KEY_VAULT_ENDPOINT |
http://localhost.floci.io:<port>/devstoreaccount1-keyvault |
Prints OCI endpoint variables for the running Floci OCI instance. OCI SDKs and the
oci CLI take a single endpoint for every service, so no per-service variables are needed.
eval $(floci oci env) # endpoint vars for CLI, wrappers, and Terraform
floci oci env --shell fish | source # fish
floci oci env -o json # structured outputVariables exported:
| Variable | Purpose |
|---|---|
OCI_CLI_ENDPOINT |
Default --endpoint for the oci CLI |
FLOCI_OCI_ENDPOINT |
Used by this CLI and the ocilocal wrapper |
TF_VAR_CLIENT_HOST_OVERRIDES |
Per-client host overrides for the oracle/oci Terraform provider |
OCI_CLI_PROFILE |
The profile floci oci setup wrote (default FLOCI) — only exported when detected in ~/.oci/config, and skipped for DEFAULT |
The OCI CLI and SDKs refuse to run without a config file and an API signing key — even
against an emulator that never validates them. floci oci setup creates both in one step:
a locally generated RSA-2048 key at ~/.oci/floci_key.pem and a [FLOCI] profile in
~/.oci/config with the emulator's canonical throwaway tenancy. Existing profiles are
never touched; re-running is a no-op.
floci oci setup # create key + [FLOCI] profile
floci oci setup --profile-name DEFAULT # write a different profile section
floci oci setup -o json # structured output
# then connect:
eval $(floci oci env) # exports OCI_CLI_PROFILE=FLOCI too
oci os ns getfloci logs # last logs from the container
floci logs --tail 50 # last 50 lines
floci logs --since 5m # logs from the last 5 minutes
floci logs --follow # stream live logs (Ctrl-C to stop)floci wait # wait up to 30s (default)
floci wait --timeout 2m # custom timeout (supports s, m, h)
floci wait --service dynamodb # wait until a specific service is ready
floci wait -o json # machine-readable outputfloci doctor # run all checks
floci doctor --check docker.installed # run a single check by name
floci doctor --fix # auto-fix fixable issues
floci doctor -o json # structured output for scripts
floci gcp doctor # GCP-specific checks
floci az doctor # Azure-specific checks (includes az CLI + connection string)
floci oci doctor # OCI-specific checksfloci version # CLI version, server version, image digest
floci version -o jsonfloci services # list all enabled services
floci services -o jsonfloci config show # show active configuration
floci config default-product aws|gcp|az|oci # set the default product (persisted to ~/.floci/config.yaml)
floci config profile list # list saved profiles
floci config profile create <name> # create a new profile
floci config profile show <name> # show a profile
floci config profile delete <name> # delete a profile
floci config validate -f docker-compose.yml # validate a Compose fileProfiles are stored in ~/.floci/profiles/<name>.yaml and can override any global option.
Use --profile <name> on any command to load one.
Save and restore named snapshots of Floci AWS state.
floci snapshot list
floci snapshot save <name>
floci snapshot load <name>
floci snapshot delete <name>
floci snapshot export <name> -o tarball.tar.gz
floci snapshot import tarball.tar.gzGCP, Azure, and OCI snapshots (
floci gcp snapshot/floci az snapshot/floci oci snapshot) require server-side endpoints not yet implemented in Floci GCP / Floci Azure / Floci OCI — until then those commands report the missing API and exit 1.floci snapshot export|import(AWS) are also pending server support and exit 1.
Self-updates a native-binary install to a newer release (checksum-verified, atomic replace).
floci update # update to the latest release
floci update --check # only report; exit 0 = up to date, 1 = update available
floci update --version 0.1.8 # pin a specific versionfloci update --check || floci update # script-friendly: update only when staleHomebrew-managed installs are refused — use brew upgrade floci instead.
floci completion bash >> ~/.bashrc
floci completion zsh >> ~/.zshrcSelf-update the CLI in place: downloads the release binary from GitHub, verifies its
sha256 against the release's sha256sums.txt, and atomically replaces the running binary.
floci update # update to the latest release
floci update --check # exit 0: up to date, exit 1: update available
floci update --version 0.1.7 # install a specific versionHomebrew installs are managed by brew and are detected and refused — use brew upgrade floci there instead.
When run from an interactive terminal, floci also checks for new releases in the
background (at most once per 24h, cached in ~/.floci/update-check.json) and prints a
hint before the command output when one is available. Set FLOCI_NO_UPDATE_CHECK=1 to
opt out; the check is automatically disabled in CI and for piped output.
floci start --detach
floci wait --timeout 60s
eval $(floci env)
pytest # or your test command
floci stop --removeWith Docker Compose:
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- /var/run/docker.sock:/var/run/docker.sockUsing Podman or a non-default daemon? Swap the host side of the socket mount for your daemon's socket (e.g.
/run/user/1000/podman/podman.sock:/var/run/docker.sock). With the CLI, settingDOCKER_HOSTis enough — see Docker daemon resolution.
floci gcp start --detach
floci gcp wait --timeout 60s
eval $(floci gcp env)
pytest # or your test command
floci gcp stop --removeWith Docker Compose:
services:
floci-gcp:
image: floci/floci-gcp:latest
ports:
- "4588:4588"
volumes:
- /var/run/docker.sock:/var/run/docker.sockfloci az start --detach
floci az wait --timeout 60s
eval $(floci az env)
pytest # or your test command
floci az stop --removeWith Docker Compose:
services:
floci-az:
image: floci/floci-az:latest
ports:
- "4577:4577"
volumes:
- /var/run/docker.sock:/var/run/docker.sockfloci oci start --detach
floci oci wait --timeout 60s
eval $(floci oci env)
pytest # or your test command
floci oci stop --removeWith Docker Compose:
services:
floci-oci:
image: floci/floci-oci:latest
ports:
- "4599:4599"
volumes:
- /var/run/docker.sock:/var/run/docker.sockfloci-cli manages Floci's lifecycle, config, state, and diagnostics.
It does not wrap the AWS, GCP, Azure, or OCI CLIs, or manage cloud resources directly.
Use aws with AWS_ENDPOINT_URL, gcloud/SDKs with the emulator host variables, az with the appropriate connection string, or oci with OCI_CLI_ENDPOINT for resource operations.
Contributions are welcome — see CONTRIBUTING.md for how to build, test, and submit changes.
MIT — see LICENSE.