# `module`
`Subscan` is designed with an extensible architecture, where each subdomain discovery component is referred to as a `SubscanModule`. In `Subscan` terminology, any component involved in subdomain discovery is considered a module. You can create your own custom modules and integrate them into `Subscan`. Modules can also include additional components. Details on how to develop and integrate your own modules are available in the [Development](../../development/index.html) chapter
The module command allows you to list the modules registered in `Subscan`, view their details, and run any module. Below are the subcommands that serve these purposes;
## `list`
Lists the modules registered on `Subscan` as a table with their details. The output looks like the following
```bash
~$ subscan module list
+--------------------+---------------+----------------+-------------+
| bing | HTTPClient | HTMLExtractor | true |
| duckduckgo | ChromeBrowser | HTMLExtractor | true |
| google | HTTPClient | HTMLExtractor | true |
| yahoo | HTTPClient | HTMLExtractor | true |
| alienvault | HTTPClient | JSONExtractor | true |
| anubis | HTTPClient | JSONExtractor | true |
+--------------------+---------------+----------------+-------------+
```
## `get`
Gets a single module with details
```bash
~$ subscan module get zonetransfer
+--------------+-----------+-----------+-------------+
| zonetransfer | None | None | false |
+--------------+-----------+-----------+-------------+
```
## `run`
This command runs the specified module and is primarily used to quickly test a new module during its implementation. It has a similar set of arguments as the `scan` command
### Argument List
| `--domain` | `-d` | Target domain to be scanned |
| `--output` | `-o` | Set output format (`txt`, `csv`, `json`, `html`) |
| `--print` | | If sets, output will be logged on stdout |
| `--user-agent` | `-u` | Set a `User-Agent` header |
| `--http-timeout` | `-t` | HTTP timeout as seconds |
| `--proxy` | `-p` | Set HTTP proxy |
| `--resolver-timeout` | | IP resolver timeout |
| `--resolver-concurrency` | | IP resolver concurrency level |
| `--disable-ip-resolve` | | Disable IP address resolve process |
| `--help` | `-h` | Print help |
### Common Use Cases
- Run module by name
```bash
~$ ~$ subscan module run google -d example.com
```
- Run module by name without IP resolve
```bash
~$ ~$ subscan module run shodan -d example.com --disable-ip-resolve
```
- If the module has authentication, set it as environment variable
```bash
~$ ~$ SUBSCAN_CENSYS_APIKEY=foo subscan module run censys -d example.com --user-agent 'subscan' -t 120
```
> For more details about environment variables, refer to the [Environments](../environments.md) chapter