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

2. Default Configuration

Telemetry is on by default in production environments, with all categories enabled. It is automatically disabled in dev and test environments.

Environment
Telemetry

dev, dev_local

Disabled

test, test_cached

Disabled

prod

Enabled

staging

Enabled

3. Configuring Telemetry

3.1 Environment Variables Reference

Variable
Default
Description

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=1

Output (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=0

Output (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=0

Output (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-salt

Resets the anonymous installation ID without disabling telemetry.

3.6 Full Opt-Out

# .env
SYLIUS_TELEMETRY_ENABLED=0

4. 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_salt

5. 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?