Automating creativity

Preannouncement for a revived code analyzer
Not another style checker. NStatic is a symbolic analyzer for .NET code that models state, calls, paths, assertions, and exceptions so warnings can explain how a problem is reached. Bugs caught before you run anything. NStatic reads your C# code the way a mathematician reads an equation — tracing every execution path symbolically, solving loops to closed form, and surfacing real bugs without false positives.
See the featuresSee how it works
A debugger-like experience for static analysis: error list, symbolic locals, assumptions, call stack, and visual execution paths.
Deep semantic analysis built on symbolic expressions, method summaries, constraints, and algebraic simplification.
A deterministic expression engine that caches, simplifies, and summarizes rather than blindly exploring every path forever.
Most analyzers stop at "this line might fail." NStatic was designed to answer the more useful question: under what symbolic conditions does this line fail, and what did the program know at that point?
Execution paths are represented internally and rendered back onto source so ignored, active, and assumed branches can be distinguished.
Locals and fields can be shown in terms of parameters, pre-state, conditionals, and function summaries.
Interprocedural analysis lets errors flow through methods, properties, constructors, framework calls, and user-defined abstractions.
Six categories of real bugs. Every finding is backed by a proof. If NStatic flags something, it can show you exactly why — the assumptions it made, the path it traced, the contradiction it found.
Unhandled NullReferenceException,IndexOutOfRangeException, DivideByZeroException — including those thrown deep inside .NET Framework library calls.
Branches, statements, and catch blocks that can never execute — detected through symbolic path analysis, not heuristics.
Learn more →Always-true conditions, no-op assignments, constant calls, parameters that never affect results, and infinite loops.
Learn more →Tracks nullability through assignments, method calls, and branching. No attribute tagging needed — inferred from code.
Learn more →Array and collection accesses verified against inferred index ranges. Loop bounds solved symbolically to catch off-by-one errors.
Learn more →Two expressions that always produce the same result can often be simplified. NStatic surfaces these as refactoring opportunities.
Learn more →Execution Path Visualization
NStatic superimposes colored arrows directly on your source code showing the possible execution flows. Branches, loops, exceptions, and early returns are all visible at a glance — without leaving the editor.
Click any path to see the symbolic state at that point: what values variables can hold, what assumptions have been made, what exceptions could be thrown.
View examples

Loop Analysis
Most analyzers give up on loops or unroll a fixed number of iterations. NStatic solves them to closed form.
A Fibonacci loop becomes a formula involving the golden ratio. An array-filling loop becomes a range assertion. Idempotent and involutive loops are recognized as patterns and eliminated entirely.
This means NStatic can reason about what a loop produces — not just whether it terminates.
How loop solving works →

Interprocedural Analysis
NStatic analyzes call chains up to 11 frames deep — including calls into .NET Framework library code, which it interprets directly from the IL (intermediate language) without needing source.
The call stack panel shows exactly which methods contributed to a finding, with symbolic values at each frame. No more guessing which caller passed the null.

Traditional static analyzers pattern-match against known bug signatures. NStatic reasons about your program mathematically — the difference shows up in what it can find.
| Capability | NStatic | FxCop / Roslyn | Resharper | Spec# / Code Contracts |
|---|---|---|---|---|
| No annotations required | ✓ | ✓ | ✓ | ✗ (requires specs) |
| Interprocedural reasoning | ✓ (11 frames) | Limited | Limited | ✓ |
| Loop analysis | ✓ Closed-form | ✗ | ✗ | Requires invariant |
| .NET Framework IL interpretation | ✓ | ✗ | ✗ | ✗ |
| Execution path visualization | ✓ In-editor overlay | ✗ | ✗ | ✗ |
| Symbolic assumption tracking | ✓ | ✗ | Partial | ✓ |
| Works on existing code | ✓ | ✓ | ✓ | ✗ |


Transparent Reasoning
Every finding comes with a full audit trail. The Assumptions panel shows every condition NStatic has recorded as it traversed your code — what it knows about each variable at each point.
When a bug is flagged, you can trace back through the assumption chain to see exactly which inputs or conditions lead to the problem. The analysis is never a black box.
NStatic lowers C# into a symbolic representation where values, branches, state changes, lambdas, assertions, and calls can be evaluated together.
Read source and recover declarations, expressions, statements, scopes, and type information.
Translate methods into symbolic state, result, and type summaries.
Normalize arithmetic, conditionals, lambdas, state reads, and method facts.
Find possible exceptions, failed asserts, redundant branches, and unreachable paths.
Report the call stack, path assumptions, symbolic locals, and the source route to the issue.
The original UI explored a simple idea: when analysis finds a problem, let the developer inspect the symbolic runtime that led to it.
Inspect how a warning crosses method boundaries without forcing every caller to be annotated manually.

Add analysis-only assertions, assumptions, and breakpoints while keeping ordinary C# compilation intact.

Knows the Artificial Reason and surprise yourself
Put here a short description or brief highlights in your app.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.

Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.

Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.
Lorem ipsum dolor sit amet, consectetur adipisicing elit provident tempore porro deserunt nostrum sapiente.

Discover our projects and the rigorous process of creation. Our principles are creativity, design, experience and knowledge. We are backed by 20 years of research.
Join the waitlist and be first to try NStatic when it ships for Visual Studio.
Join the WaitlistWe use Google analyticscookies to understand how the site is used. See our privacy policy.