mrkeyoor.com_
Thu 10 Sept 18:03 UTC
Dev Toolsevaluationupdated 10 Sept 2026

katana review

Katana is a command-line crawler and Go library for finding URLs, forms, scripts, and network endpoints across a website. It gives security teams and automation pipelines scoped, rate-limited crawling for plain HTTP pages and JavaScript-heavy applications.

trackingstars / 7d
Verdict

Our Katana run installed 357 packages, built in 111 seconds, and passed all 46 Go tests, so it is a credible default crawler for security automation. Use it when scope rules, structured output, and optional browser execution save you from maintaining a custom spider. Keep the headless engine behind hard process controls until its cancellation and zero-value option failures are resolved.

We ran it

Lab card: what happened when we ran katanaScreenshot of katana (github.com/projectdiscovery/katana)
Install✓ · 58s357 packages
Build✓ · 111s
Tests✓ · 64s46 passed · 0 failed of 46 (go test)
Repo189 files~21,353 lines of source · 1.5 MB · 12 CI workflows · Dockerfile

Answers from our run

Does katana build from source?

Dependencies installed in 58 seconds (357 packages), and the build succeeded in 111 seconds. We cloned commit 430318a into a clean Debian container with 3 CPUs and no project-specific setup.

Do katana's tests pass?

Yes: 46 of 46 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use katana?

Library users who require cancellation to stop every headless crawl: issue 1756 reports that a crawl blocked in a CDP call can outlive its cancelled context.

What are the alternatives to katana?

Hakrawler, GoSpider, Colly. Our Katana run installed 357 packages, built in 111 seconds, and passed all 46 Go tests, so it is a credible default crawler for security automation.

Setup4/558-second install; headless mode adds Chrome and session work
Docs4/5Flags and examples are extensive, though several caveats sit deep
Community5/517,449 stars with September 2026 issue and push activity
Maturity4/5All 46 tests passed; hybrid engine still has open failure reports

Who it’s for

Security engineers collecting attack-surface URLs before manual testing or scanning.
Go developers who want a crawler they can embed and control through callbacks.
Automation teams that need JSON Lines output, scope rules, rate limits, and resumable jobs.
Testers who need a browser-backed crawl for client-rendered routes and XHR discovery.

Who it’s NOT for

Library users who require cancellation to stop every headless crawl: issue 1756 reports that a crawl blocked in a CDP call can outlive its cancelled context.
Teams that cannot tolerate a process-level panic from an omitted option: issue 1825 reproduces TimeStable=0 reaching time.NewTicker(0) in the hybrid engine.
Operators expecting Katana to log in for them: the README requires manual authentication and an exported session cookie or header, or an already logged-in browser.
Anyone who must archive raw responses during browser crawling: the README says response storage is unsupported in headless mode.
Environments fixed below Go 1.26 for source installs, or without Chrome for the documented headless path.

Setup reality

Our sandbox install at commit 430318a succeeded in 58 seconds and installed 357 packages. The build passed in 111 seconds, and all 46 Go tests passed in 64 seconds. The 1.5 MB checkout contained 189 files and about 21,353 source lines.

The current README requires Go 1.26+ for a source install, while release binaries and a Docker image provide other routes. Standard public-site crawling needs no credentials. Protected sites require a manually exported cookie or header, and captcha solving needs a provider key. Knowledge-base mode downloads its model on first use.

Headless work needs Chrome, and the README still calls that mode experimental. A custom Chrome data directory does not preserve session-only cookies after they expire, and raw response storage does not work in headless mode. The repository has 12 CI workflow files and a Dockerfile, but no tests directory; the Go test targets still passed in our run.

Katana v1.7.0 covers both HTTP and browser crawling

Katana v1.7.0 is built for endpoint discovery rather than general web indexing. Standard mode fetches pages without a browser, while the experimental headless mode executes JavaScript and can collect XHR requests. Both feed a command-line pipeline that accepts one URL, lists, or stdin and emits plain URLs or structured JSON Lines. The same engine is available as a Go library with result callbacks, which makes Katana useful before scanners, inventory checks, and manual application testing.

The feature set goes beyond following links. Katana can parse JavaScript, extract forms, detect technologies, inspect robots.txt and sitemaps, and apply custom regex fields to responses. Optional knowledge-base classification labels pages such as login, error, captcha, or parked, then can identify endpoint types and possible secrets. That classifier downloads a model on first use. Secret validation is more consequential: the README says it sends live API calls to providers, so it should be enabled only on data you are authorized to test.

A 150-request default makes scope controls part of setup

Katana defaults to 10 concurrent fetchers, 10 parallel inputs, and a global limit of 150 requests per second. Those defaults are energetic enough that a responsible run starts with ownership, scope, and rate decisions. Root-domain scoping is enabled by default, with regex inclusion and exclusion for tighter boundaries. Operators can also cap pages per domain, ignore query-value variants, and filter similar URL paths so generated identifiers do not expand one route into an endless queue.

Rate controls are unusually practical for shared automation. A run can set requests per second or minute globally, apply a separate per-host ceiling, and add delay between requests. The README says Katana backs off with exponential delay and jitter after HTTP 429 or 503 responses. None of that grants permission to crawl a target, and a bad scope expression can still cross a boundary. Treat the emitted URL set as sensitive too, especially when it contains internal paths, query values, or discovered secrets.

What happened when we ran it

Our sandbox installed commit 430318a in 58 seconds and pulled 357 packages. The build finished successfully in 111 seconds. Go test then completed in 64 seconds with 46 passed and 0 failed out of 46. That clean result matters for a tool intended to sit early in a security pipeline, where malformed output or a crawler crash can quietly remove coverage from everything downstream.

The checkout itself was compact: 189 files, about 21,353 lines of source, and 1.5 MB before installation. We found 12 CI workflow files and a Dockerfile, though no tests directory. Go projects often keep test files beside their packages, so the directory signal is less useful than the command result here. Our measurement setup proves that the supplied commit installed, built, and passed its available Go tests in the stated fresh container; it does not measure crawl speed or target coverage.

One of Katana's two crawl modes is still experimental

Katana v1.7.0 is safer to start in standard mode when server-rendered links are enough. Headless mode adds JavaScript execution, DOM interaction, XHR extraction, automatic form filling, and connection to an existing Chrome debugging session. It also adds browser state and another failure surface. The README labels both headless crawling and automatic form filling experimental, and the Ubuntu instructions install Google Chrome alongside the Go toolchain.

Issue 1756 gives embedded users a concrete reason to add an outer deadline. Its reporter found that cancelling Options.Context did not stop a hybrid crawl blocked inside a Chrome DevTools Protocol call, with the goroutine still blocked 12 minutes later. Issue 1825 describes another library-only edge: leaving TimeStable at zero can reach time.NewTicker(0) and panic from a Rod goroutine. The CLI supplies a default, but code constructing options by hand may not.

Two authenticated routes still depend on session handling

Katana v1.7.0 documents two ways to crawl protected pages: pass a manually exported cookie or header, or attach headless mode to a browser where the user has already logged in. That is honest, workable plumbing for a tester. It is not an identity workflow. Session renewal, multi-factor prompts, account locking, secret storage, and deciding which user role should be crawled remain the operator's responsibility.

Browser reuse also has limits. The README warns that a custom Chrome data directory does not save a cookie whose lifetime is only the active session. It separately says raw response storage is unavailable in headless mode. Teams that need replayable evidence from an authenticated JavaScript application must capture traffic elsewhere or accept Katana's JSON output without a raw-response archive. For simple header-based access, a file keeps the secret out of shell history, but that file still needs restrictive permissions and cleanup.

The September 10 push and v1.7.0 show current maintenance

GitHub recorded Katana's last push on September 10, 2026, and listed 17,449 stars plus 26 open issues and pull requests. Open issue 1825 was filed and updated that same day, while issue 1756 was updated on September 8. That combination supports a judgment of active maintenance and active scrutiny. The combined open count is not a count of confirmed bugs.

Release v1.7.0 arrived on August 5, 2026. Its notes include lifecycle context support, headless callbacks, similarity-based content deduplication, and fixes for look-alike-domain scope boundaries and concurrent map access. The open cancellation report concerns that newer context control, which is exactly why release recency cannot substitute for reading issue activity. Katana is mature enough to adopt for standard crawling today. Browser-backed library users should wrap it as a process they can terminate, then test their own option construction and session behavior before trusting a long run.

Alternatives

ProjectWhat it isPick it when
HakrawlerA smaller Go command-line crawler aimed at quick endpoint and asset discovery.pick this instead when a narrow stdin-friendly URL collector is enough and Katana's browser and classification features would be excess machinery.
GoSpiderA Go web spider focused on fast link, script, and endpoint collection.pick this instead when you want a simpler security spider and can accept a repository last pushed in April 2024.
CollyA Go framework for writing a purpose-built scraper or crawler in code.pick this instead when your application needs custom parsing and persistence logic more than a ready-made security CLI.

What people are saying

  1. [github-trending] projectdiscovery/katana

Sources

  1. Katana README
  2. Katana repository facts
  3. Katana v1.7.0 release
  4. Issue 1756: context cancellation can leave a CDP call blocked
  5. Issue 1825: zero TimeStable can panic in hybrid mode

More dev tools reviews

unleashed-firmware · elixir · metasploit-framework · migrate · ast-grep · ai-usagebar · the whole board →