{"id":13763878,"url":"https://github.com/prettymuchbryce/easystarjs","last_synced_at":"2026-10-19T10:19:26.774Z","repository":{"id":4807699,"uuid":"5961186","full_name":"prettymuchbryce/easystarjs","owner":"prettymuchbryce","description":"An asynchronous A* pathfinding API written in Javascript.","archived":false,"fork":false,"pushed_at":"2024-01-23T23:07:02.000Z","size":853,"stargazers_count":1935,"open_issues_count":36,"forks_count":171,"subscribers_count":43,"default_branch":"master","last_synced_at":"2026-10-14T01:44:38.828Z","etag":null,"topics":["astar","asynchronous","easystar","game","grid","javascript","pathfinding"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"MyOnlineJobs/011679","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prettymuchbryce.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":"2012-09-26T05:27:55.000Z","updated_at":"2026-10-13T04:33:41.000Z","dependencies_parsed_at":"2024-09-22T18:32:18.382Z","dependency_job_id":"0d8536fc-1fa1-4742-bfe8-d11b713090ff","html_url":"https://github.com/prettymuchbryce/easystarjs","commit_stats":{"total_commits":124,"total_committers":19,"mean_commits":6.526315789473684,"dds":0.5887096774193548,"last_synced_commit":"10615147add3af46f76a5d86ee7b7e7bebf83ac5"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/prettymuchbryce/easystarjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prettymuchbryce%2Feasystarjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prettymuchbryce%2Feasystarjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prettymuchbryce%2Feasystarjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prettymuchbryce%2Feasystarjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prettymuchbryce","download_url":"https://codeload.github.com/prettymuchbryce/easystarjs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prettymuchbryce%2Feasystarjs/sbom","scorecard":{"id":744822,"data":{"date":"2025-08-11","repo":{"name":"github.com/prettymuchbryce/easystarjs","commit":"10615147add3af46f76a5d86ee7b7e7bebf83ac5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Code-Review","score":5,"reason":"Found 8/15 approved changesets -- score normalized to 5","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":"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":"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/nodejs.yml:1","Info: no jobLevel write permissions found"],"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":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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/prettymuchbryce/easystarjs/nodejs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/prettymuchbryce/easystarjs/nodejs.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/nodejs.yml:21","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"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":"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":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T18:25:19.734Z","repository_id":4807699,"created_at":"2025-08-22T18:25:19.735Z","updated_at":"2025-08-22T18:25:19.735Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38354758,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["astar","asynchronous","easystar","game","grid","javascript","pathfinding"],"created_at":"2024-08-03T15:01:01.035Z","updated_at":"2026-10-19T10:19:26.365Z","avatar_url":"https://github.com/prettymuchbryce.png","language":"JavaScript","funding_links":[],"categories":["📦 Legacy \u0026 Inactive Projects","Uncategorized","JavaScript"],"sub_categories":["Uncategorized"],"readme":"[\u003cimg src=\"http://s3.amazonaws.com/easystar/logo.png\"\u003e](http://easystarjs.com/)\n\n\n#### HTML5/Javascript Pathfinding Library #####\n\n[Click here for a demonstration](http://easystarjs.com/)\n\n## Installation\n* **Web:** Find the minified file in the __/bin__ directory\n* **node.js:** `npm install easystarjs`\n* **Phaser:** see [Phaser Plugin](https://github.com/appsbu-de/phaser_plugin_pathfinding)\n* **Bower:** `bower install easystarjs`\n\n## Description \neasystar.js is an asynchronous A* pathfinding API written in Javascript for use in your HTML5 games and interactive projects. The goal of this project is to make it easy and fast to implement performance conscious pathfinding. \n\n## Features\n\n* Calculates asynchronously for better overall performance\n* Simple API\n* Small. ~7kb\n* Use it with any existing Javascript Framework\n* TypeScript support\n\n## API\n\n#### Main Methods\n\n```javascript\nvar easystar = new EasyStar.js();\n```\n```javascript\neasystar.setGrid(twoDimensionalArray);\n```\n```javascript\neasystar.setAcceptableTiles(arrayOfAcceptableTiles);\n```\n```javascript\neasystar.findPath(startX, startY, endX, endY, callback);\n```\n```javascript\neasystar.calculate();\n```\n\n#### Additional Features\n\n```javascript\neasystar.setIterationsPerCalculation(someValue);\n```\n```javascript\neasystar.avoidAdditionalPoint(x, y);\n```\n```javascript\neasystar.enableDiagonals();\n```\n```javascript\neasystar.enableCornerCutting();\n```\n```javascript\neasystar.setAdditionalPointCost(x, y, cost);\n```\n```javascript\neasystar.setTileCost(tileType, multiplicativeCost);\n```\n```javascript\neasystar.enableSync();\n```\n```javascript\neasystar.setDirectionalCondition(x, y, [EasyStar.TOP, EasyStar.LEFT]); // only accessible from the top and left\n```\n```javascript\nvar instanceId = easystar.findPath(startX, startY, endX, endY, callback);\n// ...\neasystar.cancelPath(instanceId);\n```\n\n## Usage\n\nFirst create EasyStar.\n```javascript\n// for web\nvar easystar = new EasyStar.js();\n\n// for node.js\nvar easystarjs = require('easystarjs');\nvar easystar = new easystarjs.js();\n```\n\nCreate a grid, or tilemap. You may have made this with a level editor, or procedurally. Let's keep it simple for this example.\n```javascript\nvar grid = [[0,0,1,0,0],\n            [0,0,1,0,0],\n            [0,0,1,0,0],\n            [0,0,1,0,0],\n            [0,0,0,0,0]];\n```\n\nSet our grid.\n```javascript\t\neasystar.setGrid(grid);\n```\nSet tiles which are \"walkable\".\n```javascript\neasystar.setAcceptableTiles([0]);\n```\n\nFind a path.\n```javascript\neasystar.findPath(0, 0, 4, 0, function( path ) {\n\tif (path === null) {\n\t\talert(\"Path was not found.\");\n\t} else {\n\t\talert(\"Path was found. The first Point is \" + path[0].x + \" \" + path[0].y);\n\t}\n});\n```\n\nEasyStar will not yet start calculating my path. \n\nIn order for EasyStar to actually start calculating, I must call the calculate() method.\n\nYou should call `easystar.calculate()` on a ticker, or setInterval.\n\nIf you have a large grid, then it is possible that these calculations could slow down the browser. \nFor this reason, it might be a good idea to give EasyStar a smaller `iterationsPerCalculation` value via \n\n```javascript\neasystar.setIterationsPerCalculation(1000);\n```\n\nIt may take longer for you to find a path this way, but you won't completely halt your game trying to find one.\nThe only thing left to do now is to calculate the path.\n\n```javascript\neasystar.calculate();\n```\n\n## License\n\neasystar.js is licensed under the MIT license. You may use it for commercial use.\n\n## Running the demo locally\n\nIn order to run the demo you will need node.js, and npm installed.\n\n```sh\ngit clone https://github.com/prettymuchbryce/easystarjs.git\n\ncd easystarjs/demo\n\nnpm install\n\nnode app.js\n```\n\nOpen your browser to 127.0.0.1:3000 to see the example.\n\n## Testing\n\n`npm run test`\n\n## Support\n\nIf you have any questions, comments, or suggestions please open an issue.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprettymuchbryce%2Feasystarjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprettymuchbryce%2Feasystarjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprettymuchbryce%2Feasystarjs/lists"}