{"id":16465590,"url":"https://github.com/peterfox/roadrunner-plugin-template","last_synced_at":"2026-06-13T17:01:50.395Z","repository":{"id":146560009,"uuid":"393810402","full_name":"peterfox/roadrunner-plugin-template","owner":"peterfox","description":"Template project for a RoadRunner plugin","archived":false,"fork":false,"pushed_at":"2021-08-30T08:33:47.000Z","size":38,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T18:35:46.292Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/peterfox.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","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},"funding":{"github":"peterfox"}},"created_at":"2021-08-07T23:03:46.000Z","updated_at":"2025-01-09T07:08:34.000Z","dependencies_parsed_at":"2023-04-01T14:33:32.118Z","dependency_job_id":null,"html_url":"https://github.com/peterfox/roadrunner-plugin-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/peterfox/roadrunner-plugin-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfox%2Froadrunner-plugin-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfox%2Froadrunner-plugin-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfox%2Froadrunner-plugin-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfox%2Froadrunner-plugin-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterfox","download_url":"https://codeload.github.com/peterfox/roadrunner-plugin-template/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterfox%2Froadrunner-plugin-template/sbom","scorecard":{"id":728832,"data":{"date":"2025-08-11","repo":{"name":"github.com/peterfox/roadrunner-plugin-template","commit":"6d1693e600542c45612e03bfd4153aefb64f80e0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.6,"checks":[{"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":"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":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: .github/SECURITY.md:1"],"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":"Code-Review","score":0,"reason":"Found 0/3 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:18","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/coverage.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.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":"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":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","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":"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/codeql-analysis.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverage.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/coverage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverage.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/coverage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverage.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/coverage.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/coverage.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/coverage.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/peterfox/roadrunner-plugin-template/tests.yml/master?enable=pin","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction 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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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"}}]},"last_synced_at":"2025-08-22T13:47:30.818Z","repository_id":146560009,"created_at":"2025-08-22T13:47:30.819Z","updated_at":"2025-08-22T13:47:30.819Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34292326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"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":[],"created_at":"2024-10-11T11:34:33.101Z","updated_at":"2026-06-13T17:01:50.377Z","avatar_url":"https://github.com/peterfox.png","language":"Go","funding_links":["https://github.com/sponsors/peterfox"],"categories":[],"sub_categories":[],"readme":"# RoadRunner Plugin Template\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"https://github.com/peterfox/roadrunner-plugin-template/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/peterfox/roadrunner-plugin-template.svg?maxAge=30\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://pkg.go.dev/github.com/peterfox/roadrunner-plugin-template\"\u003e\u003cimg src=\"https://godoc.org/github.com/peterfox/roadrunner-plugin-template?status.svg\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/peterfox/roadrunner-plugin-template/actions\"\u003e\u003cimg src=\"https://github.com/peterfox/roadrunner-plugin-template/workflows/tests/badge.svg\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://goreportcard.com/report/github.com/peterfox/roadrunner-plugin-template\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/peterfox/roadrunner-plugin-template\"\u003e\u003c/a\u003e\n\t\u003ca href=\"https://lgtm.com/projects/g/peterfox/roadrunner-plugin-template/alerts/\"\u003e\u003cimg alt=\"Total alerts\" src=\"https://img.shields.io/lgtm/alerts/g/peterfox/roadrunner-plugin-template.svg?logo=lgtm\u0026logoWidth=18\"/\u003e\u003c/a\u003e\n    \u003cimg alt=\"All releases\" src=\"https://img.shields.io/github/downloads/peterfox/roadrunner-plugin-template/total\"\u003e\n\u003c/p\u003e\n\n\u003ctodo\u003e\nThis repo can be used to scaffold a RoadRunner Plugin. Follow these steps to get started:\n\n1. Update the module name in go.mod\n\n   ```\n   module github.com/peterfox/roadrunner-plugin-template\n   ```\n2. Ideally you should rename the package in all the `.go` files from `plugin` to something else.\n\n   ```go\n   package plugin\n   ```\n3. Rename the plugin to whatever is appropriate, this should be kept to snake case:\n   ```go\n   const PluginName = \"plugin\"\n   ```\n4. Update the LICENSE.md file\n5. If your plugin is not going to be public on GitHub then you should remove `.github/workflows/codeql-analysis.yml`. You may also need to [enable code scanning](https://docs.github.com/en/code-security/secure-coding/automatically-scanning-your-code-for-vulnerabilities-and-errors/about-code-scanning) for the repository\n6. Update the contributors in the README.md.\n7. Update the README.md references to the plugin, installation and usage.\n8. Update the badges at the top of README.md to point to your own repository.\n9. Update the .github/FUNDING.yml file.\n10. Remove the todo section from your README.md\n\n\u003c/todo\u003e\n\n## Installation\n\nTo use this plugin with RoadRunner you will need to fork or clone your\nown copy of the [RoadRunner binary](https://github.com/spiral/roadrunner-binary).\n\nYou can import the plugin via go modules:\n\n```sh\ngo get github.com/peterfox/roadrunner-plugin-demo\n```\n\nFrom there you can edit the [plugins.go](https://github.com/spiral/roadrunner-binary/blob/stable/internal/container/plugins.go) file to\nimport the plugin.\n\n```go\npackage container\n\nimport (\n    // ...\n    demoPlugin \"github.com/peterfox/roadrunner-plugin-template\"\n    // ...\n)\n\n// Plugins returns active plugins for the endure container. Feel free to add or remove any plugins.\nfunc Plugins() []interface{} {\n\treturn []interface{}{\n        // ...\n        \u0026demoPlugin.Plugin{},\n        // ...\n    }\n}\n\n```\n\nBy importing this plugin and registering it the plugin will be compiled into the final binary.\n\nThe plugin will require that the _.rr.yaml_ config has the key `plugin` for the plugin won't initialise with roadrunner.\n\n```yaml\nplugin:\n  value: foobar\n```\n\n## Usage\n\nTo make use of this plugin via PHP you must install the [Spiral Goridge](https://github.com/spiral/goridge-php) library.\n\nYou can use the following code as an example in php:\n\n```php\n\u003c?php\n\nuse Spiral\\Goridge\\RPC\\RPC;\nuse Spiral\\RoadRunner\\Environment;\n\n$rpc = RPC::create(Environment::fromGlobals()-\u003egetRPCAddress());\n\n// returns ['message' =\u003e 'test']\n$output = $rpc-\u003ecall('plugin.Message', ['message' =\u003e 'test']);\n```\n\n## Testing\n\nYou may download the project and test the plugin using the following command.\n\n```bash\ngo test\n```\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## Contributing\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [Peter Fox](https://github.com/peterfox)\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterfox%2Froadrunner-plugin-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterfox%2Froadrunner-plugin-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterfox%2Froadrunner-plugin-template/lists"}