device_detector v0.4.0
forked from creadone/device_detectorDevice Detector
The library for parsing User Agent and browser, operating system, device used (desktop, tablet, mobile, tv, cars, console, etc.), vendor and model detection.
- Support latest Crystal version and update script for private use or immediately updates.
- The Library uses regexes from matomo-org/device-detector.
Installation
Add this to your application's shard.yml
:
dependencies:
device_detector:
github: crystal-garage/device_detector
Then run shards install
Usage
require "device_detector"
user_agent = "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0"
response = DeviceDetector::Detector.new(user_agent).call
response.browser? # => true
response.browser.name # => "Microsoft Edge"
response.browser.version # => "12.0"
pp response.raw
[{"bot" =>
{"name" => "",
"category" => "",
"url" => "",
"producer_name" => "",
"producer_url" => ""}},
{"browser" => {"name" => "Microsoft Edge", "version" => "12.0"}},
{"browser_engine" => {"name" => "Edge"}},
{"camera" => {"vendor" => "", "model" => "", "device" => ""}},
{"car_browser" => {"vendor" => "", "device" => "", "model" => ""}},
{"console" => {"vendor" => "", "model" => ""}},
{"feed_reader" => {"name" => "", "version" => ""}},
{"library" => {"name" => "", "version" => ""}},
{"mediaplayer" => {"name" => "", "version" => ""}},
{"mobile_app" => {"name" => "", "version" => ""}},
{"mobile" => {"device" => "", "vendor" => "", "type" => ""}},
{"os" => {"name" => "Windows", "version" => "10"}},
{"pim" => {"name" => "", "version" => ""}},
{"portable_media_player" => {"vendor" => "", "model" => ""}},
{"tv" => {"model" => "", "vendor" => ""}},
{"vendorfragment" => {"vendor" => ""}}]
Available methods:
Bot bot? bot.name bot.category bot.url bot.producer.name bot.producer.url |
Browser Engine browser_engine? browser_engine.name |
Browser browser? browser.name browser.version |
Camera camera? camera.device camera.vendor |
Car Browser car_browser? car_browser.model car_browser.vendor |
Console console? console.model console.vendor |
Feed Reader feed_reader? feed_reader.name feed_reader.version |
Library library? library.name library.version |
Media Player mediaplayer? mediaplayer.name mediaplayer.version |
Mobile App mobile_app? mobile_app.name mobile_app.version |
Mobile mobile? mobile.vendor mobile.type mobile.model |
OS os? os.name os.version |
PIM pim? pim.name pim.version |
Portable Media Player portable_media_player? portable_media_player.model portable_media_player.vendor |
TV tv? tv.model tv.vendor |
Vendor Fragment vendorfragment? vendorfragment.vendor |
Benchmark
crystal run ./bench/raw_response.cr --release
Results:
user system total real
full: 1.645194 0.025706 1.670900 ( 1.677467)
lite: 0.766103 0.007790 0.773893 ( 0.777249)
It's mean that device_detector
can work with 1000 / 1.68 ~ 595 QPS (full) and 1000 / 0.78 ~ 1282 QPS (lite).
Note: This benchmark uses 20 diverse user agents including browsers, mobile devices, and bots for realistic performance measurement.
Testing
crystal spec
Update regexes
crystal scripts/update_regexes.cr
Contributing
- Fork it ( https://github.com/crystal-garage/device_detector/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- @creadone Sergey Fedorov - creator, maintainer
- @delef Ivan Palamarchuk - new api, code optimization
- @zaycker Yuriy Zaitsev - fix check order
- @mamantoha Anton Maminov - maintainer
Repository
device_detector
Owner
Statistic
- 2
- 0
- 0
- 1
- 1
- 10 days ago
- August 1, 2025
License
MIT License
Links
Synced at
Fri, 15 Aug 2025 23:22:41 GMT
Languages