Flowther shows state-changing entry points in a Solidity workspace and renders their call graphs as an interactive tree.
Default panel view (All entry points grouped by file)
- Groups workflows by file
- Entry points =
public/externalfunctions that are notview/pure+constructor/receive/fallback - Inherited functions from abstract contracts are shown in concrete contract files with dimmed
from ContractNameindicator - Call trees preserve execution order (including repeated calls) and include modifier/base-constructor paths
- Interface/abstract targets are resolved to concrete
overrideimplementations when possible - Click any node to jump to its definition (or to the callsite when no definition exists, e.g.
abi.encode,keccak256,bytes.concat) - Jump highlights the target line for ~0.5s
- Right click an entry point to Hide Flow
- Right click an entry point to Show Only This Flow (focus mode, auto-expands all calls)
- Right click any function to Expand All nested calls
- Right click a file to Hide File or Unhide All Flows In File
- Call nodes show icons + call-type badges, and can optionally display call order numbers
- Variables panel: shows state variables (excluding constants/immutables) and which entry points can modify them (directly or through internal calls); inherited variables show
from ContractNameindicator
Show Only This Flow (focus mode)
Variables panel (State variables grouped by file/contract with modifying entry points)
git clone https://github.com/nisedo/Flowther.git && cd Flowther && npm install && npx @vscode/vsce package && code --install-extension flowther-*.vsix- Slither - one of:
- A working Solidity build setup (e.g. Foundry/Hardhat) or
solcfor single-file analysis
- Open a Solidity workspace in VSCode
- Open the Flowther activity bar icon
- Workflows: entry points and their call trees
- Variables: state variables and entry points that modify them
- Run "Flowther: Refresh Workflows" (command palette) if it doesn't auto-load
flowther.targetPath: optional analysis target inside the workspace (useful for monorepos / nested Foundry/Hardhat projects). Can be a Solidity file or a project root; if empty, Flowther auto-detects a supported project in the workspace.flowther.pythonPath: python interpreter (leave empty to auto-detect from theslitherCLI)flowther.slitherRepoPath: optional path to a Slither checkout (leave empty to use the installedslitherpython package)flowther.solcPath: optionalsolcpathflowther.solcArgs: optional solc args stringflowther.filterPaths: optional filter paths passed to Slitherflowther.excludeDependencies: hide dependency-defined entry points (defaulttrue)flowther.expandDependencies: expand call graphs into dependency-defined functions (defaulttrue)flowther.showCallOrderNumbers: prefix call nodes with execution order (defaulttrue)flowther.maxCallDepth: call graph depth cap (default10)
- “Failed to import Slither”: set
flowther.pythonPathto the interpreter whereslitheris installed, or setflowther.slitherRepoPathto a Slither checkout. - “Invalid compilation: … is a directory”: set
flowther.targetPathto your Foundry/Hardhat/etc project root (folder containingfoundry.toml/hardhat.config.*) or to a specific.solfile.



