Announcing NKP 0.1: Static Analysis for Kotlin Projects

November 01, 2025

I’m excited to share the first MVP release of NKP (aNalysis of Kotlin Programs), a command-line tool for analyzing Kotlin codebases and uncovering architectural insights.

What is NKP?

NKP examines Kotlin source code to surface structure, dependencies, and stability metrics. It helps answer questions like:

  • How are my packages coupled?
  • Which areas of my code are unstable?
  • What does my class hierarchy look like?

Key Capabilities

NKP focuses on architectural understanding:

  • Package coupling metrics (Afferent Ca, Efferent Ce, Instability I)
  • Class and file analysis (hierarchies, inheritance, imports, declarations)
  • Mermaid diagram generation
    • Class hierarchies
    • Package import flow
    • Coupling relationships
  • Search functionality for classes across the codebase

When to Use NKP

Use NKP for:

  • Architectural assessment
  • Refactoring planning and impact analysis
  • Architecture documentation and onboarding
  • Code reviews with architectural context
  • Migration and modernization efforts

Limitations (for now)

This MVP emphasizes architecture, not general code quality metrics. Think JDepend for Kotlin, not Sonar or Detekt.

Example: Ray Tracer Analysis

Running NKP on my ray-tracer project showed:

  • 203 classes across 37 packages
  • Average package instability of 0.69 (69%)
  • Clear separation between stable core packages (math, colors, hits) and application layers
  • High coupling in orchestration packages that need refactoring attention

The package coupling metrics helped identify that:

  • Core domain packages (math, colors) are very stable (I < 0.1)
  • Application layer packages have high instability (I > 0.7)
  • The world package couples 14 different subsystems, indicating a need for better separation

This kind of insight is invaluable when planning architectural improvements.

Why Build NKP?

As someone who works with teams on architectural improvements and refactoring, I found myself needing better tools to understand Kotlin codebases. While there are excellent tools for Java (like JDepend), Kotlin’s package structure and syntax required a specialized approach.

NKP fills this gap by providing:

  • Kotlin-specific analysis using the official Kotlin grammar tools
  • Actionable metrics based on well-established software engineering principles (Robert C. Martin’s package coupling metrics)
  • Visual output in the widely-supported Mermaid format
  • CLI-first design for easy integration into scripts and CI/CD pipelines

Get Involved

NKP is open source and available on GitHub. If you work with Kotlin projects and need better insights into your architecture, give NKP a try. It’s particularly useful for:

  • Understanding large codebases
  • Planning refactoring efforts
  • Documenting architecture
  • Identifying coupling issues before they become technical debt

I’d love to hear your feedback and learn about your experiences using NKP on your projects!