Fallow for VS Code
Find unused code, circular dependencies, and code duplication in TypeScript/JavaScript projects. Powered by fallow, a Rust-native alternative to knip that is 5-41x faster than knip v5 (2-18x faster than knip v6).
Features
- Real-time diagnostics via the fallow LSP server: unused files, exports, types, dependencies, enum/class members, unresolved imports, unlisted deps, duplicate exports, circular dependencies, and code duplication
- Quick-fix code actions: remove unused exports, delete unused files
- Refactor code actions: extract duplicate code into a shared function
- Code Lens: reference counts above each export declaration with click-to-navigate (opens Peek References panel)
- Hover information: export usage status, unused status, and duplicate block locations
- Tree views: browse unused code by issue type and duplicates by clone family in the sidebar
- Status bar: see total issue count and duplication percentage at a glance
- Auto-fix: remove unused exports, dependencies, and enum members with one command
- Auto-download: the extension downloads the
fallow-lsp binary automatically
Installation
From the Marketplace
Search for "Fallow" in the VS Code extensions panel, or install from the command line:
code --install-extension fallow-rs.fallow-vscode
Manual
- Install the
fallow npm package or the standalone fallow / fallow-lsp binaries (see fallow installation)
- Install the extension VSIX file:
code --install-extension fallow-vscode-*.vsix
Commands
| Command |
Description |
Fallow: Run Analysis |
Run full codebase analysis and update tree views |
Fallow: Auto-Fix Unused Exports & Dependencies |
Remove unused exports and dependencies |
Fallow: Preview Fixes (Dry Run) |
Show what fixes would be applied without changing files |
Fallow: Restart Language Server |
Restart the fallow-lsp process |
Fallow: Show Output Channel |
Open the Fallow output panel for debugging |
Fallow: Toggle Mute Code-Duplication Findings |
Hide or restore Fallow's duplicate-code squiggles in the editor |
Fallow: Toggle Mute All Findings |
Hide or restore every Fallow finding in the editor |
Fallow: Manage Diagnostic Mutes... |
Multi-select picker for individual categories |
Fallow: Show All Findings (Clear Mutes) |
Reset all editor mutes |
Muting Fallow's editor squiggles
Duplicate-code findings can span many lines and drown out TypeScript / ESLint diagnostics in the editor. Fallow ships three ways to mute them locally without disabling the underlying rule:
- A right-click Quick Fix on any Fallow squiggle: "Mute Fallow
<category> findings in this workspace."
- The four commands above; bind a keyboard shortcut to
fallow.toggleMuteDuplicates for one-keystroke noise control.
- The Fallow language status item (right gutter of the status bar) appears with a yellow indicator whenever anything is muted; click it to open the manage picker.
Mute state is stored in the workspace, so it survives reload but does not bleed across projects. Precedence: rules in your fallow.config.json and the fallow.issueTypes setting take effect server-side; muting is a local view filter only, applied client-side. CI and fallow check still report every finding.
Settings
| Setting |
Default |
Description |
fallow.lspPath |
"" |
Path to the fallow-lsp binary. Leave empty for auto-detection. |
fallow.autoDownload |
true |
Automatically download the binary if not found. |
fallow.issueTypes |
all enabled |
Toggle individual issue types on/off. |
fallow.duplication.threshold |
5 |
Minimum number of lines for a code block to be reported as a duplicate. |
fallow.duplication.mode |
"mild" |
Detection mode: strict, mild, weak, or semantic. |
fallow.production |
false |
Production mode: exclude test/dev files, only production scripts. |
fallow.changedSince |
"" |
Git ref (tag, branch, or SHA) to scope the Problems panel and sidebar to files changed since that ref, mirroring the CLI's --changed-since. Tag your current commit (e.g. fallow-baseline) and set this to the tag to enforce "no new issues going forward" while ignoring pre-existing findings. |
fallow.trace.server |
"off" |
LSP trace level: off, messages, or verbose. |
Binary resolution
The extension looks for the fallow-lsp binary in this order:
fallow.lspPath setting (if configured)
- Local
node_modules/.bin/fallow-lsp
fallow-lsp in PATH
- Previously downloaded binary in extension storage
- Auto-download from GitHub releases (if
fallow.autoDownload is enabled)
Development
cd editors/vscode
pnpm install
pnpm build # Production build
pnpm watch # Watch mode for development
pnpm lint # Type check
pnpm test # Unit + extension-host tests
pnpm package # Package as .vsix