1. Project Overview & Quickstart (projectdiscovery/subfinder)
Fast passive subdomain enumeration tool.
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
- 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 -hThis will display help for the tool. Here are all the switches it supports.
/* Detailed source-code truncated for AI context efficiency. */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@latestLearn 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
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.
2. Official Technical Reference & Guides (projectdiscovery/docs)
File: README.md
ProjectDiscovery Documentation
This is the source code for the ProjectDiscovery documentation located at https://docs.projectdiscovery.io
Development
- Checkout this repository
- Install mintlify with
npm i mintlify@latest - Run
mintlify dev
Deploying
To build the final product, we have a couple of additional steps:
- Build the JS Protocol Docs
npm install jsdoc-to-markdown./bin/jsdocs.sh
- Build the PDCP API reference documentation
- Either download the latest
openapi.yamlmanually or run./bin/download-api.sh - Run
./bin/generate-api.shto generate any new API files - OR run
./bin/generate-filtered-api.shto generate API docs without internal/admin endpoints
- Deployment
After those, Mintlify handles the deployment automatically.
File: bin/README-auto-grouped-api.md
Auto-Grouped API Documentation Generator
This script automatically generates and maintains API documentation with logical grouping based on OpenAPI tags. It combines the best of both worlds: auto-generation (no missing endpoints) and logical organization.
Usage
# Use default source file (Downloads directory)
./bin/generate-auto-grouped-api.sh
# Use custom source file
./bin/generate-auto-grouped-api.sh /path/to/your/openapi.yamlWhat it does
๐ค **Auto-Generation**
- Reads OpenAPI specification
- Filters out admin and internal APIs
- Generates MDX files for all public endpoints
- Never misses endpoints - everything is included automatically
๐ **Logical Grouping**
The script organizes endpoints into logical groups based on OpenAPI tags:
- Assets โ
assets+enumerationstags - Templates โ
templates+template/v2tags - Scans โ
scanstag - Results โ
results+reteststags - Configurations โ
configurationstag - Users โ
users+usertags - Logs โ
elog+scan_logtags - Export โ
exporttag - Automations โ
automationstag - Integration โ
oauthtag - Utilities โ
chaos,vulns,leaks,billing,usagetags
๐ **Auto-Updates Navigation**
- Automatically updates
mint.jsonwith new structure - Maintains logical grouping
- Sorts endpoints alphabetically within groups
- Handles new endpoints automatically
Benefits
โ
No Manual Maintenance - Add new endpoints to OpenAPI spec and they appear automatically
โ
Never Miss Endpoints - All public endpoints are included
โ
Logical Organization - Grouped by functionality, not alphabetically
โ
Consistent Naming - Uses OpenAPI summaries and operation IDs
โ
Future-Proof - Works with any OpenAPI specification changes
Output Structure
After running, your mint.json will have clean navigation like:
{
"group": "API Reference",
"pages": [
"api-reference/introduction",
{
"group": "Assets",
"pages": [
"api-reference/assets/get-asset-list",
"api-reference/assets/upload-asset",
"api-reference/enumerations/create-enumeration",
"..."
]
},
{
"group": "Templates",
"pages": [
"api-reference/templates/create-template",
"api-reference/templates/get-template-list",
"..."
]
}
]
}Comparison with Manual Approach
| Feature | Manual (generate-filtered-api.sh) |
Auto-Grouped (generate-auto-grouped-api.sh) |
|---|---|---|
| Missing Endpoints | โ Requires manual addition to mint.json |
โ Never - all endpoints auto-included |
| Logical Grouping | โ Full manual control | โ Smart tag-based grouping |
| Maintenance | โ High - update mint.json for new endpoints |
โ Zero - fully automated |
| Consistency | โ Depends on manual updates | โ Always consistent |
| New API Versions | โ Manual review and updates needed | โ Automatically handles changes |
When to Use
Use Auto-Grouped when:
- You want zero maintenance overhead
- You frequently add/remove API endpoints
- You have a team that might forget to update navigation
- You want consistent organization based on API design
Use Manual when:
- You need very specific custom grouping that doesn't match tags
- You want to exclude certain public endpoints from docs
- You have complex navigation requirements
Next Steps
After running this script:
- Preview:
mintlify dev - Deploy: Your CI/CD can run this script automatically when OpenAPI changes
- Customize: Modify the
logicalGroupsmapping in the script if needed
File: bin/README-filtered-api.md
Filtered API Documentation Generator
This script generates API documentation from an OpenAPI specification while excluding internal and admin endpoints.
Usage
# Use default source file (Downloads directory)
./bin/generate-filtered-api.sh
# Use custom source file
./bin/generate-filtered-api.sh /path/to/your/openapi.yamlNote: The script will create a filtered openapi.yaml file in the current directory for Mintlify to use.
What gets filtered out
The script automatically excludes:
Admin APIs: All paths starting with
/v1/admin/- Examples:
/v1/admin/user/search,/v1/admin/team/change_owner
- Examples:
Internal APIs: Endpoints tagged with
internal- Any endpoint with
"internal"in its tags array
- Any endpoint with
Output
- Creates filtered API documentation in the
api-reference/directory - Removes existing
internal/andadmin/folders before regenerating - Uses Mintlify scraping to generate MDX files for each endpoint
- Provides detailed console output showing what was filtered
Requirements
- Node.js and npm/npx
- Internet connection (to download @mintlify/scraping package)
- Valid OpenAPI 3.x specification file
Integration with existing workflow
You can replace the existing ./bin/generate-api.sh call in your build process with:
# Old way (includes internal/admin APIs)
./bin/generate-api.sh
# New way (excludes internal/admin APIs)
./bin/generate-filtered-api.shTroubleshooting
If you encounter errors:
- "OpenAPI source file not found": Ensure the file path is correct
- "Node.js is required": Install Node.js from https://nodejs.org
- Network errors: Check internet connection for npm package downloads
- Permission errors: Ensure the script is executable (
chmod +x bin/generate-filtered-api.sh)