Discover / Security
Subfinder
by projectdiscoveryGo
Fast passive subdomain enumeration tool for security reconnaissance.
Maturity: stable because 8y old, v2.14.0 released 98d ago. Derived from release and commit history, not a rating.
- Stars
- 14k
- Forks
- 1.6k
- Downloads / mo
- —
- Last commit
- 2026-07-30
- License
- MIT
- Open issues
- 10
Market and trust evidence
Edition not yet matchedNo exact skills.sh identity match is available for this repository. Repository adoption and freshness remain visible above; install momentum is not inferred.
Trust analysis is a screening signal, not a security warranty. Read the ranking and trust methodology.
In practice
Written by AI from this repository’s README · high confidenceA tester needs the full list of subdomains for a target but has no fast, source aggregating way to collect them.
Use it when
Use it during reconnaissance when you want passive subdomain discovery that can be piped into other tools via stdin and stdout.
Not the right pick when
Not the right pick if you need active brute forcing or anything beyond passive enumeration, since it is built for one thing only.
Capabilities
- passive subdomain enumeration from curated sources
- resolution and wildcard elimination
- JSON, file and stdout output formats
- stdin and stdout piping for workflow integration
- per source rate limiting and source selection
- config and provider config files for API keys
Requirements
- go1.24 to install with go install
- provider API keys configured in provider-config.yaml for some sources
Cost: Free and open source
Video walkthroughs
Automated Bug Bounty Recon: Subfinder, Nuclei & Httpx Workflow (2026)
🕵️♂️ Subfinder Tutorial: The Ultimate Subdomain Enumeration Tool for Bug Bounty! 🌐
Third-party YouTube uploads matched to this tool by title, channel and repository name on 2026-08-03. Not made, reviewed or endorsed by SkillPilot. View counts and publish months are as of the match date and the month is approximate. Nothing loads from YouTube until you press play.
What the repository ships
Detected from the actual files in the repository root.
Latest release v2.14.0
Published 2026-04-27
What's Changed
[!WARNING]
The Facebook source (Meta CT) has been removed in this release after Meta discontinued the upstream API.
If you reference this source in automation, CI jobs, or saved source lists, remove it from those configurations.
For most users, the practical impact should be low, since the integration was already non-functional, and this change mainly removes related errors and confusion.
✨ Features
- Added the new Sub.md passive source, plus follow-up hardening for non-200 responses and context-aware error delivery, by @x-stp in PR #1771 (ae1c9a6, 9ea2b18, d6282b0).
🐞 Bug Fixes
- Fixed Netlas community-tier downloads by capping bulk size to 200 and tightening non-200 and body-close handling, by @x-stp in PR #1776 (7fc6da4, 3206a8b).
- Fixed control-flow bugs across Hackertarget, IntelX, Shodan, C99, and Chinaz, including better transport error reporting and safer response validation, by @x-stp in PR #1777 (14103b5, 75f3c28, 9760a96, 01569ae, b9ef679, c61d1e9).
- Fixed rate-limit handling so global and per-source limits work as expected, preserved per-source durations, and prevented nil map panics, by @CharlesWong in PR #1764 (c1ce78e, cca10d8, 240305b, cf0b801, 6f0e11e).
❌ Removed
- Removed the dead Facebook source after Meta discontinued the backing API, by @PontusLindblom in PR #1732 (4d9e078).
🧹 Chores
- Updated workflow dependencies, switched to org actions, and cleaned up workflow configuration, by @PontusLindblom in PRs #1733 and #1768 (0dfd80a, 7bd72ff, e6ed1e1).
- Refreshed Go dependencies, including grouped module bumps plus utls, circl, and grouped ProjectDiscovery dependency updates, by @dependabot in PRs #1716, #1746, #1751, #1769, #1774, #1783 (bb5a68a, 2636330, 8aa8653, 4de1dde, 2d58630, 0ed1b0b).
New Contributors
- @CharlesWong made their first contribution in https://github.com/projectdiscovery/subfinder/pull/1764
Full Changelog: https://github.com/projectdiscovery/subfinder/compare/v2.13.0...v2.14.0
Tags
README
<h1 align="center">
<img src="static/subfinder-logo.png" alt="subfinder" width="200px">
<br>
</h1>
<h4 align="center">Fast passive subdomain enumeration tool.</h4>
<p align="center">
<a href="https://goreportcard.com/report/github.com/projectdiscovery/subfinder/v2"><img src="https://goreportcard.com/badge/github.com/projectdiscovery/subfinder"></a>
<a href="https://github.com/projectdiscovery/subfinder/issues"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat"></a>
<a href="https://github.com/projectdiscovery/subfinder/releases"><img src="https://img.shields.io/github/release/projectdiscovery/subfinder"></a>
<a href="https://twitter.com/pdiscoveryio"><img src="https://img.shields.io/twitter/follow/pdiscoveryio.svg?logo=twitter"></a>
<a href="https://discord.gg/projectdiscovery"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a>
</p>
<p align="center">
<a href="#features">Features</a> •
<a href="#installation">Install</a> •
<a href="#running-subfinder">Usage</a> •
<a href="#post-installation-instructions">API Setup</a> •
<a href="#subfinder-go-library">Library</a> •
<a href="https://discord.gg/projectdiscovery">Join Discord</a>
</p>
subfinder is a subdomain discovery tool that returns valid subdomains for websites, using passive online sources. It has a simple, modular architecture and is optimized for speed. subfinder is built for
doing one thing only - passive subdomain enumeration, and it does that very well.
We have made it to comply with all the used passive source licenses and usage restrictions. The passive model guarantees speed and stealthiness that can be leveraged by both penetration testers and bug bounty
hunters alike.
Features
<h1 align="left">
<img src="static/subfinder-run.png" alt="subfinder" width="700px"></a>
<br>
</h1>
- Fast and powerful resolution and wildcard elimination modules
- Curated passive sources to maximize results
- Multiple output formats supported (JSON, file, stdout)
- Optimized for speed and lightweight on resources
- STDIN/OUT support enables easy integration into workflows
Usage
subfinder -h
This will display help for the tool. Here are all the switches it supports.
Usage:
./subfinder [flags]
Flags:
INPUT:
-d, -domain string[] domains to find subdomains for
-dL, -list string file containing list of domains for subdomain discovery
SOURCE:
-s, -sources string[] specific sources to use for discovery (-s crtsh,github). Use -ls to display all available sources.
-recursive use only sources that can handle subdomains recursively (e.g. subdomain.domain.tld vs domain.tld)
-all use all sources for enumeration (slow)
-es, -exclude-sources string[] sources to exclude from enumeration (-es alienvault,zoomeyeapi)
FILTER:
-m, -match string[] subdomain or list of subdomain to match (file or comma separated)
-f, -filter string[] subdomain or list of subdomain to filter (file or comma separated)
RATE-LIMIT:
-rl, -rate-limit int maximum number of http requests to send per second
-rls value maximum number of http requests to send per second for providers in key=value format (-rls "hackertarget=10/s,shodan=15/s")
-t int number of concurrent goroutines for resolving (-active only) (default 10)
UPDATE:
-up, -update update subfinder to latest version
-duc, -disable-update-check disable automatic subfinder update check
OUTPUT:
-o, -output string file to write output to
-oJ, -json write output in JSONL(ines) format
-oD, -output-dir string directory to write output (-dL only)
-cs, -collect-sources include all sources in the output (-json only)
-oI, -ip include host IP in output (-active only)
CONFIGURATION:
-config string flag config file (default "$CONFIG/subfinder/config.yaml")
-pc, -provider-config string provider config file (default "$CONFIG/subfinder/provider-config.yaml")
-r string[] comma separated list of resolvers to use
-rL, -rlist string file containing list of resolvers to use
-nW, -active display active subdomains only
-proxy string http proxy to use with subfinder
-ei, -exclude-ip exclude IPs from the list of domains
-mr, -max-results int limit the number of results per source (0 = unlimited; honored by paginating sources such as virustotal)
DEBUG:
-silent show only subdomains in output
-version show version of subfinder
-v show verbose output
-nc, -no-color disable color in output
-ls, -list-sources list all available sources (-oJ for JSON)
OPTIMIZATION:
-timeout int seconds to wait before timing out (default 30)
-max-time int minutes to wait for enumeration results (default 10)
Environment Variables
Subfinder supports environment variables to specify custom paths for configuration files:
SUBFINDER_CONFIG- Path to config.yaml file (overrides default$CONFIG/subfinder/config.yaml)SUBFINDER_PROVIDER_CONFIG- Path to provider-config.yaml file (overrides default$CONFIG/subfinder/provider-config.yaml)
Installation
subfinder requires go1.24 to install successfully. Run the following command to install the latest version:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
Learn about more ways to install subfinder here: https://docs.projectdiscovery.io/tools/subfinder/install.
Post Installation Instructions
subfinder can be used right after the installation, however many sources required API keys to work. Learn more here: https://docs.projectdiscovery.io/tools/subfinder/install#post-install-configuration.
Running Subfinder
Learn about how to run Subfinder here: https://docs.projectdiscovery.io/tools/subfinder/running.
Subfinder Go library
Subfinder can also be used as library and a minimal examples of using subfinder SDK is available here
</td>
</tr>
</table>
Resources
License
subfinder is made with 🖤 by the projectdiscovery team. Community contributions have made the project what it is. See
the THANKS.md file for more details.
Read the usage disclaimer at DISCLAIMER.md and contact us for any API removal.