nowo-tech/device-intelligence-bundle

Symfony Device Intelligence: probabilistic device matching, risk scoring, collect endpoint, Doctrine, Security, and browser assets. Device IDs are not credentials.

Maintainers

Package info

github.com/nowo-tech/DeviceIntelligenceBundle

Documentation

Type:symfony-bundle

pkg:composer/nowo-tech/device-intelligence-bundle

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.1 2026-08-23 10:47 UTC

This package is auto-updated.

Last update: 2026-08-23 10:49:15 UTC


README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.

Device Intelligence Bundle — probabilistic device matching, risk scoring, a collect endpoint, Doctrine persistence, Security integration, and first-party browser collectors for Symfony. A Device ID is not a credential.

📋 Compatible with Symfony 7.4+ and 8.0–8.1+ — PHP 8.3+ (Symfony 8.x requires PHP 8.4+).

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly.

Features

  • Weighted matching (no sha256(all_signals) identity hash)
  • Named config profiles (default_profile + profiles)
  • Risk engine with explainable rules
  • POST /_device/collect with origin checks, nonce replay protection, and rate limits
  • Doctrine tables with a configurable prefix
  • Controller attributes for risk, rate limits, and trusted devices
  • Web Profiler panel nowo_device_intelligence
  • Browser collectors: pnpm + Vite (IIFE for any host; Pentatrion Vite in the Symfony demo)

Installation

composer require nowo-tech/device-intelligence-bundle

With Symfony Flex, the recipe registers the bundle, config, and collect route. Without Flex, see docs/INSTALLATION.md.

// config/bundles.php
return [
    Nowo\DeviceIntelligenceBundle\NowoDeviceIntelligenceBundle::class => ['all' => true],
];
<script src="{{ asset('js/device-intelligence.min.js', 'nowo_device_intelligence') }}"></script>
<script>
  const device = new DeviceIntelligence({ endpoint: '/_device/collect' });
  device.collect();
</script>

Requirements

  • PHP >=8.3 <8.6
  • Symfony 7.4, 8.0, and 8.1+
  • Optional: Doctrine ORM (default persistence), Messenger, Twig / Web Profiler

Documentation

Additional documentation

Tests and coverage

PHP line coverage target: 99.75% of includable src/ and lib/ (gate ≥ 99%). TypeScript line coverage: 95.60% (gate ≥ 90%).

make test
make test-coverage
make test-ts
make qa
Language Latest reported
PHP 99.75% lines (Clover coverage.xml, CI)
TypeScript 95.60% lines (pnpm run test:coverage)

License

MIT © 2026 Héctor Franco Aceituno / Nowo.tech