Skip to content

perf-ecosystem.yml

perf-ecosystem.yml is a single configuration file that all ecosystem tools discover automatically. Place it in your project root and each tool connects itself to the configured services.

Tools walk up the directory tree from the current working directory until they find perf-ecosystem.yml or reach the .git boundary. No environment variable or flag is needed — discovery is automatic.

perf-ecosystem.yml
# Schema version: 1.0
version: "1.0"
workspace:
name: "my-application" # Project name, used in reports
team: "platform-team"
environment: staging # dev | staging | prod
services:
dummydatagenpro:
url: "https://dummydatagenpro.co.uk"
api_key: "${DUMMYDATA_API_KEY}"
perf_lint_api:
url: "https://perflint.martkos-it.co.uk"
api_key: "${PERF_LINT_API_KEY}"
licenses:
perf_reporting: "${PERF_REPORTING_LICENSE}"
perf_lab: "${PERF_LAB_LICENSE}"
perf_script_studio: "${PERF_SCRIPT_STUDIO_LICENSE}"
# perf_migrator is still read, so existing configuration keeps working. There has
# never been a perf_autocorrelator_pro key: the binary does not look for one, and a
# licence configured under that name is silently ignored.
perf_migrator: "${PERF_MIGRATOR_LICENSE}"
tools:
default: jmeter # jmeter | k6 | gatling
jmeter:
home: "/opt/apache-jmeter-5.6.3"
image: "ghcr.io/markslilley/perf-jmeter:latest"
k6:
image: "ghcr.io/markslilley/perf-k6:latest"
gatling:
image: "ghcr.io/markslilley/perf-gatling:latest"
thresholds:
response_time:
avg_max_ms: 500
p95_max_ms: 1500
p99_max_ms: 3000
error_rate:
max_percent: 1.0
apdex:
min_score: 0.85
notifications:
slack:
webhook_url: "${SLACK_WEBHOOK_URL}"
channel: "#perf-alerts"
on_failure: true
on_sla_breach: true
on_regression: true
integrations:
auto_lint_on_run: false # Run perf-lint before executing scripts
migrator_validate: false # Auto-run perf-lint on perf-script-studio output

Values matching ${VAR_NAME} are substituted before parsing. An unresolved variable resolves to null — the integration is silently disabled rather than throwing an error. This means a partial config — only perf_lint_api, say — works correctly without needing to remove unconfigured sections.

services:
perf_lint_api:
api_key: "${PERF_LINT_API_KEY}" # → null if var not set → remote rule sync disabled

Store secrets in .env (excluded from git) or your CI/CD secrets store. Never commit API keys directly.

You don’t need all sections. A minimal setup that licenses the tools and sets one SLA:

version: "1.0"
licenses:
perf_script_studio: "${PERF_SCRIPT_STUDIO_LICENSE}"
perf_reporting: "${PERF_REPORTING_LICENSE}"
thresholds:
response_time:
p95_max_ms: 1500
error_rate:
max_percent: 1.0
SectionConsumed By
services.perf_lint_apiperf-lint (remote rule sync), perf-script-studio (post-convert lint)
services.dummydatagenprotest-data generation steps
licenses.*perf-reporting, perf-lab, perf-script-studio (perf_migrator still read)
tools.*executor image selection
thresholds.*perf-reporting (SLA checks and regression gating)
integrations.*All tools — control auto-integration behaviour
Terminal window
curl -O https://raw.githubusercontent.com/markslilley/perf-ecosystem/main/perf-ecosystem.example.yml
cp perf-ecosystem.example.yml perf-ecosystem.yml