softperson

Automating creativity

Screenshots

Gallery

NStatic in Action

Every screenshot is from a real analysis run on C# code — no mock-ups.

The Full NStatic Workspace

The analysis runs inside Visual Studio. The main editor shows your source code with inline error squiggles. The Error List panel below lists every finding with severity, location, and message. The tool windows on the right show symbolic state — Locals (what values variables can hold), Assumptions (conditions the analyzer has recorded), and the call stack.

NStatic full workspace inside Visual Studio
Error List

Every finding listed with file, line, and a precise description. Findings are ranked by confidence — definite bugs appear at the top, potential issues below.

NStatic Error List panel
Inline Error Highlighting

Errors are underlined at exactly the expression that fails — not just the statement. Hover to see the full symbolic explanation of why the error occurs.

Inline error highlighting in source code
Execution Path Visualization

Colored arrows superimposed on source code show every execution path through a method. The path overlay is generated from NStatic's internal symbolic execution model — each arrow represents a real transition between program states. Select any path to inspect the symbolic values at that point.

Execution paths for an if-else branch
Execution paths for a loop body
Interprocedural Call Stack

When a bug originates across multiple method calls, NStatic shows the full chain. This call stack is 11 frames deep — the analysis followed the actual call graph, not a summary, and tracked symbolic values through each frame. The Rotor codebase (shared-source .NET runtime) was used as a real-world test target.

NStatic 11-frame interprocedural call stack
Locals Panel — Symbolic Values

Unlike a debugger's Locals window (which shows one concrete execution), NStatic's Locals shows the symbolic range of possible values at the selected program point — across all possible inputs.

NStatic Locals panel showing symbolic values
Assumptions Panel

Every condition the analyzer has inferred and recorded — the preconditions it deduced, the branches it took, the assertions it verified. This is the "show your work" panel: full transparency into the reasoning chain.

NStatic Assumptions panel
Assumption Propagation — Before

At the top of a conditional block, variables have broad symbolic ranges. The assumption panel shows no constraints yet recorded.

Symbolic state before assumption is recorded
Assumption Propagation — After

After entering the branch, NStatic records the branch condition as an assumption. The variable's range narrows — subsequent analysis within the branch exploits this constraint.

Symbolic state after assumption narrows the range
Loop Solving — Fibonacci

The Locals panel showing the closed-form symbolic value of a Fibonacci loop variable after NStatic solved the recurrence relation. The expression involves the golden ratio — derived automatically from the second-order homogeneous recurrence.

Fibonacci loop solved to closed form in NStatic
Loop Variable Highlighting

Loop variables are highlighted in the source editor with their inferred symbolic range. NStatic colors variables differently depending on whether their value is fully determined, bounded, or unknown.

Loop variable highlighting in source code
Loop Locals

After solving an anonymous recursive loop, the Locals panel shows the symbolic value of each variable on each loop iteration — expressed as a function of the iteration count rather than a single concrete value.

Loop locals panel showing per-iteration symbolic values
Equation Solving

NStatic solves polynomial and algebraic equations symbolically. Here, a loop invariant reduces to a quadratic equation, and NStatic derives the closed-form solution automatically.

Equation solving in NStatic

Want to see more?

Join the waitlist and we'll send you a full walkthrough video when NStatic enters early access.

Join the Waitlist