{"id":34113106,"url":"https://github.com/hanggrian/rulebook","last_synced_at":"2026-04-08T15:31:40.701Z","repository":{"id":102523420,"uuid":"556969715","full_name":"hanggrian/rulebook","owner":"hanggrian","description":"Aggresive multi-platform linter extensions","archived":false,"fork":false,"pushed_at":"2026-04-07T08:21:28.000Z","size":9968,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-07T09:30:12.774Z","etag":null,"topics":["checkstyle","ktlint","lint-rules"],"latest_commit_sha":null,"homepage":"http://hanggrian.com/rulebook/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hanggrian.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2022-10-24T21:22:09.000Z","updated_at":"2026-04-07T08:20:31.000Z","dependencies_parsed_at":"2024-05-18T12:26:36.388Z","dependency_job_id":"33984f21-f254-4177-8764-29dd3af4cdd1","html_url":"https://github.com/hanggrian/rulebook","commit_stats":null,"previous_names":["hanggrian/rulebook"],"tags_count":4,"template":false,"template_full_name":"hanggrian/kotlin-starters","purl":"pkg:github/hanggrian/rulebook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanggrian%2Frulebook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanggrian%2Frulebook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanggrian%2Frulebook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanggrian%2Frulebook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hanggrian","download_url":"https://codeload.github.com/hanggrian/rulebook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanggrian%2Frulebook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"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":["checkstyle","ktlint","lint-rules"],"created_at":"2025-12-14T19:08:39.617Z","updated_at":"2026-04-08T15:31:40.693Z","avatar_url":"https://github.com/hanggrian.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/hanggrian/rulebook/code-analysis.yml)](https://github.com/hanggrian/rulebook/actions/workflows/code-analysis.yml)\n[![Codecov](https://img.shields.io/codecov/c/gh/hanggrian/rulebook)](https://app.codecov.io/gh/hanggrian/rulebook/)\n[![Renovate](https://img.shields.io/badge/dependency-mend-blue)](https://developer.mend.io/github/hanggrian/rulebook/) \\\n[![Maven Central](https://img.shields.io/maven-central/v/com.hanggrian.rulebook/rulebook-ktlint)](https://repo1.maven.org/maven2/com/hanggrian/rulebook/rulebook-ktlint/)\n[![Java](https://img.shields.io/badge/java-8+-informational)](https://docs.oracle.com/javase/8/) \\\n[![Package Index](https://shields.io/pypi/v/rulebook-pylint)](https://pypi.org/project/rulebook-pylint/)\n[![Package Index Test](https://shields.io/pypi/v/rulebook-pylint?label=testpypi\u0026pypiBaseUrl=https://test.pypi.org)](https://test.pypi.org/project/rulebook-pylint/)\n[![Python](https://img.shields.io/badge/python-3.10+-informational)](https://docs.python.org/3.10/)\n\n# Rulebook\n\n![The Rulebook logo.](https://github.com/hanggrian/rulebook/raw/assets/logo.svg)\n\nThird-party linter rules for multiple programming languages. It aims to\nstandardize existing rules from various linters, providing a consistent style\nacross different languages and tools. It also serves as a reference for best\npractices in coding style.\n\nLanguage | Linter | Styles\n--- | --- | ---\nJava | [Checkstyle](https://github.com/checkstyle/checkstyle/) | [Sun Java Style](https://checkstyle.sourceforge.io/sun_style.html) or\u003cbr\u003e[Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)\nGroovy | [CodeNarc](https://github.com/CodeNarc/CodeNarc/) | [Groovy Style Guide](https://groovy-lang.org/style-guide.html)\nKotlin | [Ktlint](https://github.com/pinterest/ktlint/) | [Ktlint Official Style](https://pinterest.github.io/ktlint/1.0.1/rules/code-styles/)\nC/C++ | [Cppcheck](https://github.com/danmar/cppcheck/) | [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) or\u003cbr\u003e[Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)\nPython | [Pylint](https://github.com/pylint-dev/pylint/) | [Pylint Style](https://pylint.pycqa.org/en/latest/user_guide/configuration/all-options.html) or\u003cbr\u003e[Google Python Style Guide](https://google.github.io/styleguide/pyguide.html)\nJavaScript | [ESLint](https://github.com/eslint/eslint/) | [Crockford Code Conventions](https://www.crockford.com/code.html) or\u003cbr\u003e[Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)\nTypeScript | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/) | [Crockford Code Conventions](https://www.crockford.com/code.html) or\u003cbr\u003e[Google TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html)\n\n[View all rules](https://hanggrian.github.io/rulebook/rules/)\n\n## Download\n\n### Maven\n\n```gradle\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    ktlint \"com.hanggrian.rulebook:rulebook-ktlint:$version\"\n    checkstyle \"com.hanggrian.rulebook:rulebook-checkstyle:$version\"\n    codenarc \"com.hanggrian.rulebook:rulebook-codenarc:$version\"\n}\n```\n\n### PyPI\n\n```sh\npip install regex pylint rulebook-pylint\npip install regex cppcheck rulebook-cppcheck\n```\n\n### NPM\n\n```sh\nnpm install rulebook-eslint --save-dev\nnpm install rulebook-typescript-eslint --save-dev\n```\n\n## Usage\n\n### Checkstyle\n\n- Apply [Checkstyle Gradle Plugin](https://docs.gradle.org/current/userguide/checkstyle_plugin.html).\n- Using configuration `checkstyle`, add this project as dependency.\n- Point to local config file or put in `/config/checkstyle/codenarc.xml`.\n\n  ```gradle\n  plugins {\n      checkstyle\n  }\n\n  checkstyle {\n      toolVersion \"$checkstyleVersion\"\n      configFile \"path/to/rulebook_checkstyle.xml\"\n  }\n\n  dependencies {\n      checkstyle \"com.hanggrian.rulebook:rulebook-checkstyle:$libraryVersion\"\n  }\n  ```\n\n### CodeNarc\n\n- Apply [CodeNarc Gradle Plugin](https://docs.gradle.org/current/userguide/codenarc_plugin.html).\n- Using configuration `codenarc`, add this project as dependency.\n- Point to local config file or put in `/config/codenarc/codenarc.xml`.\n\n  ```gradle\n  plugins {\n      codenarc\n  }\n\n  codenarc {\n      toolVersion \"$codenarcVersion\"\n      configFile \"path/to/rulebook_codenarc.xml\"\n  }\n\n  dependencies {\n      codenarc \"com.hanggrian.rulebook:rulebook-codenarc:$libraryVersion\"\n  }\n  ```\n\n### Ktlint\n\n- Apply [Ktlint Integration](https://pinterest.github.io/ktlint/0.49.1/install/integrations/#custom-gradle-integration)\n  to Gradle project.\n- Using configuration `ktlint`, add this project as dependency.\n\n  ```gradle\n  configurations {\n      ktlint\n  }\n\n  dependencies {\n      ktlint \"com.hanggrian.rulebook:rulebook-ktlint:$libraryVersion\"\n  }\n\n  // the rest of ktlint tasks' configuration\n  ```\n\n### Cppcheck\n\nCreate `addon.json` file.\n\n### Pylint\n\nCreate `.pylintrc` file in the root directory.\n\n### ESLint\n\nCreate `.eslint.config.js` file in the root directory.\n\n## IDE settings\n\nPresuming the IDE is *IntelliJ IDEA* or *PyCharm,* consider applying the linter\nstyle to it.\n\n1.  Ktlint Style\n\n    Explained in [Ktlint IntelliJ IDEA Configuration](https://pinterest.github.io/ktlint/0.49.1/rules/configuration-intellij-idea/),\n    using standard [Kotlin coding conventions](https://kotlinlang.org/docs/coding-conventions.html)\n    is enough:\n\n   - In **File \u003e Settings \u003e Editor \u003e Code Style \u003e Kotlin**, set from\n     **Kotlin style guide**.\n     - Append `kotlin.code.style=official` to root `gradle.properties`.\n1.  Google Java Style\n\n    Explained in [Google Java Format](https://github.com/google/google-java-format/):\n\n    - In **File \u003e Settings \u003e Editor \u003e Code Style \u003e Java**, import\n      [IntelliJ Java Google Style file](https://raw.githubusercontent.com/google/styleguide/gh-pages/intellij-java-google-style.xml).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanggrian%2Frulebook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhanggrian%2Frulebook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanggrian%2Frulebook/lists"}