Search by

nowo-tech / device-intelligence-bundle

HecFranco

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

Package info

github.com/nowo-tech/DeviceIntelligenceBundle

Documentation

Type:symfony-bundle

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

Statistics

Installs: 1 042

Dependents: 0

Suggesters: 1

Stars: 0

Open Issues: 0

v1.4.0 2026-10-21 10:32 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.

Worker mode is supported including reset_kernel: false; see docs/FRANKENPHP-WORKER-AUDIT.md.

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: 99.36% of includable src/ and lib/ (gate ≥ 99%). TypeScript line coverage: 94.28% (gate ≥ 90%).

make test
make test-coverage
make test-ts
make qa
Language Latest reported
PHP 99.36% lines (2936/2955; Clover coverage.xml, CI gate ≥ 99%)
TypeScript 94.28% lines (495/525; pnpm run test:coverage, gate ≥ 90%)

License

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