{"id":20397320,"url":"https://github.com/nielsbasjes/yauaa","last_synced_at":"2026-01-16T22:59:26.073Z","repository":{"id":37431028,"uuid":"62569629","full_name":"nielsbasjes/yauaa","owner":"nielsbasjes","description":"Yet Another UserAgent Analyzer","archived":false,"fork":false,"pushed_at":"2026-01-12T18:33:55.000Z","size":96875,"stargazers_count":886,"open_issues_count":5,"forks_count":143,"subscribers_count":34,"default_branch":"main","last_synced_at":"2026-01-12T19:34:50.498Z","etag":null,"topics":["analyzer","apache-beam","apache-flink","apache-hive","client-hints","flink","hive","java","nifi-processor","nifi-processors","parse","snowflake","snowplow","snowplowanalytics","trino-plugin","user-agent","user-agent-analysis","user-agent-parser","useragent-parser","useragentparser"],"latest_commit_sha":null,"homepage":"https://yauaa.basjes.nl","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nielsbasjes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"nielsbasjes"}},"created_at":"2016-07-04T14:51:04.000Z","updated_at":"2026-01-12T12:43:24.000Z","dependencies_parsed_at":"2023-10-12T14:28:38.724Z","dependency_job_id":"128e2fc3-a941-4742-bec1-05442f518689","html_url":"https://github.com/nielsbasjes/yauaa","commit_stats":{"total_commits":4538,"total_committers":21,"mean_commits":216.0952380952381,"dds":0.2666372851476422,"last_synced_commit":"89bd6b7a1064fb790ad69ec06dd98abb646d95cd"},"previous_names":[],"tags_count":114,"template":false,"template_full_name":null,"purl":"pkg:github/nielsbasjes/yauaa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsbasjes%2Fyauaa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsbasjes%2Fyauaa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsbasjes%2Fyauaa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsbasjes%2Fyauaa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nielsbasjes","download_url":"https://codeload.github.com/nielsbasjes/yauaa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nielsbasjes%2Fyauaa/sbom","scorecard":{"id":93193,"data":{"date":"2022-12-30","repo":{"name":"github.com/nielsbasjes/yauaa","commit":"d8ad148a858e28e380e08a2fe07c8d025959f22c"},"scorecard":{"version":"v4.8.0","commit":"c40859202d739b31fd060ac5b30d17326cd74275"},"score":6.2,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"10 out of 10 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"0 out of last 30 changesets reviewed before merge -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#code-review"}},{"name":"Contributors","score":6,"reason":"2 different organizations found -- score normalized to 6","details":["Info: contributors work for bolcom,mend"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: Renovabot detected: renovate.json:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":null,"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: : LICENSE:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"30 commit(s) out of 30 and 17 issue activity out of 30 found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: containerImage not pinned by hash: analyzer/src/it/Examples/quarkus/src/main/docker/Dockerfile.fast-jar:40: pin your Docker image by updating registry.access.redhat.com/ubi8/ubi-minimal to registry.access.redhat.com/ubi8/ubi-minimal@sha256:5d2d4d4dbec470f8ffb679915e2a8ae25ad754cd9193fa966deee1ecb7b3ee00","Warn: containerImage not pinned by hash: analyzer/src/it/Examples/quarkus/src/main/docker/Dockerfile.jvm:40: pin your Docker image by updating registry.access.redhat.com/ubi8/ubi-minimal to registry.access.redhat.com/ubi8/ubi-minimal@sha256:5d2d4d4dbec470f8ffb679915e2a8ae25ad754cd9193fa966deee1ecb7b3ee00","Warn: containerImage not pinned by hash: analyzer/src/it/Examples/quarkus/src/main/docker/Dockerfile.native:33: pin your Docker image by updating registry.access.redhat.com/ubi8/ubi-minimal to registry.access.redhat.com/ubi8/ubi-minimal@sha256:5d2d4d4dbec470f8ffb679915e2a8ae25ad754cd9193fa966deee1ecb7b3ee00","Warn: containerImage not pinned by hash: devtools/analysis/Dockerfile:21","Warn: containerImage not pinned by hash: devtools/docker/Dockerfile:17: pin your Docker image by updating ubuntu to ubuntu@sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9","Warn: containerImage not pinned by hash: udfs/drill/src/it/docker/Dockerfile:19: pin your Docker image by updating apache/drill to apache/drill@sha256:761279d92bd71d71c61357c55e8a9f215917b795fb4354767136b8c2f3ad169f","Warn: containerImage not pinned by hash: udfs/elastic/elasticsearch-7/src/it/docker/Dockerfile:21","Warn: containerImage not pinned by hash: udfs/elastic/elasticsearch-8/src/it/docker/Dockerfile:21","Warn: containerImage not pinned by hash: udfs/elastic/logstash/logstash-filter/src/it/docker/Dockerfile:20","Warn: containerImage not pinned by hash: udfs/trino/src/it/docker/Dockerfile:19: pin your Docker image by updating trinodb/trino to trinodb/trino@sha256:ee80ab5eeab2754360c156e19e0676dca9f68f8d859419ade71cff836341a000","Warn: containerImage not pinned by hash: webapp/src/test/resources/ITDockerfile:18: pin your Docker image by updating nielsbasjes/yauaa to nielsbasjes/yauaa@sha256:b472803e27ede4fb8b3039f375552ee4399875080bbd5c01d1f5136ad2d2bf0d","Info: GitHub-owned GitHubActions are pinned","Info: Third-party GitHubActions are pinned","Info: no insecure (not pinned by hash) dependency downloads found in Dockerfiles","Info: no insecure (not pinned by hash) dependency downloads found in shell scripts"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool","Warn: CodeQL tool not detected"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":null,"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"0 out of 5 artifacts are signed or have provenance","details":["Warn: release artifact v7.9.1 does not have provenance: https://api.github.com/repos/nielsbasjes/yauaa/releases/86570172","Warn: release artifact v7.9.1 not signed: https://api.github.com/repos/nielsbasjes/yauaa/releases/86570172","Warn: release artifact v7.9.0 does not have provenance: https://api.github.com/repos/nielsbasjes/yauaa/releases/84977764","Warn: release artifact v7.9.0 not signed: https://api.github.com/repos/nielsbasjes/yauaa/releases/84977764","Warn: release artifact v7.8.0 does not have provenance: https://api.github.com/repos/nielsbasjes/yauaa/releases/81331062","Warn: release artifact v7.8.0 not signed: https://api.github.com/repos/nielsbasjes/yauaa/releases/81331062","Warn: release artifact v7.7.0 does not have provenance: https://api.github.com/repos/nielsbasjes/yauaa/releases/80237467","Warn: release artifact v7.7.0 not signed: https://api.github.com/repos/nielsbasjes/yauaa/releases/80237467","Warn: release artifact v7.6.0 does not have provenance: https://api.github.com/repos/nielsbasjes/yauaa/releases/77552110","Warn: release artifact v7.6.0 not signed: https://api.github.com/repos/nielsbasjes/yauaa/releases/77552110"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"tokens are read-only in GitHub workflows","details":["Info: topLevel permissions set to 'read-all': .github/workflows/build.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/nielsbasjes/yauaa/build.yml/main?enable=permissions","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/nielsbasjes/yauaa/scorecards.yml/main?enable=permissions","Info: topLevel permissions set to 'read-all': .github/workflows/website.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/nielsbasjes/yauaa/website.yml/main?enable=permissions"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"no vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c40859202d739b31fd060ac5b30d17326cd74275/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T08:18:19.705Z","repository_id":37431028,"created_at":"2025-08-15T08:18:19.705Z","updated_at":"2025-08-15T08:18:19.705Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28487051,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T22:54:02.790Z","status":"ssl_error","status_checked_at":"2026-01-16T22:50:10.344Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["analyzer","apache-beam","apache-flink","apache-hive","client-hints","flink","hive","java","nifi-processor","nifi-processors","parse","snowflake","snowplow","snowplowanalytics","trino-plugin","user-agent","user-agent-analysis","user-agent-parser","useragent-parser","useragentparser"],"created_at":"2024-11-15T04:13:17.390Z","updated_at":"2026-01-16T22:59:26.068Z","avatar_url":"https://github.com/nielsbasjes.png","language":"Java","funding_links":["https://github.com/sponsors/nielsbasjes"],"categories":[],"sub_categories":[],"readme":"Yauaa: Yet Another UserAgent Analyzer\n========================================\n[![Github actions Build status](https://img.shields.io/github/actions/workflow/status/nielsbasjes/yauaa/build.yml?branch=main)](https://github.com/nielsbasjes/yauaa/actions)\n[![Coverage Status](https://img.shields.io/codecov/c/github/nielsbasjes/yauaa)](https://app.codecov.io/gh/nielsbasjes/yauaa)\n[![License](https://img.shields.io/:license-apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![Maven Central](https://img.shields.io/maven-central/v/nl.basjes.parse.useragent/yauaa-parent.svg?label=Maven%20central)](https://central.sonatype.com/namespace/nl.basjes.parse.useragent)\n[![Reproducible Builds](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/jvm-repo-rebuild/reproducible-central/master/content/nl/basjes/parse/useragent/yauaa/badge.json)](https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/nl/basjes/parse/useragent/yauaa/README.md)\n[![GitHub stars](https://img.shields.io/github/stars/nielsbasjes/yauaa?label=GitHub%20stars)](https://github.com/nielsbasjes/yauaa/stargazers)\n[![Docker Image](https://img.shields.io/docker/v/nielsbasjes/yauaa/latest?arch=amd64\u0026label=Docker%20image)](https://hub.docker.com/r/nielsbasjes/yauaa)\n[![Docker Hub](https://img.shields.io/docker/pulls/nielsbasjes/yauaa?label=Docker%20pulls)](https://hub.docker.com/r/nielsbasjes/yauaa)\n[![If this project has business value for you then don't hesitate to support me with a small donation.](https://img.shields.io/badge/Sponsor%20me-via%20Github-darkgreen.svg)](https://github.com/sponsors/nielsbasjes)\n[![Website](https://img.shields.io/badge/https://-yauaa.basjes.nl-blue.svg)](https://yauaa.basjes.nl/)\n\nThis is a java library that tries to parse and analyze the useragent string (and when available the User-Agent Client Hints) and extract as many relevant attributes as possible.\n\nWorks with Java, Scala, Kotlin and provides ready for use UDFs for several processing systems.\n\nThe full documentation can be found here [https://yauaa.basjes.nl](https://yauaa.basjes.nl)\n\nTry it!\n=======\nYou can try it online with your own browser here: [https://try.yauaa.basjes.nl/](https://try.yauaa.basjes.nl/).\n\n**NOTES**\n1. This runs on a very slow and rate limited machine.\n2. If you really like this then run it on your local systems. It's much faster that way.\n   A Kubernetes ready Docker image is provided. See this page about the [WebServlet](https://yauaa.basjes.nl/using/webservlet) for more information.\n\nLicense\n=======\nI'm publishing this under the Apache 2.0 license because I believe it is the best way to make these kinds of projects available to the world.\n\nBut do not underestimate how much work went into this. I have spent over a decade tuning this project to what you have now.\n\nAll I want to see in return is a little bit of gratitude from the people who use this.\nIf you are a home user/hobbyist/small business then a simple star on the project is enough for me. Seeing that people use and like the things I create is what I'm doing this for.\nWhat also really helps are bug reports, headers from real/new devices/browsers that I have net yet seen before and discussions on things you think can be done better.\n\nDespite there not being any obligation (because of the Apache 2.0 license); If you are a big corporation where my code really adds value to the products you make/sell then I would really appreciate it if you could do a small sponsor thing. Buy me lunch (€10), Buy me a game (€100) or what ever you think is the right way to say thank you for the work I have done.\n\n[![If this project has business value for you then don't hesitate to support me with a small donation.](https://img.shields.io/badge/Sponsor%20me-via%20Github-darkgreen.svg)](https://github.com/sponsors/nielsbasjes)\n\n    Yet Another UserAgent Analyzer\n    Copyright (C) 2013-2026 Niels Basjes\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnielsbasjes%2Fyauaa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnielsbasjes%2Fyauaa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnielsbasjes%2Fyauaa/lists"}