Static analysis for C# — locally, in 60 seconds.

Scan your C# / .NET project for complexity outliers, oversized methods, parameter-heavy signatures, deeply-nested logic, and semantically-duplicate helpers — with the ik CLI. The structural metrics run fully in-process via the chamele library, so there's no Roslyn analyzer or MSBuild step to wire up. Pairs cleanly with whatever dotnet format / Roslyn analyzer setup you already have.

Install the CLI Wire up GitHub Action

Running on an ASP.NET Core API

$ ik run inkode · orders-api Running 20 checks... Complexity 5 findings 210ms (chamele, in-process) Function Length 3 findings in 210ms pass (chamele) Nesting Depth 4 findings in 210ms pass (chamele) Semantic Duplication 2 findings 7.9s (embedded LLM) Duplication 6 findings 3.0s (jscpd) Secret Scanning no issues 1.2s (gitleaks) Hotspot 7 findings 31ms Score 73 / 100 grade C Report .ik/brief.html Share https://api.inkode.co/r/Cs9N4xRkPq2M

What we check, and how.

CheckToolWhat it catches in C#
Complexitychamele (in-process)Methods exceeding cyclomatic-complexity threshold (default 10), via the in-process chamele library — no Roslyn analyzer, no MSBuild, never skipped. Catches the deeply-branched handlers and switch-heavy services AI tools love to write.
Function Lengthchamele (in-process)Methods longer than the line threshold (default 100; Error above 2×). The 400-line controller action that should have been five methods.
Parameter Countchamele (in-process)Method signatures with more than the threshold parameters (default 5; Error above 8). Flags the "just add another argument" drift that should have been a parameter object.
Nesting Depthchamele nd extensionMethods whose maximum block-nesting depth exceeds the threshold (default 4; Error above 6). The pyramid of if / foreach / try that hides the one branch that matters.
Semantic Duplicationembedded LLMC# methods extracted via the in-process chamele parser, embedded via Qwen2.5-Coder-0.5B, paired by cosine similarity. Catches helpers regenerated from scratch in different namespaces — the same logic with different names. (Requires the embedded model; run ik init --download-deps.)
Secrets, Hotspots, Coupling, Duplication, Line Count, Infra, Scripts, TODO Densitylanguage-agnosticSame as every other language — gitleaks for secrets, git-log analysis for hotspots / coupling, jscpd for textual duplication (it handles .cs natively), fs walks for oversized files, file-pattern detection for Dockerfiles / K8s / Terraform / shell scripts.

C# language-specific dependency audit (NuGet), dead-code, error-handling, magic-number, import-graph, and test-framework detectors aren't wired up yet — the structural-metric and duplication checks above are the C# story for now. Track progress on the blog or email us if NuGet CVE scanning matters for your repo.

The smells nobody refactors out.

God controllers & services

A single OrdersController action that validates, maps, persists, and emails in 300 lines. Function-length and complexity flag it as one finding each so the refactor target is obvious.

Parameter-soup signatures

Methods that grew one argument at a time until they take nine. AI keeps appending parameters rather than introducing a request object; parameter-count surfaces every offender.

Nested if / try pyramids

Deeply-nested guard clauses and try/catch ladders that bury the happy path five levels deep. Nesting-depth points at the exact methods worth flattening with early returns.

Copy-pasted helpers across namespaces

The same mapping or validation logic regenerated in three projects with different names. jscpd finds the token-level copies; the embedded-LLM semdup check catches the ones reworded just enough to slip past it.

Run it on your C# project.

Install in one line, scan in under a minute. No account required. The C# structural checks need no extra tooling — chamele is linked into ik.

$ curl -fsSL https://inkode.co/install.sh | sh $ npm install -g jscpd # optional, for textual duplication $ cd your-csharp-project && ik init && ik run
Book an Expert Review

Scan another language

Go Java Python Rust TypeScript All scanners

Cross-cutting checks: secret scanning · dependency vulnerability scanning · AI code review