AtlasArc

Architecture Report - Printable Version

Detekt - AtlasArc 1.0.1+736db9b9 - 2026-07-31T22:45:00Z

All selected report sections in one print-ready HTML document.

Key Findings

HighCycles

9 problem cycle groups reported in this report scope.

NeutralCoupling

NCCD is 1.17. Use it as a same-project dependency-shape baseline; inspect cycles and concrete paths before interpreting a change.

WatchJVM public surface

ARV and GRV describe JVM public-surface breadth: ARV 0.82, GRV 0.67. This surface is broad enough to inspect against package roles, marked public classes, and real callers.

NeutralGovernance

No Safe Havens or repository governance records are active; all findings are treated as active structural findings.

Highest-Value Targets

  1. detekt-api.main:dev.detekt.apiNested cycle participant, fan-in 44 / fan-out 1, distance 0.69, visibility 0.94
  2. detekt-api.main:dev.detekt.api.internalNested cycle participant, fan-in 18 / fan-out 1, distance 0.55, visibility 1.00
  3. detekt-metrics.main:dev.detekt.metricsNested cycle participant, distance 0.75, visibility 0.94
  4. detekt-core.main:dev.detekt.coreNested cycle participant, fan-in 6 / fan-out 9, visibility 1.00
  5. detekt-tooling.main:dev.detekt.tooling.apiArchitectural cycle participant, fan-in 11 / fan-out 2, visibility 1.00
  • The report reads package structure and dependency evidence; it does not know what the code is meant to do.
  • Coverage metrics are not loaded, so coverage-dependent risk readings are unavailable.
  • Package exclusions are disabled for this report context.

What This Report Says

Cycle risk is the dominant signal

Read this report as cycle-first evidence: resolve or consciously accept the reported cycle groups before treating lower-level metrics as optimization work.

  • 9 problem cycle groups reported in this report scope.
  • First package to inspect: detekt-api.main:dev.detekt.api (Nested cycle participant, fan-in 44 / fan-out 1, distance 0.69, visibility 0.94).
  • Largest cycle group: Problem cycle 5 with 5 packages.

Evidence Summary

NCCD1.17

Same-project dependency-shape baseline; compare only on an equivalent analysis basis.

ARV0.82

Unweighted average of package Relative Visibility; each package contributes equally.

GRV0.67

Public JVM classes divided by all JVM classes across the graph.

Cycle groups9

Cycle clusters remain in the report scope.

Precise graph statistics remain available below so the report stays auditable.

CCDCumulative Component Dependency451.00
ACDAverage Component Dependency6.26
RACDRelative Average Component Dependency0.09
NCCDNormalized Cumulative Component Dependency1.17
ARVAverage Relative Visibility0.82
GRVGlobal Relative Visibility0.67

Architecture Overview Focus

This profile reads the whole model first: cycle posture, highest inspection target, and any governance context that changes how warnings should be interpreted.

Cycle posture9 groups

Start by comparing the cycle map with the cycle groups table.

Primary inspection targetdetekt-api.main:dev.detekt.api

Nested cycle participant, fan-in 44 / fan-out 1, distance 0.69, visibility 0.94

Governance context0 Safe Havens / 0 debt records

Safe Havens, exclusions, and repository governance shape which findings remain active warnings.

Suggested Next Steps

1Start with Problem cycle 5

5 packages participate in this architectural cycle group. Use the cycle table and topology figure to decide whether to break the loop or record an explicit governance decision.

2Inspect detekt-api.main:dev.detekt.api

This package has the strongest combined structural signal in the report scope: Nested cycle participant, fan-in 44 / fan-out 1, distance 0.69, visibility 0.94.

Report Basis

SectionArchitecture Overview
Report basisWhole model
Active lensgraph
Structural intentNormal
FiltersWhole-model defaults; durable governance retained
Rendered as Topology Open

How do packages and subsystems depend on each other in this report?

Configuration
Focus
project root
Filter
All visible packages
Heatmap
Off
Encoding
Nodes
Packages and package folders
Edges
Package dependencies; line width follows dependency weight
Border colour
Cycle, Safe Haven, intentional governance, and debt status from the model
build-logic.maindetekt-api.maindetekt-cli.maindetekt-compiler-plugin.maindetekt-core.maindetekt-generator.maindetekt-gradle-plugin.maindetekt-metrics.maindetekt-parser.maindetekt-psi-utils.maindetekt-report-checkstyle.maindetekt-report-html.maindetekt-report-markdown.maindetekt-report-sarif.maindetekt-rules-comments.maindetekt-rules-complexity.maindetekt-rules-coroutines.maindetekt-rules-empty-blocks.maindetekt-rules-exceptions.maindetekt-rules-ktlint-wrapper.maindetekt-rules-libraries.maindetekt-rules-naming.maindetekt-rules-performance.maindetekt-rules-potential-bugs.maindetekt-rules-ruleauthors.maindetekt-rules-style.maindetekt-test-assertj.maindetekt-test-junit.maindetekt-test-utils.maindetekt-test.maindetekt-tooling.maindetekt-utils.maindevgradledevdeviodevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdevdetektkotlindetektdetektgithubdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdetektdslapiclidetektcoregeneratorgradlemetricspsireportreportreportreportrulesrulesrulesrulesrulesrulesrulesrulesrulesrulesrulesrulestesttesttesttoolingaccessorspluginscompilerconfigreportingcollectionprinterpluginprocessorscommentscoroutinesemptyblocksktlintwrappernamingstyleutilsapiplugin buildlogic_271fbc7d689d422ed9305e89b6525f3a_6b89262683f96a5e8a91c5e9184f335e_84c08cc29557ebf7ea61c6c943318146_5f248bc36cb2698e6ceed3c6bca6bdc1internalClassesrunnersClassesinternalClassesbaselinevalidationClassesextensionsparserconsoleClassesrulessettingssuppressorstoolingutilClassesexceptionClassesoutdefaultconfigClassesClassesextensionsinternalinvokeinternalClassesreportClassesutilClassesClassesparserinternalClassesxmlhtmlmarkdownsarifinternalClassescomplexityutilsClassesinternalClassesexceptionswrappersClasseslibrariesutilClassesperformancepotentialbugsruleauthorsmovelambdaoutoptionalClassesassertjjunitinternalClassestestspecClassesdslinternalutils
Rendered as Dependency Matrix Open

Which packages depend on which other packages?

Configuration
Focus
project root
Filter
All visible packages
Heatmap
Off
Encoding
Rows
Origin packages
Columns
Target packages
Cells
Dependency count and cycle/heatmap styling where applicable
⚠️
Matrix hidden — 167 packages
The visible graph has 167 packages, which exceeds the safety and report-legibility limit of 100. Rendering a matrix this large may hang the browser or become unreadable when fitted to a report page. Raise the limit in Settings → Matrix → Max packages to render, or use the Focus filter to narrow the graph first.

Governance Summary

Repository documentReady
Revisionmissing
EvidenceFresh
Local view exclusionsNone
Safe Havens0
Intentional records0
Debt records0
Maintenance findings0
CoverageNot loaded

Metric Notes

CCD, ACD, RACD, and NCCD describe structural graph shape. Package tables include fan-in, fan-out, instability, and line count. Dependency scope: compiled JVM dependencies. ARV is the unweighted average of package Relative Visibility; GRV is public JVM classes divided by all JVM classes across the graph. They describe public-surface breadth, not actual reachability or a universal architecture-health target.

Cycle Evidence Briefing

This section separates current problem cycles from governance audit work. Repository decisions remain concise structural context here; their rationale and maintenance history live only in the optional Governance Audit.

Reported groups9
Debt records0
Intentional records0
Safe Havens0
Cycle modeAll cycle groups
Governed edge listIncluded
TypesArchitectural: 2, Nested: 7
Rendered as Topology · Cycles Only Open

Which cycle warnings remain when non-cycle dependency structure is stripped away?

Configuration
Focus
project root
Filter
Cycles only
Heatmap
Off
Encoding
Nodes
Only packages needed to show reported cycle evidence
Edges
Cycle-participating dependencies after governance rules are applied
Border colour
Problem, Safe Haven, intentional governance, and debt cycle status
  • This overview orients the cycle focus maps below.
detekt-api.maindetekt-cli.maindetekt-compiler-plugin.maindetekt-core.maindetekt-gradle-plugin.maindetekt-metrics.maindetekt-rules-ktlint-wrapper.maindetekt-tooling.maindevdeviodevdevdevdevdevdetektdetektgithubdetektdetektdetektdetektdetektapiclidetektcoregradlemetricsrulestoolingcompilerconfigpluginktlintwrapperapiplugin internalClassesrunnersClassesinternalClassesvalidationClassesextensionssuppressorsClassesinternalinvokeinternalClassesClassesprocessorsClasseswrappersClassesspecClassesdslinternal

Problem Cycles

Each card is one current problem strongly connected component. Every group gets one compact horizontal map. When additional maps are requested, a second map appears only when its focused architecture units or dependency edges strictly extend the compact evidence; layout-only duplicates are suppressed.

Problem cycle 1

Nested cycle

2 packages2 cycle edges
detekt-api.maindevdetektapi internal
Packages
  • detekt-api.main:dev.detekt.api
  • detekt-api.main:dev.detekt.api.internal
Problem cycle 2

Nested cycle

2 packages2 cycle edges
detekt-cli.maindevdetektcli runners
Packages
  • detekt-cli.main:dev.detekt.cli
  • detekt-cli.main:dev.detekt.cli.runners
Problem cycle 3

Nested cycle

2 packages2 cycle edges
detekt-compiler-plugin.mainiogithubdetektcompilerplugin internal
Packages
  • detekt-compiler-plugin.main:io.github.detekt.compiler.plugin
  • detekt-compiler-plugin.main:io.github.detekt.compiler.plugin.internal
Problem cycle 4

Nested cycle

3 packages4 cycle edges
detekt-core.maindevdetektcore extensionssuppressors
Packages
  • detekt-core.main:dev.detekt.core
  • detekt-core.main:dev.detekt.core.extensions
  • detekt-core.main:dev.detekt.core.suppressors
Problem cycle 5

Nested cycle

2 packages2 cycle edges
detekt-core.maindevdetektcoreconfig validation
Packages
  • detekt-core.main:dev.detekt.core.config
  • detekt-core.main:dev.detekt.core.config.validation
Problem cycle 6

Architectural cycle

5 packages11 cycle edges
detekt-gradle-plugin.maindevdetektgradleplugin internalinvokeinternal
Packages
  • detekt-gradle-plugin.main:dev.detekt.gradle
  • detekt-gradle-plugin.main:dev.detekt.gradle.internal
  • detekt-gradle-plugin.main:dev.detekt.gradle.invoke
  • detekt-gradle-plugin.main:dev.detekt.gradle.plugin
  • detekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
Problem cycle 7

Nested cycle

2 packages2 cycle edges
detekt-metrics.maindevdetektmetrics processors
Packages
  • detekt-metrics.main:dev.detekt.metrics
  • detekt-metrics.main:dev.detekt.metrics.processors
Problem cycle 8

Nested cycle

2 packages2 cycle edges
detekt-rules-ktlint-wrapper.maindevdetektrulesktlintwrapper wrappers
Packages
  • detekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper
  • detekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper.wrappers
Problem cycle 9

Architectural cycle

4 packages8 cycle edges
detekt-tooling.maindevdetekttoolingapi specdslinternal
Packages
  • detekt-tooling.main:dev.detekt.tooling.api
  • detekt-tooling.main:dev.detekt.tooling.api.spec
  • detekt-tooling.main:dev.detekt.tooling.dsl
  • detekt-tooling.main:dev.detekt.tooling.internal

Problem Cycle Edges

These are the strongest currently reported problem-cycle edges. They are not fully covered by repository governance and are not removed by Safe Havens in this report scope. The Dependency refs value counts acquired class dependency references aggregated into each package-to-package edge; it is not a source line number.

Dependency refsCycleGovernance
Sourcedetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper.wrappers
Targetdetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper
219NestedProblem
Sourcedetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper
Targetdetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper.wrappers
200NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.invoke
78NestedProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.dsl
Targetdetekt-tooling.main:dev.detekt.tooling.api.spec
63ArchitecturalProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.internal
Targetdetekt-gradle-plugin.main:dev.detekt.gradle
50NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.plugin
Targetdetekt-gradle-plugin.main:dev.detekt.gradle
37NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
Targetdetekt-gradle-plugin.main:dev.detekt.gradle
30NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.plugin
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
18NestedProblem
Sourcedetekt-core.main:dev.detekt.core.config.validation
Targetdetekt-core.main:dev.detekt.core.config
16NestedProblem
Sourcedetekt-compiler-plugin.main:io.github.detekt.compiler.plugin.internal
Targetdetekt-compiler-plugin.main:io.github.detekt.compiler.plugin
10NestedProblem
Sourcedetekt-core.main:dev.detekt.core.config
Targetdetekt-core.main:dev.detekt.core.config.validation
10NestedProblem
Sourcedetekt-metrics.main:dev.detekt.metrics.processors
Targetdetekt-metrics.main:dev.detekt.metrics
10NestedProblem
Sourcedetekt-core.main:dev.detekt.core.extensions
Targetdetekt-core.main:dev.detekt.core
9NestedProblem
Sourcedetekt-cli.main:dev.detekt.cli
Targetdetekt-cli.main:dev.detekt.cli.runners
8NestedProblem
Sourcedetekt-cli.main:dev.detekt.cli.runners
Targetdetekt-cli.main:dev.detekt.cli
6NestedProblem
Sourcedetekt-compiler-plugin.main:io.github.detekt.compiler.plugin
Targetdetekt-compiler-plugin.main:io.github.detekt.compiler.plugin.internal
5NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.invoke
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.internal
5ArchitecturalProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.plugin
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.internal
5ArchitecturalProblem
Sourcedetekt-metrics.main:dev.detekt.metrics
Targetdetekt-metrics.main:dev.detekt.metrics.processors
5NestedProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.dsl
Targetdetekt-tooling.main:dev.detekt.tooling.api
5ArchitecturalProblem
Sourcedetekt-core.main:dev.detekt.core
Targetdetekt-core.main:dev.detekt.core.suppressors
4NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.internal
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.plugin
4ArchitecturalProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.api
Targetdetekt-tooling.main:dev.detekt.tooling.api.spec
4NestedProblem
Sourcedetekt-api.main:dev.detekt.api
Targetdetekt-api.main:dev.detekt.api.internal
3NestedProblem
Sourcedetekt-core.main:dev.detekt.core
Targetdetekt-core.main:dev.detekt.core.extensions
3NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.plugin
3NestedProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.internal
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
2ArchitecturalProblem
Sourcedetekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
Targetdetekt-gradle-plugin.main:dev.detekt.gradle.internal
2ArchitecturalProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.api.spec
Targetdetekt-tooling.main:dev.detekt.tooling.dsl
2ArchitecturalProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.dsl
Targetdetekt-tooling.main:dev.detekt.tooling.internal
2ArchitecturalProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.internal
Targetdetekt-tooling.main:dev.detekt.tooling.api
2ArchitecturalProblem
Sourcedetekt-api.main:dev.detekt.api.internal
Targetdetekt-api.main:dev.detekt.api
1NestedProblem
Sourcedetekt-core.main:dev.detekt.core.suppressors
Targetdetekt-core.main:dev.detekt.core
1NestedProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.api.spec
Targetdetekt-tooling.main:dev.detekt.tooling.api
1NestedProblem
Sourcedetekt-tooling.main:dev.detekt.tooling.internal
Targetdetekt-tooling.main:dev.detekt.tooling.api.spec
1ArchitecturalProblem
Rendered as Dependency Matrix · Cycles Only Open

Which reported cycle dependencies remain when non-cycle structure is stripped away?

Configuration
Focus
project root
Filter
Cycles only
Heatmap
Off
Encoding
Rows
Origin packages in reported cycle evidence
Columns
Target packages in reported cycle evidence
Cells
Cycle-participating dependency count and governance styling
  • This matrix is rendered from the cycle-only report model, not the full global architecture model.
Modules detekt-api.maindetekt-cli.maindetekt-compiler-plugin.maindetekt-core.maindetekt-gradle-plugin.maindetekt-metrics.maindetekt-rules-ktlint-wrapper.maindetekt-tooling.main
dev
detekt
api
internal
dev
detekt
cli
runners
io
github
detekt
compiler
plugin
internal
dev
detekt
core
config
validation
extensions
suppressors
dev
detekt
gradle
internal
invoke
plugin
internal
dev
detekt
metrics
processors
dev
detekt
rules
ktlintwrapper
wrappers
dev
detekt
tooling
api
spec
dsl
internal
detekt-api.main / dev -
detekt -
api - 3
  internal 1 -
detekt-cli.main / dev -
detekt -
cli - 8
  runners 6 -
detekt-compiler-plugin.main / io -
github -
detekt -
compiler -
plugin - 5
  internal 10 -
detekt-core.main / dev -
detekt -
core - 3 4
config - 10
  validation 16 -
  extensions 9 -
  suppressors 1 -
detekt-gradle-plugin.main / dev -
detekt -
gradle - 78 3
  internal 50 - 4 2
  invoke 5 -
plugin 37 5 - 18
  internal 30 2 -
detekt-metrics.main / dev -
detekt -
metrics - 5
processors 10 -
detekt-rules-ktlint-wrapper.main / dev -
detekt -
rules -
ktlintwrapper - 200
  wrappers 219 -
detekt-tooling.main / dev -
detekt -
tooling -
api - 4
  spec 1 - 2
  dsl 5 63 - 2
  internal 2 1 -

Refactoring Risk Briefing

This chapter ranks package-level risk signals before the diagrams: coupling pressure, distance from the main sequence, visibility, cycle participation.

Packages ranked67
High distance16
High coupling9
Cycle packages23
CoverageNot loaded

Top Risk Drivers

Primary driverDistanceFan-inFan-out
Packagedetekt-api.main:dev.detekt.api
Cycle participation0.69441
Packagedetekt-api.main:dev.detekt.api.internal
Visibility0.55181
Packagedetekt-metrics.main:dev.detekt.metrics
Cycle participation0.7562
Packagedetekt-core.main:dev.detekt.core
Visibility0.4069
Packagedetekt-tooling.main:dev.detekt.tooling.api
Visibility0.37112
Packagedetekt-tooling.main:dev.detekt.tooling.api.spec
Visibility0.17153
Packagedetekt-tooling.main:dev.detekt.tooling.internal
Visibility0.3243
Packagedetekt-compiler-plugin.main:io.github.detekt.compiler.plugin
Visibility0.3312
Rendered as Subsystems · Boundary Risk Open

Where does boundary pressure concentrate across the visible architecture?

Configuration
Focus
project root
Curated view
Boundary Risk
Filter
All visible packages
Encoding
Bubble
Package-folder subsystem rollup
X axis
Fan-out
Y axis
Fan-in
Size
Classes
Colour
Instability
  • How to read this graph: each bubble is a visible architecture-boundary rollup. Right means more outgoing boundary dependencies; up means more incoming boundary dependencies; size is total class count.
  • Colour follows instability, so red means outgoing-heavy rather than automatically wrong. Use the figure to find boundary surfaces worth inspecting in Topology or Matrix.
  • Dashed rings mark expanded aggregate boundaries whose visible descendants are also present. Terminal packages or source folders remain valid boundaries and use their own metrics.
Fan-in
0 10 20 30 0 10 20 30 40 50 60 detekt-rules-styl… dev detekt rules style detekt-rules-ktli… dev detekt rules ktlintwrapper wrappers potentialbugs detekt-core.main dev detekt core detekt-gradle-plu… dev detekt gradle detekt-tooling.ma… dev detekt tooling detekt-generator.… dev detekt generator
Fan-out
Rendered as Subsystems · Visibility Surface Open

Which subsystems expose a large public surface?

Configuration
Focus
project root
Curated view
Visibility Surface
Filter
All visible packages
Encoding
Bubble
Package-folder subsystem rollup
X axis
Relative visibility
Y axis
Abstractness
Size
Classes
Colour
Abstractness
  • How to read this graph: each bubble is a visible architecture-boundary rollup. Right means more visible API surface; up and colour both follow abstractness; size is total class count.
  • This view highlights boundary shape, not direct defect risk. A top/right bubble may be a deliberate public contract area.
  • Dashed rings mark expanded aggregate boundaries whose visible descendants are also present. Terminal packages or source folders remain valid boundaries and use their own metrics.
Abstractness (A)
0.00 0.20 0.40 0.60 0.80 1.00 0.00 0.20 0.40 0.60 0.80 1.00 detekt-rules-styl… dev detekt rules style detekt-rules-ktli… dev detekt rules ktlintwrapper wrappers potentialbugs detekt-core.main dev detekt core detekt-gradle-plu… dev detekt gradle detekt-tooling.ma… dev detekt tooling detekt-generator.… dev detekt generator
Rel. Visibility (RV)
Rendered as Subsystems · Internal Tangles Open

Which subsystem areas contain internal cycle pressure?

Configuration
Focus
project root
Curated view
Internal Tangles
Filter
All visible packages
Encoding
Bubble
Package-folder subsystem rollup
X axis
cycleCount
Y axis
largestCycle
Size
packageCount
Colour
Cycle status
  • How to read this graph: each bubble is a visible architecture-boundary rollup. Right means more fully contained package-cycle groups; up means the largest contained package cycle is larger; size is package count.
  • Only package cycles fully inside the boundary count here. Terminal-package class/file tangles remain separate Package Internals evidence in Topology. Use the cycle tables, Topology, or Matrix for concrete dependency edges and cross-boundary cycle context.
  • Dashed rings mark expanded aggregate boundaries whose visible descendants are also present. Terminal packages or source folders remain valid boundaries and use their own metrics.
Largest cycle
0 1 1 2 2 0 1 2 3 4 5 detekt-generator.… dev detekt generator build-logic.main gradle kotlin dsl accessors detekt-rules-styl… dev detekt rules style reporting collection printer plugin processors detekt-psi-utils.… dev detekt psi detekt-rules-comm… dev detekt rules comments
Cycle groups
Rendered as Hotspots · Coupling Open

Which leaf packages stand out by coupling pressure?

Configuration
Items
Leaf packages
Focus
project root
Scope
Recursive
Preset
Coupling
Encoding
Bubble
One leaf package
X axis
Fan-out
Y axis
Fan-in
Size
Lines of code
Colour
Instability
  • Labels are shown for the largest report bubbles; inspect the package metrics table for the full ranked list.
Fan-in
0 2 4 6 8 10 12 14 0 10 20 30 40 style potentialbugs wrappers complexity naming coroutines exceptions api collection comments
Fan-out
Rendered as Hotspots · Visibility Open

Which leaf packages are visible to many callers and far from the main sequence?

Configuration
Items
Leaf packages
Focus
project root
Scope
Recursive
Preset
Visibility
Encoding
Bubble
One leaf package
X axis
Relative visibility
Y axis
Fan-in
Size
Classes
Colour
Distance from main sequence
  • Labels are shown for the largest report bubbles; inspect the package metrics table for the full ranked list.
Fan-in
0.00 0.20 0.40 0.60 0.80 1.00 0 10 20 30 40 style wrappers potentialbugs complexity naming api invoke collection exceptions dsl spec processors comments emptyblocks cli
Rel. Visibility (RV)
Rendered as Hotspots · Abstractness / Instability Open

Which leaf packages sit far from the main sequence?

Configuration
Items
Leaf packages
Focus
project root
Scope
Recursive
Preset
Zone Map
Encoding
Bubble
One leaf package
X axis
Instability
Y axis
Abstractness
Size
Distance from main sequence
Colour
Distance from main sequence
  • Labels are shown for the largest report bubbles; inspect the package metrics table for the full ranked list.
Abstractness (A)
0.00 0.20 0.40 0.60 0.80 1.00 0.00 0.20 0.40 0.60 0.80 1.00 parser exception util parser internal utils psi utils out metrics api extensions utils util internal movelambdaout core internal reporting api collection dsl plugin printer plugin wrappers junit internal
Instability (I)

Package Metrics

This table ranks packages by structural signals. Use it to inspect packages that combine high fan-in, high fan-out, cycle membership or size.

Fan-inFan-outInstabilityAbstractnessDistanceCycleLOC
Packagedetekt-core.main:dev.detekt.core.parser
200.000.001.00117
Packagedetekt-generator.main:dev.detekt.generator.collection.exception
100.000.001.0011
Packagedetekt-metrics.main:dev.detekt.metrics.processors.util
100.000.001.0075
Packagedetekt-parser.main:dev.detekt.parser
200.000.001.0028
Packagedetekt-psi-utils.main:dev.detekt.psi.internal
100.000.001.00256
Packagedetekt-rules-coroutines.main:dev.detekt.rules.coroutines.utils
100.000.001.0038
Packagedetekt-psi-utils.main:dev.detekt.psi
1410.070.040.90525
Packagedetekt-utils.main:dev.detekt.utils
1000.000.170.83205
Packagedetekt-generator.main:dev.detekt.generator.out
100.000.250.7522
Packagedetekt-metrics.main:dev.detekt.metrics
620.250.000.75Nested411
Packagedetekt-api.main:dev.detekt.api
4410.020.290.69Nested858
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.extensions
500.000.330.67150
Packagedetekt-test-utils.main:dev.detekt.test.utils
210.330.000.67249
Packagedetekt-core.main:dev.detekt.core.util
430.430.000.5750
Packagedetekt-api.main:dev.detekt.api.internal
1810.050.400.55Nested124
Packagedetekt-rules-style.main:dev.detekt.rules.style.movelambdaout
110.500.000.50138
Packagedetekt-core.main:dev.detekt.core
690.600.000.40Nested366
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.plugin.internal
230.600.000.40Architectural300
Packagedetekt-core.main:dev.detekt.core.reporting
350.630.000.38124
Packagedetekt-tooling.main:dev.detekt.tooling.api
1120.150.470.37Architectural122
Packagedetekt-generator.main:dev.detekt.generator.collection
340.570.080.35805
Packagedetekt-tooling.main:dev.detekt.tooling.dsl
440.500.150.35Architectural239
Packagedetekt-compiler-plugin.main:io.github.detekt.compiler.plugin
120.670.000.33Nested221
Packagedetekt-generator.main:dev.detekt.generator.printer
220.500.170.33156
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.plugin
240.670.000.33Architectural399
Packagedetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper.wrappers
120.670.000.33Nested2075
Packagedetekt-test-junit.main:dev.detekt.test.junit
011.000.330.3383
Packagedetekt-tooling.main:dev.detekt.tooling.internal
430.430.250.32Architectural29
Packagedetekt-gradle-plugin.main:dev.detekt.gradle
330.500.800.30Architectural482
Packagedetekt-core.main:dev.detekt.core.rules
250.710.000.2957
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.internal
340.570.170.26Architectural132
Packagedetekt-core.main:dev.detekt.core.config
240.670.080.25Nested302
Packagedetekt-rules-style.main:dev.detekt.rules.style.optional
130.750.000.25237
Packagedetekt-metrics.main:dev.detekt.metrics.processors
130.750.030.22Nested223
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.invoke
120.670.140.19Architectural236
Packagedetekt-tooling.main:dev.detekt.tooling.api.spec
1530.170.670.17Architectural249
Packagedetekt-compiler-plugin.main:io.github.detekt.compiler.plugin.internal
150.830.000.17Nested107
Packagedetekt-rules-ktlint-wrapper.main:dev.detekt.rules.ktlintwrapper
130.750.090.16Nested575
Packagedetekt-core.main:dev.detekt.core.reporting.console
031.000.130.13161
Packagedetekt-cli.main:dev.detekt.cli
180.890.000.11Nested579
Packagedetekt-core.main:dev.detekt.core.settings
240.670.270.06222
Packagedetekt-rules-empty-blocks.main:dev.detekt.rules.emptyblocks
041.000.060.06416
Packagedetekt-generator.main:dev.detekt.generator.printer.defaultconfig
130.750.220.03198
Packagedetekt-cli.main:dev.detekt.cli.runners
160.860.170.02Nested114
Packagedetekt-core.main:dev.detekt.core.baseline
021.000.000.00315
Packagedetekt-core.main:dev.detekt.core.config.validation
2100.830.170.00Nested399
Packagedetekt-core.main:dev.detekt.core.suppressors
140.800.200.00Nested142
Packagedetekt-core.main:dev.detekt.core.tooling
0151.000.000.00263
Packagedetekt-generator.main:dev.detekt.generator
051.000.000.00236
Packagedetekt-report-checkstyle.main:dev.detekt.report.xml
011.000.000.00425
Packagedetekt-report-html.main:dev.detekt.report.html
041.000.000.00259
Packagedetekt-report-markdown.main:dev.detekt.report.markdown
041.000.000.00153
Packagedetekt-report-sarif.main:dev.detekt.report.sarif
011.000.000.00106
Packagedetekt-rules-comments.main:dev.detekt.rules.comments
041.000.000.00772
Packagedetekt-rules-complexity.main:dev.detekt.rules.complexity
041.000.000.001367
Packagedetekt-rules-coroutines.main:dev.detekt.rules.coroutines
041.000.000.001153
Packagedetekt-rules-exceptions.main:dev.detekt.rules.exceptions
031.000.000.001090
Packagedetekt-rules-libraries.main:dev.detekt.rules.libraries
011.000.000.00214
Packagedetekt-rules-naming.main:dev.detekt.rules.naming
041.000.000.001283
Packagedetekt-rules-performance.main:dev.detekt.rules.performance
021.000.000.00606
Packagedetekt-rules-potential-bugs.main:dev.detekt.rules.potentialbugs
031.000.000.003212
Packagedetekt-rules-ruleauthors.main:dev.detekt.rules.ruleauthors
011.000.000.0087
Packagedetekt-rules-style.main:dev.detekt.rules.style
051.000.000.009934
Packagedetekt-test-assertj.main:dev.detekt.test.assertj
011.000.000.00138
Packagedetekt-test.main:dev.detekt.test
021.000.000.00151
Packagedetekt-gradle-plugin.main:dev.detekt.gradle.report
000.50164
Packagedetekt-test-utils.main:dev.detekt.test.utils.internal
000.00372