{"id":50857596,"url":"https://github.com/devrail-dev/devrail-plugin-kotlin","last_synced_at":"2026-06-14T19:04:03.170Z","repository":{"id":355757357,"uuid":"1229469443","full_name":"devrail-dev/devrail-plugin-kotlin","owner":"devrail-dev","description":"DevRail plugin: Kotlin language ecosystem (ktlint, detekt, Gradle, JDK 21). Reference example for Story 13.7.","archived":false,"fork":false,"pushed_at":"2026-05-05T04:37:01.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-05T06:28:55.504Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","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/devrail-dev.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-05T04:33:11.000Z","updated_at":"2026-05-05T04:37:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devrail-dev/devrail-plugin-kotlin","commit_stats":null,"previous_names":["devrail-dev/devrail-plugin-kotlin"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/devrail-dev/devrail-plugin-kotlin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devrail-dev%2Fdevrail-plugin-kotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devrail-dev%2Fdevrail-plugin-kotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devrail-dev%2Fdevrail-plugin-kotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devrail-dev%2Fdevrail-plugin-kotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devrail-dev","download_url":"https://codeload.github.com/devrail-dev/devrail-plugin-kotlin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devrail-dev%2Fdevrail-plugin-kotlin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34333868,"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-14T02:00:07.365Z","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":"2026-06-14T19:04:02.367Z","updated_at":"2026-06-14T19:04:03.166Z","avatar_url":"https://github.com/devrail-dev.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# devrail-plugin-kotlin\n\nDevRail plugin: Kotlin language ecosystem (ktlint, detekt, Gradle, JDK 21).\n\nThis is the **reference plugin** extracted from `dev-toolchain` core during\n[Story 13.7](https://github.com/devrail-dev/devrail-standards/blob/main/_bmad-output/implementation-artifacts/13-7-extract-kotlin-as-reference-plugin.md).\nIt demonstrates the v1 plugin model and serves as the template for other\nlanguages that will follow the same extraction path in v2.0.0.\n\n## What's included\n\n- **JDK 21** (Eclipse Temurin) — copied from the `eclipse-temurin:21-jdk`\n  builder stage by the dev-toolchain build pipeline (Story 13.4).\n- **[ktlint](https://github.com/pinterest/ktlint) 1.5.0** — Kotlin linter\n  and formatter using the official Kotlin coding conventions.\n- **[detekt](https://github.com/detekt/detekt) 1.23.7** — configurable\n  static analysis for Kotlin (complexity, potential bugs, code smells).\n- **[Gradle](https://gradle.org/) 8.12** — the standard Kotlin build tool.\n- **OWASP dependency-check** — Gradle plugin for scanning dependencies\n  against the National Vulnerability Database (consumed via\n  `gradle dependencyCheckAnalyze`).\n\n## Consumer-side declaration\n\nAdd to your project's `.devrail.yml`:\n\n```yaml\nplugins:\n  - source: github.com/devrail-dev/devrail-plugin-kotlin\n    rev: v1.0.0\n    languages: [kotlin]\n```\n\nThen:\n\n```sh\nmake plugins-update    # resolves rev → SHA, writes .devrail.lock\nmake check             # builds the project-local extended image and runs all targets\n```\n\n\u003e **Note:** While `dev-toolchain` v1.10.x and v1.11.x continue to ship\n\u003e Kotlin in core, declaring `kotlin` in `languages:` will hit the in-core\n\u003e path FIRST (per the loader's \"core wins\" precedence rule). To exercise\n\u003e this plugin, declare it in `plugins:` only — leave `kotlin` out of the\n\u003e top-level `languages:` list. v2.0.0 (Story 13.9) removes the in-core\n\u003e Kotlin path; from then on, this plugin is the only path.\n\n## Targets\n\nThe plugin maps to the standard DevRail Makefile targets:\n\n| Target          | Command                                                                 | Gate              |\n|-----------------|-------------------------------------------------------------------------|-------------------|\n| `lint`          | `ktlint \u0026\u0026 detekt-cli ...`                                              | `build.gradle.kts` |\n| `format_check`  | `ktlint --format --dry-run`                                             | `build.gradle.kts` |\n| `format_fix`    | `ktlint --format`                                                        | `build.gradle.kts` |\n| `test`          | `gradle test --no-daemon`                                                | `build.gradle.kts` |\n| `security`      | `gradle dependencyCheckAnalyze --no-daemon`                              | `build.gradle.kts` |\n\nThe `lint` target chains ktlint AND detekt with `\u0026\u0026` because the v1\nplugin contract is one cmd per target. To override either tool\nindividually, use a per-language override in your `.devrail.yml`:\n\n```yaml\nkotlin:\n  linter: \"ktlint\"          # drop detekt\n  test: \"gradle test --info\" # extra Gradle flags\n```\n\nOverride key map (per the [`.devrail.yml` schema](https://github.com/devrail-dev/devrail-standards/blob/main/standards/devrail-yml-schema.md)):\n`lint→linter`, `format_check`/`format_fix→formatter`, `fix→fixer`,\n`test→test`, `security→security`. Overrides take the cmd verbatim.\n\n## Versioning\n\n- **`schema_version: 1`** — the manifest format. v1.10.0 baseline.\n- **`version`** — this plugin's own semver. Bumped on releases.\n- **`devrail_min_version: 1.10.0`** — the oldest dev-toolchain version\n  that supports this plugin (when the plugin loader first stabilized).\n\n| Plugin version | dev-toolchain min | Notes                                                          |\n|----------------|-------------------|----------------------------------------------------------------|\n| `v1.0.0`       | `1.10.0`          | Initial extraction. ktlint 1.5.0, detekt 1.23.7, Gradle 8.12.  |\n\n## Local development\n\nTo test changes to this plugin against a consumer workspace:\n\n```yaml\n# In the consumer's .devrail.yml\nplugins:\n  - source: file:///path/to/devrail-plugin-kotlin\n    rev: v1.0.0\n    languages: [kotlin]\n```\n\n```sh\nmake plugins-update\nmake check\n```\n\n## Contributing\n\nThis plugin follows DevRail standards. To work on it:\n\n```sh\nmake check               # lint, format, test, security, scan\nmake install-hooks       # one-time pre-commit setup\n```\n\nAll commits use [conventional commit format](https://github.com/devrail-dev/devrail-standards/blob/main/standards/git-workflow.md).\n\n## License\n\n[MIT](LICENSE)\n\n## See also\n\n- [Plugin architecture design doc](https://github.com/devrail-dev/devrail-standards/blob/main/_bmad-output/planning-artifacts/plugin-architecture-design.md)\n- [Contributing a Plugin guide](https://github.com/devrail-dev/devrail-standards/blob/main/standards/contributing.md#contributing-a-plugin)\n- [`.devrail.yml` schema](https://github.com/devrail-dev/devrail-standards/blob/main/standards/devrail-yml-schema.md)\n- [Release blog post](https://devrail.dev/blog/2026-05-05-plugin-architecture/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevrail-dev%2Fdevrail-plugin-kotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevrail-dev%2Fdevrail-plugin-kotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevrail-dev%2Fdevrail-plugin-kotlin/lists"}