# solidshadw/subsprayer architecture

> Architecture diagram of the GitHub repository solidshadw/subsprayer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/solidshadw/subsprayer
- Repository: https://github.com/solidshadw/subsprayer

## Overview

SubSprayer is a shell-based subdomain enumeration workflow for authorized targets. A user supplies one or more domains, and the CLI coordinates independent discovery sources, optional DNS brute forcing and GitHub Code Search, then checks discovered hosts with httpx and writes dated result files. The README documents these capabilities and integrations; source excerpts were unavailable, so edges reflect documented behavior rather than inspected call sites.

Main entry points: [`subsprayer.sh`](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh) (SubSprayer CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Inputs and CLI"]
  node_cli["SubSprayer CLI<br/>[subsprayer.sh]"]
  node_domain_input["Domain Inputs<br/>[subsprayer.sh]"]
end

subgraph group_discovery["Discovery Sources"]
  node_subfinder["Subfinder"]
  node_findomain["Findomain"]
  node_amass["OWASP Amass"]
  node_crtsh["crt.sh API"]
  node_cert_spotter["Cert Spotter API"]
end

subgraph group_enrichment["Optional Enrichment"]
  node_gobuster["Gobuster"]
  node_github_search["GitHub Code Search"]
end

subgraph group_results["Validation and Results"]
  node_httpx["httpx"]
  node_result_files[("Dated Results<br/>[subsprayer.sh]")]
  node_all_subdomains["Combined Subdomains<br/>[subsprayer.sh]"]
  node_live_hosts["Live Host Results<br/>[subsprayer.sh]"]
end

node_user(("Authorized User"))

node_user -->|"provides targets"| node_cli
node_cli -->|"validates"| node_domain_input
node_cli -->|"runs"| node_subfinder
node_cli -->|"runs"| node_findomain
node_cli -->|"runs"| node_amass
node_cli -->|"queries"| node_crtsh
node_cli -.->|"falls back"| node_cert_spotter
node_cli -.->|"runs with wordlist"| node_gobuster
node_cli -.->|"searches with token"| node_github_search
node_cli -->|"checks live hosts"| node_httpx
node_cli -->|"writes"| node_all_subdomains
node_cli -->|"writes"| node_live_hosts
node_cli -->|"organizes by date"| node_result_files
node_subfinder -->|"contributes results"| node_all_subdomains
node_findomain -->|"contributes results"| node_all_subdomains
node_amass -->|"contributes results"| node_all_subdomains
node_crtsh -->|"contributes results"| node_all_subdomains
node_cert_spotter -.->|"contributes results"| node_all_subdomains
node_gobuster -.->|"contributes results"| node_all_subdomains
node_github_search -.->|"contributes results"| node_all_subdomains
node_all_subdomains -->|"supplies hosts"| node_httpx
node_httpx -->|"returns live hosts"| node_live_hosts

click node_cli "https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh"
click node_domain_input "https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh"
click node_result_files "https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh"
click node_all_subdomains "https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh"
click node_live_hosts "https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_domain_input,node_user toneBlue
class node_subfinder,node_findomain,node_amass,node_crtsh,node_cert_spotter toneAmber
class node_gobuster,node_github_search toneMint
class node_httpx,node_result_files,node_all_subdomains,node_live_hosts toneRose
```

## Components

### Inputs and CLI

- [SubSprayer CLI](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh): `subsprayer.sh`
- [Domain Inputs](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh): `subsprayer.sh`

### Discovery Sources

- **Subfinder**
- **Findomain**
- **OWASP Amass**
- **crt.sh API**
- **Cert Spotter API**

### Optional Enrichment

- **Gobuster**
- **GitHub Code Search**

### Validation and Results

- **httpx**
- [Dated Results](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh): `subsprayer.sh`
- [Combined Subdomains](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh): `subsprayer.sh`
- [Live Host Results](https://github.com/solidshadw/subsprayer/blob/main/subsprayer.sh): `subsprayer.sh`

### Other components

- **Authorized User**

## Connections

- Authorized User → SubSprayer CLI: provides targets
- SubSprayer CLI → Domain Inputs: validates
- SubSprayer CLI → Subfinder: runs
- SubSprayer CLI → Findomain: runs
- SubSprayer CLI → OWASP Amass: runs
- SubSprayer CLI → crt.sh API: queries
- SubSprayer CLI → Cert Spotter API: falls back
- SubSprayer CLI → Gobuster: runs with wordlist
- SubSprayer CLI → GitHub Code Search: searches with token
- SubSprayer CLI → httpx: checks live hosts
- SubSprayer CLI → Combined Subdomains: writes
- SubSprayer CLI → Live Host Results: writes
- SubSprayer CLI → Dated Results: organizes by date
- Subfinder → Combined Subdomains: contributes results
- Findomain → Combined Subdomains: contributes results
- OWASP Amass → Combined Subdomains: contributes results
- crt.sh API → Combined Subdomains: contributes results
- Cert Spotter API → Combined Subdomains: contributes results
- Gobuster → Combined Subdomains: contributes results
- GitHub Code Search → Combined Subdomains: contributes results
- Combined Subdomains → httpx: supplies hosts
- httpx → Live Host Results: returns live hosts
