Using Environment Variables

A comprehensive reference of all environment variables supported by Solo, including their purposes, default values, and expected formats. Configure Solo deployments through environment variable tuning.

Overview

Solo supports a set of environment variables that let you customize its behaviour without modifying command-line flags on every run. Variables set in your shell environment take effect automatically for all subsequent Solo commands.

Setting environment variables

How you set a variable depends on your shell. Use the tab for your platform:

# For a single command only
CONSENSUS_NODE_VERSION=v0.73.0 solo one-shot single deploy

# For the current session
export CONSENSUS_NODE_VERSION=v0.73.0

# Persist across sessions (add to ~/.bashrc or ~/.zshrc)
echo 'export CONSENSUS_NODE_VERSION=v0.73.0' >> ~/.zshrc
# For the current session
$env:CONSENSUS_NODE_VERSION = 'v0.73.0'

# Persist for your user (all future sessions)
[System.Environment]::SetEnvironmentVariable('CONSENSUS_NODE_VERSION', 'v0.73.0', 'User')

# Or add it to your PowerShell profile
Add-Content $PROFILE '$env:CONSENSUS_NODE_VERSION = "v0.73.0"'

Tip: Variables set in your shell environment (or persisted as shown above) take effect automatically for all subsequent Solo commands.

General

Environment VariableDescriptionDefault Value
SOLO_HOMEPath to the Solo cache and log files~/.solo
SOLO_CACHE_DIRPath to the Solo cache directory~/.solo/cache
SOLO_LOG_LEVELLogging level for Solo operations. Accepted values: trace, debug, info, warn, errorinfo
SOLO_DEV_OUTPUTTreat all commands as if the --dev flag were specifiedfalse
SOLO_CHAIN_IDChain ID of the Solo network298
FORCE_PODMANForce the use of Podman as the container engine when creating a new local cluster. Accepted values: true, falsefalse

Network and Node Identity

Environment VariableDescriptionDefault Value
DEFAULT_START_ID_NUMBERRaw node ID number for the first consensus node. The first node account ID is resolved as 0.0.<DEFAULT_START_ID_NUMBER>3
SOLO_NODE_INTERNAL_GOSSIP_PORTInternal gossip port used by the Hiero network50111
SOLO_NODE_EXTERNAL_GOSSIP_PORTExternal gossip port used by the Hiero network50111
SOLO_NODE_DEFAULT_STAKE_AMOUNTDefault stake amount for a node500
GRPC_PORTLocal port-forward for consensus node gRPC. Default is 35211 for Solo 0.63+ (changed from 50211 to avoid Windows ephemeral-port conflicts). See Port availability.35211
LOCAL_NODE_START_PORTLocal node start port for the Solo network30212

Operator and Key Configuration

Environment VariableDescriptionDefault Value
SOLO_OPERATOR_IDOperator account ID for the Solo network0.0.2
SOLO_OPERATOR_KEYOperator private key for the Solo network302e020100...
SOLO_OPERATOR_PUBLIC_KEYOperator public key for the Solo network302a300506...
FREEZE_ADMIN_ACCOUNTFreeze admin account ID for the Solo network0.0.58
GENESIS_KEYGenesis private key for the Solo network302e020100...

Note: Full key values are omitted above for readability. Refer to the source defaults for complete key strings.


Node Client Behaviour

Environment VariableDescriptionDefault Value
NODE_CLIENT_MIN_BACKOFFMinimum wait time between retries, in milliseconds1000
NODE_CLIENT_MAX_BACKOFFMaximum wait time between retries, in milliseconds1000
NODE_CLIENT_REQUEST_TIMEOUTTime a transaction or query retries on a “busy” network response, in milliseconds600000
NODE_CLIENT_MAX_ATTEMPTSMaximum number of attempts for node client operations600
NODE_CLIENT_SDK_PING_MAX_RETRIESMaximum number of retries for node health pings5
NODE_CLIENT_SDK_PING_RETRY_INTERVALInterval between node health ping retries, in milliseconds10000
NODE_COPY_CONCURRENTNumber of concurrent threads used when copying files to a node4
LOCAL_BUILD_COPY_RETRYNumber of retries for local build copy operations3
ACCOUNT_UPDATE_BATCH_SIZENumber of accounts to update in a single batch operation10

Pod and Network Readiness

Environment VariableDescriptionDefault Value
PODS_RUNNING_MAX_ATTEMPTSMaximum number of attempts to check if pods are running900
PODS_RUNNING_DELAYInterval between pod running checks, in milliseconds1000
PODS_READY_MAX_ATTEMPTSMaximum number of attempts to check if pods are ready300
PODS_READY_DELAYInterval between pod ready checks, in milliseconds2000
NETWORK_NODE_ACTIVE_MAX_ATTEMPTSMaximum number of attempts to check if network nodes are active300
NETWORK_NODE_ACTIVE_DELAYInterval between network node active checks, in milliseconds1000
NETWORK_NODE_ACTIVE_TIMEOUTMaximum wait time for network nodes to become active, in milliseconds1000
NETWORK_PROXY_MAX_ATTEMPTSMaximum number of attempts to check if the network proxy is running300
NETWORK_PROXY_DELAYInterval between network proxy checks, in milliseconds2000
NETWORK_DESTROY_WAIT_TIMEOUTMaximum wait time for network teardown to complete, in milliseconds120

Block Node

Environment VariableDescriptionDefault Value
BLOCK_NODE_PODS_RUNNING_MAX_ATTEMPTSMaximum number of attempts to check if block node pods are running900
BLOCK_NODE_PODS_RUNNING_DELAYInterval between block node pod running checks, in milliseconds1000
BLOCK_NODE_ACTIVE_MAX_ATTEMPTSMaximum number of attempts to check if block nodes are active100
BLOCK_NODE_ACTIVE_DELAYInterval between block node active checks, in milliseconds60
BLOCK_NODE_ACTIVE_TIMEOUTMaximum wait time for block nodes to become active, in milliseconds60
BLOCK_STREAM_STREAM_MODEThe blockStream.streamMode value in consensus node application properties. Only applies when a Block Node is deployedBOTH
BLOCK_STREAM_WRITER_MODEThe blockStream.writerMode value in consensus node application properties. Only applies when a Block Node is deployedFILE_AND_GRPC

Relay Node

Environment VariableDescriptionDefault Value
RELAY_PODS_RUNNING_MAX_ATTEMPTSMaximum number of attempts to check if relay pods are running900
RELAY_PODS_RUNNING_DELAYInterval between relay pod running checks, in milliseconds1000
RELAY_PODS_READY_MAX_ATTEMPTSMaximum number of attempts to check if relay pods are ready100
RELAY_PODS_READY_DELAYInterval between relay pod ready checks, in milliseconds1000

Mirror Node

Environment VariableDescriptionDefault Value
DISABLE_IMPORTER_SPRING_PROFILESDisable automatic configuration of Mirror Node importer Spring profiles for block-node integration.false
SPRING_PROFILES_ACTIVESpring profiles to use for the Mirror Node importer when automatic importer profile configuration is enabled.blocknode

Load Balancer

Environment VariableDescriptionDefault Value
LOAD_BALANCER_CHECK_DELAY_SECSDelay between load balancer status checks, in seconds5
LOAD_BALANCER_CHECK_MAX_ATTEMPTSMaximum number of attempts to check load balancer status60

Lease Management

Environment VariableDescriptionDefault Value
SOLO_LEASE_ACQUIRE_ATTEMPTSNumber of attempts to acquire a lock before failing10
SOLO_LEASE_DURATIONDuration in seconds for which a lock is held before expiration20

Component Versions

Environment VariableDescription
CONSENSUS_NODE_VERSIONRelease version of the Consensus Node to use
BLOCK_NODE_VERSIONRelease version of the Block Node to use
MIRROR_NODE_VERSIONRelease version of the Mirror Node to use
EXPLORER_VERSIONRelease version of the Explorer to use
RELAY_VERSIONRelease version of the JSON-RPC Relay to use
INGRESS_CONTROLLER_VERSIONRelease version of the HAProxy Ingress Controller to use
SOLO_CHART_VERSIONRelease version of the Solo Helm charts to use
MINIO_OPERATOR_VERSIONRelease version of the MinIO Operator to use
PROMETHEUS_STACK_VERSIONRelease version of the Prometheus Stack to use
GRAFANA_AGENT_VERSIONRelease version of the Grafana Agent to use

Tip: To pin component versions for a solo one-shot single deploy, prefix the command with these variables. See the One-Shot Deployment section below for an example.


Edge Component Versions

These variables only take effect when solo one-shot single deploy or solo one-shot multi deploy is invoked with the --edge flag (solo one-shot falcon deploy does not accept --edge in v0.72.0). They let you point a one-shot deploy at arbitrary component tags — release candidates, pre-releases, or any other tag the component’s registry exposes — without rebuilding Solo.

ComponentEnvironment VariableFalls back to
Consensus NodeCONSENSUS_NODE_EDGE_VERSIONCONSENSUS_NODE_VERSION
Mirror NodeMIRROR_NODE_EDGE_VERSIONMIRROR_NODE_VERSION
JSON-RPC RelayRELAY_EDGE_VERSIONRELAY_VERSION
ExplorerEXPLORER_EDGE_VERSIONEXPLORER_VERSION
Block NodeBLOCK_NODE_EDGE_VERSIONBLOCK_NODE_VERSION
Solo ChartSOLO_CHART_EDGE_VERSIONSOLO_CHART_VERSION

Set only the variables for components you want to override; the rest use their compiled-in edge defaults. Without --edge, every *_EDGE_VERSION variable is ignored.

For full usage, examples, version-format rules, and troubleshooting, see One-Shot Deploy with Custom Component Versions.


Helm Chart URLs

Environment VariableDescriptionDefault Value
JSON_RPC_RELAY_CHART_URLHelm chart repository URL for the JSON-RPC Relayhttps://hiero-ledger.github.io/hiero-json-rpc-relay/charts
MIRROR_NODE_CHART_URLHelm chart repository URL for the Mirror Nodehttps://hashgraph.github.io/hedera-mirror-node/charts
EXPLORER_CHART_URLHelm chart repository URL for the Exploreroci://ghcr.io/hiero-ledger/hiero-mirror-node-explorer/hiero-explorer-chart
INGRESS_CONTROLLER_CHART_URLHelm chart repository URL for the ingress controllerhttps://haproxy-ingress.github.io/charts
PROMETHEUS_OPERATOR_CRDS_CHART_URLHelm chart repository URL for the Prometheus Operator CRDshttps://prometheus-community.github.io/helm-charts
NETWORK_LOAD_GENERATOR_CHART_URLHelm chart repository URL for the Network Load Generatoroci://swirldslabs.jfrog.io/load-generator-helm-release-local

Network Load Generator

Environment VariableDescriptionDefault Value
NETWORK_LOAD_GENERATOR_CHART_VERSIONRelease version of the Network Load Generator Helm chart to usev0.7.0
NETWORK_LOAD_GENERATOR_PODS_RUNNING_MAX_ATTEMPTSMaximum number of attempts to check if Network Load Generator pods are running900
NETWORK_LOAD_GENERATOR_POD_RUNNING_DELAYInterval between Network Load Generator pod running checks, in milliseconds1000

One-Shot Deployment

Environment VariableDescriptionDefault Value
ONE_SHOT_WITH_BLOCK_NODEDeploy Block Node as part of a one-shot deploymentfalse
MIRROR_NODE_PINGER_TPSTransactions per second for the Mirror Node monitor pinger. Set to 0 to disable5
CONSENSUS_NODE_EDGE_VERSIONEdge (newer-than-default) consensus node version used by --edge in one-shot deploys. Falls back to CONSENSUS_NODE_VERSION.v0.74.0-rc.1
MIRROR_NODE_EDGE_VERSIONEdge mirror node version used by --edge in one-shot deploys. Falls back to MIRROR_NODE_VERSION.v0.153.1
EXPLORER_EDGE_VERSIONEdge explorer version used by --edge in one-shot deploys. Falls back to EXPLORER_VERSION.26.0.0
RELAY_EDGE_VERSIONEdge relay version used by --edge in one-shot deploys. Falls back to RELAY_VERSION.0.76.2
BLOCK_NODE_EDGE_VERSIONEdge block node version used by --edge in one-shot deploys. Falls back to BLOCK_NODE_VERSION.0.31.0

Pinning Component Versions

solo one-shot single deploy does not yet expose CLI flags for pinning individual component versions. To run a one-shot deployment against specific releases, prefix the command with the Component Versions environment variables:

CONSENSUS_NODE_VERSION=v0.73.0 MIRROR_NODE_VERSION=v0.153.1 solo one-shot single deploy

Any of the *_VERSION variables listed in Component Versions can be combined in the same command to pin multiple components at once.

Note:

  • This is the current recommended approach for version pinning in one-shot deployments.
  • CLI flags for version overrides on one-shot are planned for Q2 — tracked in hiero-ledger/solo#4242.
  • Environment variables will remain valid for one-off overrides after the CLI flags land, so the form above will continue to work.

Image Cache

Solo caches the container images it deploys as local archives to speed up repeat deployments. The cache is enabled by default; these variables disable it per context. See Solo Image Cache for the full feature and the solo cache image commands.

Environment VariableDescriptionDefault
ENABLE_IMAGE_CACHESet to false to disable the image cache during solo one-shot deploys. Requires Solo v0.78.0 or later (earlier releases have an inverted-logic bug in this flag).enabled
SOLO_NO_CACHESet to true to skip the image pull during an npm global install.enabled
HOMEBREW_NO_SOLO_CACHESet to any value to skip the image pull during a Homebrew install.enabled

Note: The cached component versions follow the same environment-variable mechanism as Pinning Component Versions above - the *_VERSION environment variables affect the images the cache pulls, but the --*-version CLI flags do not.