Modern web applications rely heavily on dynamic Single Page Application (SPA) frameworks like React, Vue, and Angular, which load routes, API endpoints, and sensitive parameters through client-side JavaScript rather than traditional static HTML links. Standard web scrapers and older crawlers often fail to discover these dynamic resources because they lack headless browser rendering and intelligent endpoint parsing. Katana, developed by ProjectDiscovery, is a modern, next-generation web crawling and spidering framework built specifically for automated asset discovery.
Written in Go, Katana combines both ultra-fast standard HTTP response parsing and headless Chromium crawling to map all navigable links, hidden API endpoints, forms, and JavaScript files across target domains.
Core Architecture and Features
Katana provides key architectural advantages over traditional web crawlers:
- Dual Crawling Modes: Supports standard fast Go HTTP crawling (ideal for scanning thousands of endpoints per second) and headless Chromium crawling (renders JavaScript to capture dynamic DOM links).
- Automatic Endpoint Extraction: Automatically parses regex patterns from JavaScript source files to uncover hidden REST and GraphQL endpoints.
- Intelligent Scope Control: Granular field filtering, domain regex scoping, and path exclusion to prevent crawler loops and external off-scope excursions.
- Native Pipeline Integration: Seamlessly accepts piped domain inputs from
subfinderandhttpx, and outputs clean target streams directly intonucleifor automated vulnerability scanning.
Installing Katana on Linux
You can install Katana via pre-compiled GitHub binaries or compile directly using the Go toolchain:
# Method 1: Official Pre-compiled Binary (Recommended)
curl -s https://api.github.com/repos/projectdiscovery/katana/releases/latest | grep "browser_download_url.*linux_amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | wget -qi -
tar -xvf katana_*_linux_amd64.tar.gz
sudo mv katana /usr/local/bin/
katana -version
# Method 2: Via Go (Requires Go 1.21+)
go install github.com/projectdiscovery/katana/cmd/katana@latest
Command Flags and Filter Options
The table below summarizes common command-line options in Katana:
| Flag | Functionality | Usage Example |
|---|---|---|
-u <target> |
Target single URL to crawl | katana -u https://example.com |
-list, -l <file> |
Text file containing target URLs | katana -l urls.txt |
-depth, -d <n> |
Maximum crawling link depth | katana -u https://example.com -d 3 (default 3) |
-jc, -js-crawl |
Enables JavaScript endpoint parsing | katana -u https://example.com -jc |
-hl, -headless |
Enables headless Chromium browser crawling | katana -u https://example.com -hl |
-c <concurrency> |
Number of concurrent crawling workers | katana -c 20 (default 10) |
-o <file> |
Write discovered URLs to output file | katana -u https://example.com -o endpoints.txt |
Running Web Crawling Workflows
1. Standard High-Speed Crawl with JavaScript Parsing
To crawl an endpoint up to 3 links deep while parsing internal JavaScript files for hidden API paths:
katana -u https://example.com -jc -d 3 -o crawled_endpoints.txt
2. Headless Browser Crawling for Modern Single Page Apps
When assessing modern web applications that render content dynamically via client-side frameworks, activate headless Chromium mode:
katana -u https://example.com -headless -system-chrome -o dynamic_links.txt
3. Complete Reconnaissance Pipeline: Subfinder to httpx to Katana
Pipe discovered subdomains into httpx to find active web servers, and immediately spider all endpoints:
subfinder -d example.com -silent | httpx -silent | katana -silent -jc -o all_urls.txt
This automated chain extracts thousands of verified, reachable URLs across an organization’s digital perimeter in minutes.
Frequently Asked Questions
How does Katana avoid getting trapped in infinite calendar loops?
Katana employs crawl depth limits (-depth) and allows custom path exclusion regexes via the -kf (known-files) and -fx (filter-extension) flags to ignore infinite dynamic calendar scripts and asset extensions (such as .png, .svg, .css).
Can Katana crawl authenticated sessions?
Yes. You can supply session authentication cookies and custom authorization headers using the -H "Cookie: session=xyz" or -H "Authorization: Bearer token" flags.