{"id":15063240,"url":"https://github.com/anseki/drgriffin","last_synced_at":"2026-01-23T00:27:55.213Z","repository":{"id":57216280,"uuid":"49074564","full_name":"anseki/drgriffin","owner":"anseki","description":"DrGriffin controls a mouse and keyboard automatically for testing a GUI, making a demonstration movie clip, etc.","archived":false,"fork":false,"pushed_at":"2022-08-19T02:58:59.000Z","size":941,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-06T13:56:15.988Z","etag":null,"topics":["automatic","bezier","cli","click","curve","demonstration-movie-clip","drag","drop","gui","java","keyboard","motion","mouse","mouse-pointer","nodejs","pointer","svg","test"],"latest_commit_sha":null,"homepage":null,"language":"Java","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/anseki.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}},"created_at":"2016-01-05T15:33:13.000Z","updated_at":"2024-10-23T12:36:29.000Z","dependencies_parsed_at":"2022-08-26T12:50:11.844Z","dependency_job_id":null,"html_url":"https://github.com/anseki/drgriffin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/anseki/drgriffin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anseki%2Fdrgriffin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anseki%2Fdrgriffin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anseki%2Fdrgriffin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anseki%2Fdrgriffin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anseki","download_url":"https://codeload.github.com/anseki/drgriffin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anseki%2Fdrgriffin/sbom","scorecard":{"id":197986,"data":{"date":"2025-08-11","repo":{"name":"github.com/anseki/drgriffin","commit":"c206a26652d5699bd0d450e5d3bd78238a5bc6c3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":7,"reason":"binaries present in source code","details":["Warn: binary detected: lib/DrGriffin.jar:1","Warn: binary detected: lib/Util.jar:1","Warn: binary detected: lib/snakeyaml-1.16.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-16T22:11:10.537Z","repository_id":57216280,"created_at":"2025-08-16T22:11:10.537Z","updated_at":"2025-08-16T22:11:10.537Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28676143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T20:48:19.482Z","status":"ssl_error","status_checked_at":"2026-01-22T20:48:14.968Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["automatic","bezier","cli","click","curve","demonstration-movie-clip","drag","drop","gui","java","keyboard","motion","mouse","mouse-pointer","nodejs","pointer","svg","test"],"created_at":"2024-09-24T23:53:50.065Z","updated_at":"2026-01-23T00:27:55.186Z","avatar_url":"https://github.com/anseki.png","language":"Java","readme":"# DrGriffin\n\n[![npm](https://img.shields.io/npm/v/drgriffin.svg)](https://www.npmjs.com/package/drgriffin) [![GitHub issues](https://img.shields.io/github/issues/anseki/drgriffin.svg)](https://github.com/anseki/drgriffin/issues) [![dependencies](https://img.shields.io/badge/dependencies-No%20dependency-brightgreen.svg)](package.json) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**Java8 is required**\n\nDrGriffin controls a mouse and keyboard automatically for:\n\n- Testing a GUI of desktop app, web app, operating system, etc.\n- Making a demonstration movie clip that shows operating something\n- etc.\n\nIt moves a mouse pointer, it pushes mouse buttons (e.g. click), it pushes keys of a keyboard, and it does mixed operation (drag, drag with pushing key, etc.), according to your request. You can control these speed and a path of mouse pointer motion, also.\n\n![sample](doc/sample-03-2.gif) ![sample](doc/sample-04.gif)\n\nWhen you test a GUI of your app, you may use a testing tool. DrGriffin will help that.  \nFor example, some testing tools for web apps fire events that are based on DOM elements to emulate user's operation. Therefore, those tools sometimes click an element that can't be clicked by user because it is positioned behind another element. Or those tools sometimes click a wrapper element that is not a wrapped element that has to be clicked.  \nDrGriffin actually does the operation like a user do. It moves a mouse pointer onto the target point, and then it clicks there. That is, an element that can be clicked by user is clicked by DrGriffin. And the app has an experience that is same as that by user's operation.  \nDrGriffin runs on the outside of web browsers or apps. It means that, for example, DrGriffin can drag and drop a file from a filer such as Windows explorer into another app. It can do a drag and drop action in an app, also.\n\n![sample](doc/sample-05.gif)\n\nDrGriffin moves a mouse pointer to a position you specified, as motion. That is, a mouse pointer is not put onto the position immediately, it gradually moves to the position at specific speed. (DrGriffin can also put it onto the position immediately.)\n\nYou can specify a curve as a path the mouse pointer follows. The curve is a [Bezier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) that is supported by many drawing apps such as Adobe Illustrator, HTML `canvas`, SVG, etc.\n\n![sample](doc/sample-01-1.png) ![sample](doc/sample-01-2.gif)\n\nYou can specify a \"timing function\" that indicates how to change the speed at which a mouse pointer is moving. It works same as that of [CSS animation](https://developer.mozilla.org/en/docs/Web/CSS/timing-function), [SVG animation](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/keySplines), etc.\n\n![sample](doc/sample-03-1.gif)\n\nThis following sample: gave DrGriffin these data that were picked up in a SVG formated image file, and then DrGriffin is drawing an image in a paint app.\n\n![sample](doc/sample-06.gif)\n\n## Command Line Tool\n\nSee [CLI.md](doc/CLI.md).\n\n## Java\n\nSee [Java.md](doc/Java.md).\n\n## Node.js\n\nSee [NodeJS.md](doc/NodeJS.md).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanseki%2Fdrgriffin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanseki%2Fdrgriffin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanseki%2Fdrgriffin/lists"}