Skip to content
CAI
Software that uses CAICheck a score

Heapy/awesome-kotlin

46.0

Weak · 28 September 2026

21.7k

lines of production code

Kotlin

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a full-stack web application that serves as a curated directory for Kotlin resources, libraries, and community groups. It features a Ktor-based backend handling user authentication and data management, paired with a React frontend that displays categorized links, search functionality, and dynamic content. The platform also includes a scriptable infrastructure for generating static site assets and enriching metadata from external sources like GitHub and Maven Central.

How it got here

2015–2018 — Full-stack application migration

7 changes.

The project transitioned from a static curated list into a full-stack web application, introducing a Ktor backend and React frontend with Docker and CI/CD infrastructure. Build scripts were rewritten to support modular architecture, automated data fetching, and new site features like RSS feeds and GitHub trending sections. Structured data models and utility classes were implemented to handle link resources, caching, and configuration, replacing manual maintenance with automated generation.

2020 — Frontend application and DSL implementation

16 changes.

The project introduced a new React-based frontend application with dedicated pages, search functionality, and dynamic content rendering. Concurrently, a Kotlin DSL was established to structure curated links and articles, supported by a centralized resources directory and Kotlin scripting capabilities for improved build performance.

2021–2024 — Backend migration and authentication

5 changes.

The project migrated the backend server to the Ktor framework with virtual thread support, establishing a modular architecture for concurrency and dependency injection. This period focused on implementing core user authentication features, including JWT-based login and GitHub OAuth integration, alongside automating local database schema generation and migration.

Features

Add GitHub-themed syntax highlighting for code blocks

The application now supports syntax highlighting for code snippets using highlight.js v11.9.0, styled with the official GitHub light theme. This ensures that code blocks rendered in article pages are visually consistent with GitHub's interface, improving readability for technical content.

app-frontend/pages · high confidence

Introduced a new \Subcategories\ component that displays links within a subcategory, grouped by their state (Awesome, Default, Archived, Unsupported) and sorted by star count. The component generates anchor links for section navigation and applies responsive styling to adjust the list width based on screen size.

app-frontend/app/src/components/list · high confidence

Added local database schema generation and migration script

A new Kotlin script (Generate.kt) has been added to the app-backend-dataops module to automate local database setup. This script drops and recreates the public schema, runs Flyway migrations from a specific filesystem path, and generates JOOQ Kotlin data classes and DAOs from the PostgreSQL database.

app-backend-dataops · high confidence

Dynamic header logo with time-based and exclusive variants

The site header now displays a rotating set of logos, including standard Kotlin branding and special variants for events like the 10K anniversary, Star Wars Day, and the Ukraine support initiative. The \logos.ts\ module manages these assets, using date-based logic to show specific logos exclusively during certain periods or on specific dates. The \Header\ component cycles through the available logos, ensuring that if an exclusive logo is active, it is displayed alone, while other logos rotate in a sequence when no exclusive variant is currently scheduled.

app-frontend/app/src/components/head · high confidence

Implement GitHub OAuth and user authentication endpoints

The backend now exposes new API endpoints for user registration, login, and GitHub OAuth integration. Users can register via POST /register, which stores credentials using BCrypt hashing, and log in via POST /login, which issues an HTTP-only JWT cookie. Additionally, GitHub OAuth is supported through GET /auth/github/redirect to initiate the flow and GET /auth/github to handle the callback and exchange the authorization code for an access token.

app-backend/src/main/kotlin/usecases/github, app-backend/src/main/kotlin/usecases/signup · high confidence

Initial frontend application structure and routing setup

The frontend application source code has been organized into a new \app/src\ directory, establishing the core structure for the user interface. This includes a React 17 entry point (\main.tsx\) utilizing \createRoot\ and \React.StrictMode\, a routing configuration (\root.tsx\) defining paths for Home, KUGs, Resources, and Articles, and a data model (\model.tsx\) that categorizes links by platform and state (including AWESOME, UNSUPPORTED, ARCHIVED, and DEFAULT). Supporting files provide TypeScript declarations for static assets, utility functions for link sorting and query string generation, and LESS stylesheets defining the visual theme and responsive breakpoints.

app-frontend/app/src · high confidence

Initial release of the curated Kotlin resources directory

The \src/main/resources/links\ directory has been introduced to serve as the central, structured data source for the project's curated list of Kotlin resources. This change replaces the previous flat or unstructured approach with a set of categorized Kotlin Script (\.kts\) files—specifically \Android\, \Archive\, \JavaScript\, \Libraries\, \Links\, \Native\, \Projects\, \UserGroups\, and \WebAssembly\. These files define the official links, libraries, frameworks, and community groups available to users, organized by platform and category (e.g., separating Android libraries from Web frameworks, or isolating archived projects). This structure enables the generation of the main \README.md\ and other documentation pages with a consistent, maintainable format.

src/main/resources/links · high confidence

A new Kotlin DSL has been added to define and structure link collections and articles. This DSL allows users to organize content into categories and subcategories, define individual links with metadata such as platform support, tags, and archival status, and create articles with features like syntax highlighting and language support.

src/main/kotlin/link/kotlin/scripts/dsl · high confidence

A new Listitem component has been added to render individual resource entries in the list view. It displays the link name, description (rendered as HTML), star count, and last update date. The component visually distinguishes links based on their state: archived and unsupported links are dimmed, while unsupported links also include an '\[unsupported\]' prefix in the title. Links are styled with specific colors and hover effects, and the description section is hidden if empty.

app-frontend/app/src/components/listitem · high confidence

Introduce dedicated page for browsing all resources

A new \LinksPageComponent\ has been added to render a comprehensive view of all available resources. This page includes a navigation bar with links to 'Essential', 'Everything', and 'Kotlin User Groups', along with a search feature that filters resources by name, description, and tags. This change supports the ability to view the full list of resources rather than just starred items.

_app-frontend/app/src/components/page\wrapper · high confidence

Introduces new utility classes for caching, HTTP, and file operations

The \src/main/kotlin/link/kotlin/scripts/utils\ package now includes several new utility components: \Cache.kt\ provides a file-based caching implementation with a disable wrapper, \HttpClient.kt\ wraps Apache's async HTTP client for suspendable requests, \Fs.kt\ and \CopyTask.kt\ add file writing and resource copying helpers, \KotlinObjectMapper.kt\ configures Jackson for Kotlin, and \Utils.kt\ adds logging proxies and time parsing. These changes enhance the internal tooling capabilities for script execution and data handling.

src/main/kotlin/link/kotlin/scripts/utils · high confidence

New Category component for displaying subcategories

A new Category component has been added to the frontend, which renders a section containing a category title and a list of its subcategories. This component utilizes a new LESS stylesheet to style the category container with alternating background colors and borders, and it imports the existing Subcategories component to render the individual items within the category wrapper.

app-frontend/app/src/components/category · high confidence

New dedicated pages for Home, Resources, Kugs, and Articles

The application now includes distinct pages for Home, Resources, Kugs, and Articles. The Home page displays a curated list of 'awesome' links with a search option for all links. The Resources page shows all available links. The Kugs page displays links specific to the 'kugs' category. The Articles page is a placeholder indicating that articles will be available in the future.

app-frontend/app/src/pages · high confidence

A new Navigation component has been added to the application, rendering a horizontal bar of links separated by pipe characters. It distinguishes between internal and external links: internal routes use React Router's NavLink for active state styling (underline), while external HTTPS links open in a new tab with security attributes (noopener noreferrer). The layout is responsive, wrapping on smaller screens, and centers content within a maximum width of 1024px.

app-frontend/app/src/components/navigation · high confidence

New search component with custom styling and input behavior

A new Search component has been added to the application, featuring a custom LESS stylesheet that defines a bordered input field with a background search icon and specific focus styles (removing the default outline). The component includes an SVG icon asset and implements logic to sync the input value with the URL query parameter 'q' using React Router's navigation, while also handling keyboard events to prevent default behavior on non-Enter keys.

app-frontend/app/src/components/search · high confidence

Repository restructured with backend application and CI/CD infrastructure

The project has been reorganized from a static curated list into a full-stack web application. A new backend (Ktor) and frontend (React) architecture is introduced, supported by Docker and docker-compose files for local development and deployment. The repository now includes a GitHub Actions workflow for automated builds, an Apache 2.0 license, and standardized editor configurations, while the README has been updated to reflect the new site at kotlin.link and the contribution process.

(repo-wide) · high confidence

Behavioural changes

The import script now includes a new \Communities.kt\ utility that parses a local Markdown file of Kotlin User Groups and automatically generates the structured \UserGroups.awesome.kts\ link file, replacing the previous manual maintenance of this list.

src/main/kotlin/link/kotlin/scripts/import · high confidence

Backend server migration to Ktor with virtual thread support

The app-backend has been refactored to use the Ktor framework instead of the previous server implementation, introducing a new modular architecture for dependency injection and lifecycle management. This change enables the use of Kotlin virtual threads (Dispatchers.Loom) for improved concurrency and performance. The new server module wires up authentication (JWT), user registration and login routes, GitHub OAuth redirects, and static file serving for the React frontend. Additionally, the diff includes updated jOOQ-generated classes for the database schema and configuration modules for JDBC, metrics (Prometheus), and HTTP clients.

app-backend · high confidence

The system now uses explicit Kotlin data classes to represent link resources and application settings. Internal link data is captured in the \Link\ model, which includes fields for platform types, tags, and status flags such as \awesome\, \archived\, and \unsupported\. These are converted into \LinkDto\ objects for frontend consumption, where links are categorized into states like AWESOME, UNSUPPORTED, ARCHIVED, or DEFAULT. The data is organized hierarchically through \CategoryDto\ and \SubcategoryDto\ structures. Additionally, \ApplicationConfiguration\ centralizes environment-based settings, including GitHub token retrieval, site URL, cache enablement, and dry-run mode.

src/main/kotlin/link/kotlin/scripts/model · high confidence

Introduces Kotlin scripting with local file caching

The scripting module now uses Kotlin Scripting to execute \.awesome.kts\ files via a new \AwesomeScript\ definition and \ScriptEvaluator\ implementation. To improve build performance, script evaluation results are now stored in a local file cache, meaning repeated executions of the same script source will be served from cache rather than recompiled.

src/main/kotlin/link/kotlin/scripts/scripting · high confidence

Migrate articles to new model package

The article definition files in the \articles\ directory have been updated to use the \link.kotlin.scripts.dsl\ package for their data model. This change standardizes how article metadata (such as title, URL, categories, and author) is structured in the source files, ensuring consistency across the content library.

articles · high confidence

New frontend entry point with updated GitHub links

The application now uses a new \index.html\ file in the \app-frontend/app\ directory as its main entry point. This file establishes the basic HTML structure, including viewport settings, Open Sans font styling, and multiple favicon variants for various browsers and devices. It also defines the root div for the JavaScript application and provides a fallback message for users with JavaScript disabled, which now correctly links to the project's GitHub repository at \https://github.com/Heapy/awesome-kotlin\.

app-frontend/app · high confidence

Rewritten Kotlin scripts with modular architecture and new site features

The build scripts in src/main/kotlin/link/kotlin/scripts have been completely rewritten to use a modular, dependency-injected architecture (via komok-tech) and Apache HTTP client. This change introduces several new capabilities for the generated site: a 'Github Trending' section that fetches and caches daily/weekly/monthly top Kotlin repositories, automatic fetching of Kotlin versions from Maven Central, and the ability to render Markdown in link descriptions and article bodies. Additionally, the site generator now produces RSS feeds, a sitemap, and individual HTML pages for articles, while the link processing pipeline now fetches GitHub topics and star counts to enrich link metadata.

src/main/kotlin/link/kotlin/scripts · high confidence

Test coverage

Added manual test for Kotlin version fetching and unit test for date parsing; Added tests for KUG download service.

Dependencies

Initial dependency configuration for backend and frontend modules

The project now defines its dependency structure through a centralized version catalog (\gradle/libs.versions.toml\) and dedicated build files for the backend (\app-backend\, \app-backend-dataops\) and frontend (\app-frontend\). The backend is configured with Kotlin 2.4.20, Ktor 3.6.0, jOOQ 3.21.8, Flyway 13.7.0, and a custom \komok-tech\ dependency injection library, while the frontend utilizes React 19.3.0, Webpack 5.111.1, and Yarn 4.13.0.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 9.7.1

The project's Gradle wrapper has been updated to use Gradle 9.7.1. This change ensures that builds are executed with the specified distribution, including a verified SHA-256 checksum for integrity, and configures the wrapper to download and store the distribution in the user's home directory.

gradle · high confidence

Upgrade to Yarn 4.13.0

The frontend build tooling has been upgraded to Yarn 4.13.0. This change updates the Yarn binary and adjusts the \.gitignore\ rules to accommodate Yarn 2+ conventions, ensuring that the \.yarn\ directory (except for cache, patches, plugins, releases, sdks, and versions) is ignored while the specific release binary is tracked.

app-frontend · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 43 → 46 (+3.3)
  • Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 92 → 94 (+2.0)
  • Architecture 100 → 92 (-7.6)
  • Maturity 36 → 52 (+15.9)
  • Readiness 34 → 33 (-1.6)
  • Security 67 → 72 (+4.6)
  • Accessibility 44 → 44 (+0.0)
  • Performance 100 (new)

Resolved (6)

  • Documentation: no installation or build instructions
  • Documentation: no licence statement
  • Documentation: no project overview
  • Documentation: no usage examples
  • High CVE: [GHSA redacted] (app-frontend/yarn.lock)
  • Off-boarding risk: anonymized user #1

New (7)

  • Low cohesion: Kotliner (LCOM4 14) (app-backend/src/main/kotlin/jooq/main/tables/Kotliner.kt)
  • No ADRs found
  • Off-boarding risk: anonymized user #1
  • Projects may be oversized for their cohesion
  • TooManyMethods: Article (app-backend/src/main/kotlin/jooq/main/tables/Article.kt)
  • TooManyMethods: Kug (app-backend/src/main/kotlin/jooq/main/tables/Kug.kt)
  • TooManyMethods: Library (app-backend/src/main/kotlin/jooq/main/tables/Library.kt)

Changes since last survey

  • 7 commits — 7 feature/other, 0 fixes

By area

  • app-frontend/package.json — 3 commits
  • gradle/libs.versions.toml — 3 commits
  • app-frontend/yarn.lock — 1 commit

Notable commits

  • change: Bump js-yaml from 4.3.1 to 4.3.2 in /app-frontend (#1169)
  • change: Bump the all group in /app-frontend with 4 updates (#1175)
  • change: Bump the all group in /app-frontend with 6 updates (#1167)
  • change: Bump the all group in /app-frontend with 7 updates (#1171)
  • change: Bump the all group with 17 updates (#1168)
  • change: Bump the all group with 17 updates (#1174)
  • change: Bump the all group with 3 updates (#1170)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Heapy/awesome-kotlin was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit e8fa1b03fac22505e4812832c8c3aeb0cdef85f6 — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.