Discover / Security

Subfinder

by projectdiscoveryGo

Fast passive subdomain enumeration tool for security reconnaissance.

Toolstable

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 matched

No 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 confidence

A 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

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

Has examplesDocker imageCI configured

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.

Related tools