{"id":13483254,"url":"https://github.com/creadone/device_detector","last_synced_at":"2025-04-17T12:32:15.473Z","repository":{"id":70234145,"uuid":"136379408","full_name":"creadone/device_detector","owner":"creadone","description":"Crystal shard for device detection by User-Agent string","archived":true,"fork":false,"pushed_at":"2024-04-22T18:45:35.000Z","size":698,"stargazers_count":23,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T22:09:57.084Z","etag":null,"topics":["crystal","device-detection","shards","user-agent-analysis","user-agent-parser"],"latest_commit_sha":null,"homepage":"","language":"Crystal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/creadone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-06T19:54:24.000Z","updated_at":"2025-01-17T18:16:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"8fa9a1f2-3831-485e-b823-ee4e5a7d3a08","html_url":"https://github.com/creadone/device_detector","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creadone%2Fdevice_detector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creadone%2Fdevice_detector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creadone%2Fdevice_detector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creadone%2Fdevice_detector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/creadone","download_url":"https://codeload.github.com/creadone/device_detector/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249341840,"owners_count":21254195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crystal","device-detection","shards","user-agent-analysis","user-agent-parser"],"created_at":"2024-07-31T17:01:09.429Z","updated_at":"2025-04-17T12:32:15.058Z","avatar_url":"https://github.com/creadone.png","language":"Crystal","funding_links":[],"categories":["Framework Components"],"sub_categories":[],"readme":"# Device Detector\n\n[![Build Status](https://travis-ci.org/creadone/device_detector.svg?branch=master)](https://travis-ci.org/creadone/device_detector)\n\nThe library for parsing User Agent and browser, operating system, device used (desktop, tablet, mobile, tv, cars, console, etc.), vendor and model detection.\n\n* Support latest Crystal version and update script for private use or immediately updates.\n* Currently it is production version and works fine more that 2 years.\n* The Library uses regexes from [matomo-org/device-detector](https://github.com/matomo-org/device-detector).\n\n## Installation\n\nAdd this to your application's `shard.yml`:\n\n```yaml\ndependencies:\n  device_detector:\n    github: creadone/device_detector\n```\n\nThen run `shards install`\n\n## Usage\n\n```Crystal\nrequire \"device_detector\"\n\nuser_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\"\nresponse = DeviceDetector::Detector.new(user_agent).call  # All parsers\nresponse = DeviceDetector::Detector.new(user_agent).lite  # Only for bot and mobile\n\n# Check if browser detected\nresponse.browser? #=\u003e true\n\n# browser name\nresponse.browser_name #=\u003e Microsoft Edge\n\n# browser version\nresponse.browser_version #=\u003e 12.0\n\n# get raw response with\npp response.raw\n\n[{\n    \"bot\" =\u003e {\n      \"name\" =\u003e \"\"\n    }\n  },\n  {\n    \"browser\" =\u003e {\n      \"name\" =\u003e \"\", \"version\" =\u003e \"\"\n    }\n  },\n\n  {...},\n\n  {\n    \"vendorfragment\" =\u003e {\n      \"vendor\" =\u003e \"\"\n    }\n  }\n]\n\n```\n\nAvailable methods:\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ebot?\u003cbr /\u003ebot_name\u003c/td\u003e\n    \u003ctd\u003ebrowser_engine?\u003cbr /\u003ebrowser_engine_name\u003c/td\u003e\n    \u003ctd\u003ebrowser?\u003cbr /\u003ebrowser_name\u003cbr /\u003ebrowser_version\u003c/td\u003e\n    \u003ctd\u003ecamera?\u003cbr /\u003ecamera_vendor\u003cbr /\u003ecamera_model\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ecar_browser?\u003cbr /\u003ecar_browser_vendor\u003cbr /\u003ecar_browser_model\u003c/td\u003e\n    \u003ctd\u003econsole?\u003cbr /\u003econsole_vendor\u003cbr /\u003econsole_model\u003c/td\u003e\n    \u003ctd\u003efeed_reader?\u003cbr /\u003efeed_reader_name\u003cbr /\u003efeed_reader_version\u003c/td\u003e\n    \u003ctd\u003elibrary?\u003cbr /\u003elibrary_name\u003cbr /\u003elibrary_version\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003emediaplayer?\u003cbr /\u003emediaplayer_name\u003cbr /\u003emediaplayer_version\u003c/td\u003e\n    \u003ctd\u003emobile_app?\u003cbr /\u003emobile_app_name\u003cbr /\u003emobile_app_version\u003c/td\u003e\n    \u003ctd\u003emobile_device?\u003cbr /\u003emobile_device_vendor\u003cbr /\u003emobile_device_type\u003cbr /\u003emobile_device_model\u003c/td\u003e\n    \u003ctd\u003eos?\u003cbr /\u003eos_name\u003cbr /\u003eos_version\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003epim?\u003cbr /\u003epim_name\u003cbr /\u003epim_version\u003c/td\u003e\n    \u003ctd\u003eportable_media_player?\u003cbr /\u003eportable_media_player_vendor\u003cbr /\u003eportable_media_player_model\u003c/td\u003e\n    \u003ctd\u003etv?\u003cbr /\u003etv_vendor\u003cbr /\u003etv_model\u003c/td\u003e\n    \u003ctd\u003evendorfragment?\u003cbr /\u003evendorfragment_vendor\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Benchmarks\n\nRecent benchmarking of parsing 1000 user-agent strings on a MacBook Air with Intel Core i5 dual core (0.8 Ghz per core):\n\nCrystal 0.30.1 (2019-08-13)\nLLVM: 8.0.1\nDefault target: x86_64-apple-macosx\n\n```\nbench/raw_response.cr --release\n            user     system      total        real\nfull:   5.880000   0.060000   5.940000 (  5.940340)\nlite:   3.880000   0.040000   3.920000 (  3.953958)\n```\n\nIt's mean that `device_detector` can work with 1000 / 5.9 ~ 169 QPS.\n\n## Testing\n\n```\ncrystal spec\n```\n\n## Update regexes\n\n```\ncrystal scripts/update_regexes.cr\n```\n\n## ToDo\n\n* Support [overloading of base rules](https://github.com/matomo-org/device-detector/issues/5962)\n* CLI \u0026 HTTP version\n* More lighter and faster the `lite` version\n* Reload regexes on the fly (may be)\n\n## Contributing\n\n1. Fork it ( https://github.com/creadone/device_detector/fork )\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create a new Pull Request\n\n## Contributors\n\n- [@creadone](https://github.com/creadone) Sergey Fedorov - creator, maintainer\n- [@delef](https://github.com/delef) Ivan Palamarchuk - new api, code optimization\n- [@zaycker](https://github.com/zaycker) Yuriy Zaitsev - fix check order\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreadone%2Fdevice_detector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreadone%2Fdevice_detector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreadone%2Fdevice_detector/lists"}