Skip to content

About

Symfony Device Intelligence: probabilistic matching, risk scoring, collect endpoint. Device IDs are not credentials.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

116 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Device Intelligence Bundle

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.

Device Intelligence demo: device ID, risk score, match confidence and the browser collect() response
Browser collect() — device ID, risk score and match confidence
Device Intelligence demo: signed-in user trusts the current browser for 90 days
Trusted devices — signed-in user trusts this browser for 90 days

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
  • Twig Extra (twig/extra-bundle, twig/string-extra; installed with the bundle, register TwigExtraBundle without Flex)

Demo

make -C demo up-symfony8, then open http://localhost:8038 (PORT in demo/symfony8/.env). Playwright e2e: make -C demo/symfony8 test-e2e; refresh the README screenshots with make -C demo/symfony8 demo-screenshots (see CONTRIBUTING).

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

About

Symfony Device Intelligence: probabilistic matching, risk scoring, collect endpoint. Device IDs are not credentials.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages