Configuration

Configuration is optional. With no flags, DevCloud enables every registered service on port 4747 and stores state under ./data/<service>/. Defaults are compiled into the binary from internal/config/default.yaml.

Configuration precedence follows this order: environment variables override YAML, which overrides embedded defaults:

  1. --config <path>: explicit configuration file path
  2. ./devcloud.yaml in the working directory: auto-detected if present
  3. Embedded defaults

Environment Variables

VariableOverridesDescription
DEVCLOUD_PORTserver.portHTTP server listening port (default: 4747)
DEVCLOUD_SERVICESservices.*.enabledComma-separated service list, or a tier shortcut
DEVCLOUD_DATA_DIRservices.*.data_dirBase data directory for persistent services
CONTAINER_RUNTIMEworkload engineOCI container executable (podman, docker, nerdctl)
WASM_RUNTIMEworkload engineWebAssembly runner executable (wasmtime, wasmer, wazero)
DEVCLOUD_LAMBDA_NETWORKlambda runtimeContainer network for invoked Lambda handlers

DEVCLOUD_SERVICES

When set, it specifies the running set: only the listed services start, regardless of YAML enabled settings. If unset, each service uses its YAML enabled value.

TokenExpands to
tier1Core services: s3, sqs, dynamodb, iam, sts, lambda, sns, kms, secretsmanager, ssm, cloudwatchlogs, cloudwatch, eventbridge, ec2, ecs, ecr, route53, acm
tier2Extended services: cognito, elasticloadbalancingv2, ebs, efs, states, apigateway, apigatewayv2, kinesis, firehose, ses, sesv2, rds, cloudformation
tier3Analytics and platform: elasticache, cloudfront, wafv2, glue, athena, organizations, cloudtrail, eks, autoscaling, appsync, emr, batch
allDisables the env-var filter: the services block decides

Examples:

DEVCLOUD_SERVICES=s3,sqs ./dist/devcloud
DEVCLOUD_SERVICES=tier1 ./dist/devcloud
DEVCLOUD_SERVICES=tier1,kinesis,firehose ./dist/devcloud
docker run -p 4747:4747 -e DEVCLOUD_SERVICES=tier1 ghcr.io/skyoo2003/devcloud:latest

DEVCLOUD_DATA_DIR

Every persistent service places its database and assets under <DEVCLOUD_DATA_DIR>/<service>. This is useful in CI pipelines requiring isolated ephemeral storage directories.

DEVCLOUD_DATA_DIR=/tmp/devcloud-local ./dist/devcloud

docker run -p 4747:4747 \
  -e DEVCLOUD_DATA_DIR=/app/data \
  -v $(pwd)/devcloud-data:/app/data \
  ghcr.io/skyoo2003/devcloud:latest

DEVCLOUD_PORT

DEVCLOUD_PORT=8080 ./dist/devcloud
docker run -p 8080:8080 -e DEVCLOUD_PORT=8080 ghcr.io/skyoo2003/devcloud:latest

Configuration File

server:
  port: 4747

# Optional: Top-level services block (AWS)
services:
  s3:
    enabled: true
    data_dir: ./data/s3
  sqs:
    enabled: true
  dynamodb:
    enabled: true

# Multi-provider namespaces
providers:
  aws:
    services:
      s3:
        enabled: true
        data_dir: ./data/s3
  azure:
    services:
      blob:
        enabled: true
        data_dir: ./data/blob
      azurequeue:
        enabled: true
        data_dir: ./data/azurequeue
      azuretable:
        enabled: true
        data_dir: ./data/azuretable
      cosmosdb:
        enabled: true
        data_dir: ./data/cosmos
      azurekeyvault:
        enabled: true
      azureappconfig:
        enabled: true
  gcp:
    services:
      gcs:
        enabled: true
        data_dir: ./data/gcp/gcs
      gcpsecrets:
        enabled: true
      gcppubsub:
        enabled: true

admin:
  enabled: false

logging:
  level: info
  format: text
KeyDefaultDescription
server.port4747HTTP server port
services.<name>.enabledfalseRequired per entry when the services block is explicitly present.
services.<name>.data_dir./data/<name>Data directory for persistent storage
storage.data_dir./dataDirectory holding shared DevCloud state and generic CRUD database
admin.enabledfalseServes the admin REST API at /devcloud/api/*
logging.levelinfoLogging verbosity: debug, info, warn, error
logging.formattextLog output formatting: text or json

The services block is optional: omit it to start all registered services automatically.

Provider Namespacing

DevCloud supports multi-provider configurations under the providers map:

  • providers.aws.services: AWS services. If top-level services is also specified, providers.aws.services takes precedence.
  • providers.azure.services: Azure services (blob, azurequeue, azuretable, cosmosdb, azurekeyvault, azureappconfig).
  • providers.gcp.services: GCP services (gcs, gcpsecrets, gcppubsub).

Data directories for providers are isolated under their respective paths to prevent naming collisions.

Data Directories

Generic resource fallback persists state in SQLite at <storage.data_dir>/devcloud.db (default: ./data/devcloud.db).

To perform a full reset of all local state, run devcloud --reset-data before starting the server, or send DELETE /devcloud/api/data while the admin API is enabled.

ServiceDefault data_dirBackendContents
S3./data/s3Filesystem + SQLiteObject payloads, metadata.db
DynamoDB./data/dynamodbSQLitedynamodb.db (tables, items, TTL, tags)
IAM./data/iamSQLiteiam.db (users, roles, access keys)
STS./data/stsShared with IAMStored in IAM database
Lambda./data/lambdaSQLite + Filesystemlambda.db, code archives
SQSnoneIn-memoryQueue state and message buffers
Azure Blob./data/blobFilesystem + SQLiteContainer metadata, block blobs
Azure Table./data/azuretableSQLiteOData tables and entity records
Azure Cosmos./data/cosmosSQLiteDatabases, collections, documents
GCS./data/gcp/gcsFilesystem + SQLiteBucket metadata, object payloads

Workload and Container Networking

DEVCLOUD_LAMBDA_NETWORK selects the container network for Lambda functions. Pass the DevCloud endpoint to handlers via function environment variables. See Lambda execution setup for networking options.