Fourteen packages. One coherent map.
Every package reads and writes the same klyrek-core data model, so output from one feeds directly into the next, no glue code required. Install the whole thing with klyrek-cli, or pull in only the package a job needs.
Shared models & scope guard
Config, logging, plugin registry, and the authorization-scope guard every other package builds on.
Scope-checked HTTP client
Rate-limited client that re-checks scope on every redirect hop, not just the first request.
Structural crawling
Breadth-first crawl mapping pages, forms, and JavaScript references within declared scope.
Technology fingerprinting
Signature-based detection of servers, frameworks, CMSes, and JS libraries.
Headers & misconfiguration
Flags missing security headers, permissive CORS, weak cookie flags, and other low-hanging findings.
API surface discovery
OpenAPI/Swagger discovery, GraphQL detection, and REST-pattern classification.
Auth flow mapping
Classifies login/register forms and detects session mechanisms and auth-gated routes.
JavaScript endpoint discovery
Extracts endpoints, hardcoded secrets, and exposed source maps from JavaScript.
Exposed storage & assets
Subdomain enumeration, cloud storage exposure, and sensitive file probing.
Public intelligence
Certificate transparency, WHOIS, and CVE lookups from free public sources.
Report generation
Markdown, JSON, and self-contained HTML reports with remediation guidance.
Scan diffing
Snapshots a scan and diffs it against the next one to surface what changed.
Unified command line
The klyrek crawl command tying every package together into one run.
Terminal dashboard
Interactive terminal UI for browsing a scan result, no browser required.
Installed in one line. Scriptable in ten.
Use the CLI for a quick pass, or drop into the Python API when you need to fold Klyrek into a larger pipeline.
$ pip install klyrek-cli $ klyrek crawl https://target.example.com --format html Klyrek: scanning https://target.example.com (authorized targets only) ✓ Done: 47 endpoints, 6 technologies, 12 findings. → Report written to ./klyrek_output/target.example.com_20260705T091500Z.html
from klyrek_cli.pipeline import PipelineOptions, run_scan from klyrek_auth.forms import find_auth_forms options = PipelineOptions(max_depth=4, run_js=True, run_assets=True) result = run_scan("https://target.example.com", options=options) for form in find_auth_forms(result.endpoints): print(form.kind, form.endpoint.url)
from klyrek_core.plugins import Plugin, register_plugin @register_plugin class GraphQLFinder(Plugin): name = "graphql" category = "tech-fingerprint" def run(self, response): if "/graphql" in str(response.url): return "graphql-api"
Built to fit your workflow
Every package respects the same conventions, so moving between them costs nothing.
- Typed public APIs, so your editor tells you what a `ScanResult` can do.
- Every module reads and writes the same `ScanResult` object, no adapters to write.
- A plugin is a Python class with one method. Ship it privately or fold it into the pipeline.
- JSON and Markdown export out of the box, so reports slot into whatever you already use.
Stop mapping by hand.
Install Klyrek, point it at a target you're authorized to test, and start your next engagement already knowing the terrain.