Join the Empire Hacking Slack
- Discussions and Support
Slither is a Solidity & Vyper static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses.
- Features
- Usage
- How to install
- Detectors
- Printers
- Tools
- API Documentation
- Getting Help
- FAQ
- License
- Publications
- Detects vulnerable Solidity code with low false positives (see the list of trophies)
- Identifies where the error condition occurs in the source code
- Easily integrates into continuous integration and Hardhat/Foundry builds
- Built-in 'printers' quickly report crucial contract information
- Detector API to write custom analyses in Python
- Ability to analyze contracts written with Solidity >= 0.4
- Intermediate representation (SlithIR) enables simple, high-precision analyses
- Correctly parses 99.9% of all public Solidity code
- Average execution time of less than 1 second per contract
- Integrates with Github's code scanning in CI
- Support for Vyper smart contracts
Run Slither on a Hardhat/Foundry/Dapp/Brownie application:
slither .This is the preferred option if your project has dependencies as Slither relies on the underlying compilation framework to compile source code.
However, you can run Slither on a single file that does not import dependencies:
slither tests/uninitialized.solNote Slither requires Python 3.10+. If you're not going to use one of the supported compilation frameworks, you need solc, the Solidity compiler; we recommend using solc-select to conveniently switch between solc versions.
uv is a fast Python package manager that's 10-100x faster than pip.
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install slither as a tool
uv tool install slither-analyzer
# Or run slither without installation
uvx --from slither-analyzer slither <target>To upgrade:
uv tool upgrade slither-analyzerpython3 -m pip install slither-analyzerTo upgrade:
python3 -m pip install --upgrade slither-analyzerbrew install slither-analyzergit clone https://github.com/crytic/slither.git && cd slither
# Install as editable for development
uv tool install -e .
# Or use uv run for testing without installation
uv run slither <target>The -e flag installs in editable mode, meaning changes to the source code are immediately reflected without reinstalling.
Use the eth-security-toolbox docker image. It includes all of our security tools and every major version of Solidity in a single image. /home/share will be mounted to /share in the container.
docker pull trailofbits/eth-security-toolboxTo share a directory in the container:
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox- For GitHub action integration, use slither-action.
- For pre-commit integration, use (replace
$GIT_TAGwith real tag)- repo: https://github.com/crytic/slither rev: $GIT_TAG hooks: - id: slither
- To generate a Markdown report, use
slither [target] --checklist. - To generate a Markdown with GitHub source code highlighting, use
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(replaceORG,REPO,COMMIT)
For more information, see
- The Detector Documentation for details on each detector
- The Detection Selection to run only selected detectors. By default, all the detectors are run.
- The Triage Mode to filter individual results
human-summary: Print a human-readable summary of the contractsinheritance-graph: Export the inheritance graph of each contract to a dot filecontract-summary: Print a summary of the contractsloc: Count the total number lines of code (LOC), source lines of code (SLOC), and comment lines of code (CLOC) found in source files (SRC), dependencies (DEP), and test files (TEST).entry-points: Print all the state-changing entry point functions and their variables of the contracts
call-graph: Export the call-graph of the contracts to a dot filecfg: Export the CFG of each functionsfunction-summary: Print a summary of the functionsvars-and-auth: Print the state variables written and the authorization of the functionsnot-pausable: Print functions that do not usewhenNotPausedmodifier.
To run a printer, use --print and a comma-separated list of printers.
See the Printer documentation for the complete lists.
slither-check-upgradeability: Reviewdelegatecall-based upgradeabilityslither-prop: Automatic unit test and property generationslither-flat: Flatten a codebaseslither-check-erc: Check the ERC's conformanceslither-read-storage: Read storage values from contractsslither-interface: Generate an interface for a contract
See the Tool documentation for additional tools.
Contact us to get help on building custom tools.
Documentation on Slither's internals is available here.
Feel free to stop by our Slack channel (#ethereum) for help using or extending Slither.
-
The Printer documentation describes the information Slither is capable of visualizing for each contract.
-
The Detector documentation describes how to write a new vulnerability analyses.
-
The API documentation describes the methods and objects available for custom analyses.
-
The SlithIR documentation describes the SlithIR intermediate representation.
How do I exclude mocks or tests?
- View our documentation on path filtering.
How do I fix "unknown file" or compilation issues?
- Because slither requires the solc AST, it must have all dependencies available.
If a contract has dependencies,
slither contract.solwill fail. Instead, useslither .in the parent directory ofcontracts/(you should seecontracts/when you runls). If you have anode_modules/folder, it must be in the same directory ascontracts/. To verify that this issue is related to slither, run the compilation command for the framework you are using e.gnpx hardhat compile. That must work successfully; otherwise, slither's compilation engine, crytic-compile, cannot generate the AST.
Slither is licensed and distributed under the AGPLv3 license. Contact us if you're looking for an exception to the terms.
- Slither: A Static Analysis Framework For Smart Contracts, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
If you are using Slither on an academic work, consider applying to the Crytic $10k Research Prize.

