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.
Package info
github.com/nowo-tech/DeviceIntelligenceBundle
Type:symfony-bundle
pkg:composer/nowo-tech/device-intelligence-bundle
Requires
- php: >=8.3 <8.6
- doctrine/doctrine-bundle: ^2.12 || ^3.0
- doctrine/orm: ^2.19 || ^3.0
- psr/clock: ^1.0
- psr/log: ^1.0 || ^2 || ^3
- psr/simple-cache: ^1.0 || ^2.0 || ^3.0
- symfony/cache: ^7.4 || ^8.0
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/messenger: ^7.4 || ^8.0
- symfony/rate-limiter: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/serializer: ^7.4 || ^8.0
- symfony/uid: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- nowo-tech/phpstan-frankenphp: ^1.1
- phpstan/phpstan: ^2.1
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- rector/rector: ^2.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/web-profiler-bundle: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/twig: ^3.12
- vincentlanglet/twig-cs-fixer: ^3.0
Suggests
- symfony/messenger: To dispatch cleanup and stability recalculation asynchronously
- symfony/translation: To translate the Web Profiler panel (domain NowoDeviceIntelligenceBundle)
- symfony/twig-bundle: To render the Web Profiler panel
- symfony/web-profiler-bundle: To inspect device match, risk, and timings in the profiler
This package is auto-updated.
Last update: 2026-08-23 10:49:15 UTC
README
⭐ 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+).
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/collectwith 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
- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
Additional documentation
- Quick start
- Collectors
- Matching
- Risk engine
- Trusted devices
- Privacy
- Rate limiting
- Profiler
- Custom rules
- Custom collectors
- Scaling
- PSR evaluation
- Coverage policy
- Demo FrankenPHP
- GitHub CI
- GitHub About
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
