How to configure telemetry in Sylius?
Sylius includes an optional telemetry module that helps the project understand real-world usage. The collected data is anonymous, technical, and aggregated. It never includes personal information, store identifiers, or business-sensitive details.
This page explains how to configure telemetry, how to control it per environment, how to partially or fully opt out, and how Sylius ensures that telemetry remains safe for all users, including commercial production stores.
1. What & Why
See Telemetry documentation — one place with everything: the privacy model, what is and isn’t collected, how anonymity is enforced, defaults & schedule, control/opt-out, plus the full rationale and decision drivers (governance, RFC & PR).
2. Default Configuration
Telemetry is on by default in production environments, with all categories enabled. It is automatically disabled in dev and test environments.
dev, dev_local
Disabled
test, test_cached
Disabled
prod
Enabled
staging
Enabled
3. Configuring Telemetry
3.1 Environment Variables Reference
SYLIUS_TELEMETRY_ENABLED
true (prod)
Master switch for all telemetry
SYLIUS_TELEMETRY_BUSINESS
true
Business metrics (GMV, AOV, orders, customers)
SYLIUS_TELEMETRY_TECHNICAL
true
Technical data (PHP, Symfony, DB versions)
SYLIUS_TELEMETRY_PLUGINS
true
Installed plugins list
SYLIUS_TELEMETRY_SALT
auto-generated
Salt for anonymous installation ID
3.2 Full Telemetry (Default)
# No configuration needed - all categories enabled by default
SYLIUS_TELEMETRY_ENABLED=1
SYLIUS_TELEMETRY_BUSINESS=1
SYLIUS_TELEMETRY_TECHNICAL=1
SYLIUS_TELEMETRY_PLUGINS=1Output (example)
{
"installation_id": "7dbb5536-7400-534a-9e72-f8057c4cf58d",
"collected_at": "2025-12-03T13:51:38+00:00",
"period": { "start": "2025-11-03T13:51:38+00:00", "end": "2025-12-03T13:51:38+00:00" },
"technical": {
"sylius_version": "2.1.0",
"php_version": "8.3.10",
"symfony_version": "7.1.3",
"doctrine_version": "3.2.0",
"twig_version": "3.22.1",
"api_platform_version": "v3.3.0",
"database": { "type": "postgresql", "version": "16" },
"environment": {
"app": "prod",
"webserver": "nginx",
"os": "Linux",
"docker": true,
"ram_gb": 8.0,
"php_memory_limit": "512M"
}
},
"plugins": [
{ "name": "sylius/refund-plugin", "version": "2.0.1" },
{ "name": "sylius/invoicing-plugin", "version": "2.0.0" }
],
"business": {
"locales": ["en_US", "pl_PL"],
"default_locales": ["en_US"],
"currencies": ["EUR", "USD", "PLN"],
"payment_providers": [
{ "name": "bank_transfer", "gateway": "offline", "payments_count": "1K-10K" }
],
"shipping_providers": [
{ "name": "express", "calculator": "flat_rate", "shipments_count": "0-100" }
],
"gmv_monthly": { "EUR": "100K-500K" },
"aov_monthly": { "EUR": "250-500" },
"metrics": {
"customers_count": "10K-100K",
"products_count": "1K-10K",
"product_variants_count": "10K-100K",
"orders_monthly_count": "1K-10K",
"orders_monthly_avg_items": "0-5",
"orders_monthly_avg_item_units": "10-20"
}
}
}3.3 Technical Data Only
# .env
SYLIUS_TELEMETRY_ENABLED=1
SYLIUS_TELEMETRY_BUSINESS=0Output (example)
{
"installation_id": "7dbb5536-7400-534a-9e72-f8057c4cf58d",
"collected_at": "2025-12-03T13:51:38+00:00",
"period": { "start": "2025-11-03T13:51:38+00:00", "end": "2025-12-03T13:51:38+00:00" },
"technical": {
"sylius_version": "2.1.0",
"php_version": "8.3.10",
"symfony_version": "7.1.3",
"doctrine_version": "3.2.0",
"twig_version": "3.22.1",
"api_platform_version": "v3.3.0",
"database": { "type": "postgresql", "version": "16" },
"environment": {
"app": "prod",
"webserver": "nginx",
"os": "Linux",
"docker": true,
"ram_gb": 8.0,
"php_memory_limit": "512M"
}
},
"plugins": [
{ "name": "sylius/refund-plugin", "version": "2.0.1" },
{ "name": "sylius/invoicing-plugin", "version": "2.0.0" }
]
"business": [],
}3.4 Business Data Only
# .env
SYLIUS_TELEMETRY_ENABLED=1
SYLIUS_TELEMETRY_TECHNICAL=0
SYLIUS_TELEMETRY_PLUGINS=0Output (example)
{
"installation_id": "7dbb5536-7400-534a-9e72-f8057c4cf58d",
"collected_at": "2025-12-03T13:51:38+00:00",
"period": { "start": "2025-11-03T13:51:38+00:00", "end": "2025-12-03T13:51:38+00:00" },
"technical": [],
"plugins": [],
"business": {
"locales": ["en_US", "pl_PL"],
"default_locales": ["en_US"],
"currencies": ["EUR", "USD", "PLN"],
"gmv_monthly": { "EUR": "100K-500K" },
"aov_monthly": { "EUR": "250-500" },
"metrics": {
"customers_count": "10K-100K",
"orders_monthly_count": "1K-10K",
"orders_monthly_avg_items": "0-5"
}
}
}3.5 Soft Opt-Out (New Identity)
# .env
SYLIUS_TELEMETRY_SALT=your-new-saltResets the anonymous installation ID without disabling telemetry.
3.6 Full Opt-Out
# .env
SYLIUS_TELEMETRY_ENABLED=04. Installation ID Control
Sylius uses an anonymous installation ID based on a salt. To regenerate it, just change the salt:
#.env
SYLIUS_TELEMETRY_SALT=new_salt5. Telemetry Frequency
Telemetry attempts to send once per month (every 30 days) when an admin accesses the dashboard.
5.1 Retry Behavior
If sending fails or is blocked:
The system will retry up to 3 times
Retries occur with a 24-hour delay between attempts
Failed telemetry data is cached and reused for retry attempts
After 3 failed attempts, the system waits until the next 30-day cycle
5.2 Data Period
Each telemetry payload includes a period field indicating the time range for aggregated metrics:
{
"period": {
"start": "2025-10-27T00:00:00+00:00",
"end": "2025-11-27T00:00:00+00:00"
}
}Business metrics (orders, GMV, AOV, payments, shipments) are calculated for the last 30 days.
Last updated
Was this helpful?
