daemon8/symfony

Symfony integration for Daemon8 -- automatic runtime observation via event subscribers

Maintainers

Package info

github.com/daemon8ai/daemon8-symfony

Homepage

Issues

Type:symfony-bundle

pkg:composer/daemon8/symfony

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

v0.1.0 2026-04-26 03:49 UTC

This package is auto-updated.

Last update: 2026-04-26 03:52:08 UTC


README

Auto-instrument Symfony 6.4 LTS / 7.x apps for Daemon8. Requests, Doctrine queries, exceptions, Messenger, HTTP client, security events, and Monolog — captured automatically.

Tip

Help keep Daemon8 open source — star the main repo.

Install

composer require daemon8/symfony
daemon8 install   # if you haven't already

Symfony Flex publishes config/packages/daemon8.yaml and registers the bundle. No Flex? Add Daemon8\Symfony\Daemon8Bundle::class => ['all' => true] to config/bundles.php.

Requires the Daemon8 daemon running locally. Without it, the bundle is a silent no-op.

Usage

Everything streams automatically after install. Emit manually by injecting Daemon8Client:

use Daemon8\Daemon8Client;

final class CheckoutService
{
    public function __construct(private readonly Daemon8Client $daemon8) {}

    public function process(Order $order): void
    {
        $this->daemon8->log('processing order #' . $order->id);
        $this->daemon8->send(
            ['event' => 'checkout', 'order_id' => $order->id],
            severity: 'info',
            channel: 'orders',
        );
    }
}

In dev mode, the WebProfiler toolbar shows a Daemon8 panel with every observation from the current request.

Configuration

DAEMON8_ENABLED=true
DAEMON8_URL=http://127.0.0.1:9077/ingest
DAEMON8_APP=checkout-api
DAEMON8_TIMEOUT_MS=50

Per-subscriber toggles in config/packages/daemon8.yaml. Soft deps (Doctrine, Messenger, Mailer, etc.) are auto-detected — removing a package never crashes the bundle.

Respondents

React to observations in real time. Any service implementing Respondent is auto-tagged:

use Daemon8\Contracts\Respondent;
use Daemon8\Filter;
use Daemon8\Observation;
use Daemon8\Severity;

final class SlowQueryAnalyst implements Respondent
{
    public function interest(): Filter
    {
        return new Filter(kinds: ['query'], severityMin: Severity::Warn);
    }

    public function respond(Observation $observation): void
    {
        // Full container access — Entity Manager, mailer, logger, anything.
    }
}

Run the subscriber: bin/console daemon8:run

Requirements

  • PHP 8.4+
  • Symfony 6.4 LTS or 7.x
  • Daemon8 daemon running locally

Development

composer install
composer check      # phpstan + rector dry-run + phpcs + phpunit

Links

Docs · Demo · Contact

License

MIT. See LICENSE.