{"id":25423872,"url":"https://github.com/gibahjoe/ninjadoc-openapi","last_synced_at":"2026-05-01T04:39:01.841Z","repository":{"id":46097177,"uuid":"291352628","full_name":"gibahjoe/ninjadoc-openapi","owner":"gibahjoe","description":"Library for OpenAPI 3 with ninja framework","archived":false,"fork":false,"pushed_at":"2020-09-14T21:18:36.000Z","size":143,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-14T01:59:03.310Z","etag":null,"topics":["ninja","ninja-framework","ninjadoc-openapi","openapi","openapi-specification","springdoc","swagger-ui"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gibahjoe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2020-08-29T21:33:47.000Z","updated_at":"2022-07-18T07:48:52.000Z","dependencies_parsed_at":"2022-09-13T05:03:13.702Z","dependency_job_id":null,"html_url":"https://github.com/gibahjoe/ninjadoc-openapi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gibahjoe/ninjadoc-openapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gibahjoe%2Fninjadoc-openapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gibahjoe%2Fninjadoc-openapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gibahjoe%2Fninjadoc-openapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gibahjoe%2Fninjadoc-openapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gibahjoe","download_url":"https://codeload.github.com/gibahjoe/ninjadoc-openapi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gibahjoe%2Fninjadoc-openapi/sbom","scorecard":{"id":426319,"data":{"date":"2025-08-11","repo":{"name":"github.com/gibahjoe/ninjadoc-openapi","commit":"a75a6d9cea2aa7a89978d9f33407480cb73696dc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/4 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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"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"}},{"name":"Vulnerabilities","score":0,"reason":"46 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-vmq6-5m68-f53m","Warn: Project is vulnerable to: GHSA-668q-qrv7-99fm","Warn: Project is vulnerable to: GHSA-6v67-2wr5-gvf4","Warn: Project is vulnerable to: GHSA-pr98-23f8-jwxv","Warn: Project is vulnerable to: GHSA-h46c-h94j-95f3","Warn: Project is vulnerable to: GHSA-wf8f-6423-gfxg","Warn: Project is vulnerable to: GHSA-3x8x-79m2-3w2w","Warn: Project is vulnerable to: GHSA-57j2-w4cx-62h2","Warn: Project is vulnerable to: GHSA-jjjh-jjxp-wpff","Warn: Project is vulnerable to: GHSA-rgv9-q543-rqg4","Warn: Project is vulnerable to: GHSA-3f7h-mf4q-vrm4","Warn: Project is vulnerable to: GHSA-5mg8-w23w-74h3","Warn: Project is vulnerable to: GHSA-7g45-4rm6-3mm3","Warn: Project is vulnerable to: GHSA-45hx-wfhj-473x","Warn: Project is vulnerable to: GHSA-h376-j262-vhq6","Warn: Project is vulnerable to: GHSA-84p2-vf58-xhxv","Warn: Project is vulnerable to: GHSA-q485-j897-qc27","Warn: Project is vulnerable to: GHSA-pvp8-3xj6-8c6x","Warn: Project is vulnerable to: GHSA-hfrx-6qgj-fp6c","Warn: Project is vulnerable to: GHSA-vv7r-c36w-3prj","Warn: Project is vulnerable to: GHSA-78wr-2p64-hpwj","Warn: Project is vulnerable to: GHSA-gwrp-pvrq-jmwv","Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v","Warn: Project is vulnerable to: GHSA-6pcc-3rfx-4gpm","Warn: Project is vulnerable to: GHSA-hwj3-m3p6-hj38","Warn: Project is vulnerable to: GHSA-v2xm-76pq-phcf","Warn: Project is vulnerable to: GHSA-7r82-7xv7-xcpj","Warn: Project is vulnerable to: GHSA-8grg-q944-cch5","Warn: Project is vulnerable to: GHSA-j8jw-g6fq-mp7h","Warn: Project is vulnerable to: GHSA-845h-985r-jrqh","Warn: Project is vulnerable to: GHSA-6gf2-pvqw-37ph","Warn: Project is vulnerable to: GHSA-rfmp-97jj-h8m6","Warn: Project is vulnerable to: GHSA-3mgp-fx93-9xv5","Warn: Project is vulnerable to: GHSA-3wqf-4x89-9g79","Warn: Project is vulnerable to: GHSA-4p24-vmcr-4gqj","Warn: Project is vulnerable to: GHSA-7mvr-5x2g-wfc8","Warn: Project is vulnerable to: GHSA-9mvj-f7w8-pvh2","Warn: Project is vulnerable to: GHSA-9v3m-8fp8-mj99","Warn: Project is vulnerable to: GHSA-ph58-4vrj-w6hr","Warn: Project is vulnerable to: GHSA-3mc7-4q67-w48m","Warn: Project is vulnerable to: GHSA-98wm-3w3q-mw94","Warn: Project is vulnerable to: GHSA-9w3m-gqgf-c4p9","Warn: Project is vulnerable to: GHSA-c4r9-r8fh-9vj2","Warn: Project is vulnerable to: GHSA-hhhw-99gj-p3c3","Warn: Project is vulnerable to: GHSA-mjmj-j48q-9wg2","Warn: Project is vulnerable to: GHSA-w37g-rhq8-7m4j"],"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-19T02:19:14.368Z","repository_id":46097177,"created_at":"2025-08-19T02:19:14.368Z","updated_at":"2025-08-19T02:19:14.368Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32485297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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":["ninja","ninja-framework","ninjadoc-openapi","openapi","openapi-specification","springdoc","swagger-ui"],"created_at":"2025-02-16T22:46:56.759Z","updated_at":"2026-05-01T04:39:01.812Z","avatar_url":"https://github.com/gibahjoe.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://jitpack.io/v/gibahjoe/ninjadoc-openapi.svg)](https://jitpack.io/#gibahjoe/ninjadoc-openapi) ![Maven Central](https://img.shields.io/maven-central/v/com.devappliance.ninjadoc/ninjadoc-openapi)\n\n\n# **Introduction**\n\nThe ninjadoc-openapi Java library helps automating the generation of API documentation using Ninja projects.\nninjadoc-openapi works by examining an application at runtime to infer API semantics based on Ninja configurations, class structure and various annotations.\n\nThe library automatically generates documentation in JSON/YAML and HTML formatted pages. The generateed documentation can be complemented using `swagger-api` annotations.\n\nThis library supports:\n*  OpenAPI 3\n*  Ninja v6.5.0 minimum\n*  JSR-303, specifically for @NotNull, @Min, @Max, and @Size.\n*  Swagger-ui\n*  Oauth 2 \n\nThis is a community-based project, not maintained by the Ninja Framework Contributors\n\n# **Getting Started**\n\n## Library for ninjadoc-openapi integration with ninja and swagger-ui \n*   Automatically deploys swagger-ui to a Ninja application\n*   Documentation will be available in HTML format, using the official [swagger-ui jars](https://github.com/swagger-api/swagger-ui.git).\n*   The Swagger UI page should then be available at http://server:port/context-path/swagger-ui.html and the OpenAPI description will be available at the following url for json format: http://server:port/context-path/v3/api-docs\n    * `server`: The server name or IP\n    * `port`: The server port\n    * `context-path`: The context path of the application\n*   Documentation can be available in yaml format as well, on the following path: /v3/api-docs.yaml\n\n## Installation\nNinjaDoc can be installed in as few as the simple steps outlined below.\n\nAdd the dependency to your pom.xml\n```xml\n   \u003cdependency\u003e\n      \u003cgroupId\u003ecom.devappliance.ninjadoc\u003c/groupId\u003e\n      \u003cartifactId\u003eninjadoc-openapi\u003c/artifactId\u003e\n      \u003cversion\u003elast-release-version\u003c/version\u003e\n   \u003c/dependency\u003e\n```\nRegister the routes exposed by NinjaDoc in your Routes.java\n```java\npublic class Routes implements ApplicationRoutes {\n\n    @Inject\n    private NinjaDocRoutes ninjaDocRoutes;\n\n    @Override\n    public void init(Router router) {  \n        ninjaDocRoutes.register(router);\n        // Other application routes\n    }\n\n}\n```\n\nInstall Ninjadoc module in your Module.java\n\n```java\n@Singleton\npublic class Module extends AbstractModule {\n    private final NinjaProperties ninjaProperties;\n\n    @Inject\n    public Module(NinjaProperties ninjaProperties) {\n        this.ninjaProperties = ninjaProperties;\n    }\n\n    protected void configure() {\n        install(new NinjaDocModule(ninjaProperties));\n        // Other application modules\n    }\n\n}\n```\n\nIn order to correctly document return objects in your controllers, instead of the default _Result.java_, NinjaDoc provides a custom annotation to do this for you.\nAnnotate controller methods with this annotation so that correct return types are generated. This is optional but recommended.\n```java\n @Singleton\n public class ApplicationController {\n \n     public Result index() {\n \n         return Results.html();\n \n     }\n//    Add this annotation to generate correct return types\n     @DocumentReturnType(type = SimplePojo.class)\n     public Result helloWorldJson() {\n         \n         SimplePojo simplePojo = new SimplePojo();\n         simplePojo.content = \"Hello World! Hello Json!\";\n \n         return Results.json().render(simplePojo);\n \n     }\n     \n     public static class SimplePojo {\n \n         public String content;\n         \n     }\n }\n```\n\nThis step is optional: For custom path of the swagger documentation in HTML format, add a custom ninjadoc property, in your application.conf file:\n\n```properties\n# swagger-ui custom path\nninjadoc.swagger-ui.path=/swagger-ui.html\n```\nEnjoy.\n\n## Disclaimer\nNinjaDoc was inspired by SpringDoc. In fact, it is a clone of SpringDoc but heavily modified to suit ninja.\nThis means that all features and configuration supported by SpringDoc, as at the releases between March 2020 and August 2020 (I honestly cannot remember when), are also supported by NinjaDoc.\n**If there are any features that were missed or not fully implemented, please raise an issue.**\n\nCheckout the example project for implementation details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgibahjoe%2Fninjadoc-openapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgibahjoe%2Fninjadoc-openapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgibahjoe%2Fninjadoc-openapi/lists"}