infobyte/faraday

Open Source Vulnerability Management Platform

6,660
Stars
over 12 years
Age
0
Published reviews
0
Questions

Reliability breakdown

What drives the reliability score

Component scores measured daily from GitHub activity (2026-07-15).

Continuity30% of headline16

Activity on 3 of 90 tracked days in the last 90 and 0 of 30 in the last 30.

Closure30% of headline0

Merged 0 of 0 PRs opened and closed 0 of 0 issues opened over the last 90 tracked days — PR flow carries 55% of this component, issue flow 45%.

Shipping20% of headline46

5 releases in the last 180 days, 3 in the last 90 and 0 in the last 30 — a steady cadence scores highest.

Liveness10% of headline100

Last push 5 days ago — freshness decays as pushes age (roughly halves every 83 days without a push).

Support burden10% of headline94

Open-issue load isn't tracked for this repo yet.

Adoption confidence57

Modeled — how confidently teams are adopting this repo. Stargazers

Maintenance quality34

Modeled from PR/issue responsiveness and upkeep signals. Activity pulse

Risk score44

Modeled — lower is better; adoption and continuity risk. Repository

Stays active (30d)15%

Modeled chance the repo stays active over 30 days. Activity pulse

Stays active (90d)39%

Modeled chance the repo stays active over 90 days. Activity pulse

Release rhythm (180d)46

Regularity of releases over the last 180 days. Releases

Maintainer bus risk (90d)79%

Modeled — lower is better; concentration of commits in few maintainers. Contributors graph

Topics

Explore related topics

Jump into the topic listings this repository belongs to.

Project Overview

Faraday is an open-source vulnerability management platform built for security teams running collaborative penetration testing engagements and continuous security assessments. The core idea: instead of every tester on your team running tools independently and emailing CSVs around, Faraday gives you a central place to collect, correlate, and track vulnerabilities from dozens of scanning tools.

The project is maintained by Infobyte Security Research and ships in two tiers: a community open-source edition and commercial tiers (Professional and Corporate). The community edition gives you the workspace, import pipeline, and REST API. The commercial tiers add advanced reporting, role-based access controls, and enterprise integrations. Know this distinction before you commit—some features shown in the docs or marketing materials are paywalled, and discovering that mid-engagement is frustrating.

Faraday's 82.6% star growth over the last ~6 months tracks with broader demand for team-based vulnerability aggregation tools that aren't fully proprietary.

Key Challenges Addressed

Running a security assessment with multiple tools—Nessus, Burp Suite, Metasploit, Nikto—generates scattered, overlapping, and duplicate findings. Without a central aggregator, you end up with:

  • Duplicate vulnerabilities reported across tools with no deduplication
  • No unified status tracking (open, confirmed, risk-accepted, fixed)
  • No shared context across team members working simultaneously
  • No audit trail linking a finding to who confirmed it and when

Faraday addresses these by acting as a collecting layer. Each tool's output passes through a plugin that normalizes the format and lands in a shared PostgreSQL-backed vulnerability database. Your team then works from a single source of truth rather than individual tool exports.

Getting Started

Faraday runs as a server process with a web UI. The fastest path is Docker:

git clone https://github.com/infobyte/faraday.git
cd faraday
docker-compose up

The web interface becomes available at http://localhost:5985. On first launch, you create an admin account and then create a workspace for your engagement.

For a non-Docker install on Ubuntu/Debian:

pip install faradaysec faraday-plugins
faraday-manage migrate
faraday-manage createsuperuser
faraday-server

Sharp edges you'll hit immediately:

  • Python version sensitivity: Faraday requires Python 3.8+ and has version-specific dependency pins. Installing into a system Python with conflicting packages causes cryptic import errors at startup. Use a virtual environment or Docker from the start.
  • PostgreSQL is a hard requirement: If DATABASE_URL is not set before running migrations, faraday-manage migrate fails with a database connection error rather than a useful configuration message. Export DATABASE_URL pointing at a running Postgres instance before running any management commands.
  • Plugin installation is separate: Running pip install faradaysec alone gives you the server but not the tool parsers. You won't see import options for any scanner until you also install faraday-plugins. Install both in the same command to avoid this.
  • Version pinning is not optional: Mismatched versions between faradaysec and faraday-plugins cause silent import failures where tool output is accepted by the CLI but no vulnerabilities appear in the workspace. Pin both to the same release in your requirements file.

Features and Use Cases

Collaborative workspaces: Every pentest engagement maps to a workspace. Multiple team members connect to the same workspace and see each other's findings in real time. This is the primary value proposition for team-based assessments.

Automated tool ingestion: Faraday ships with plugins for over 80 security tools. You pipe tool output through faraday-cli or the REST API and findings appear in the workspace. This works for Nessus XML exports, Burp Suite XML, Metasploit, Nikto, OpenVAS, and many others.

Vulnerability deduplication: When two tools both report the same host/port/CVE combination, Faraday merges them rather than creating duplicates. The merge heuristics work reliably for standard CVE-labeled findings; edge cases with custom vulnerability names may still create duplicates you need to manually resolve.

Status tracking and workflow: You can move a vulnerability through states—open, re-opened, closed, risk-accepted—and attach comments, evidence, and screenshots. This makes Faraday usable as a lightweight ticketing layer for security findings without requiring a separate issue tracker.

REST API: Every action available in the UI is also available via the REST API, which is documented with Swagger. If you're building an automated pipeline—nightly scans feeding into a tracking dashboard—you can POST findings directly without going through the CLI.

Reporting: The community edition generates basic PDF reports. The commercial tiers add customizable templates and scheduled delivery.

Ecosystem and Dependencies

Faraday's main integration surface is its plugin ecosystem. The faraday-plugins package is a separate repo and package that handles parsing for individual tools. If your preferred scanner isn't supported, writing a custom plugin is straightforward—the base class expects a parseOutputString method that returns normalized finding objects.

For CI/CD integration, faraday-cli supports piping scanner output from automated build pipelines. A common pattern is running a scanner as a build step and piping output through faraday-cli fplugin <tool_name> to populate a workspace automatically.

Faraday's Swagger-documented REST API makes it connectable to external dashboards, SIEM systems, and ticketing tools. Community integrations for Jira exist, though they're not maintained as part of the core project.

Architectural Overview

Faraday is a Flask-based Python application backed by PostgreSQL. The main components:

  • faraday-server: The Flask API server. Handles authentication, workspace management, and vulnerability CRUD operations.
  • faraday-plugins: The parser layer. Takes raw tool output and converts it into normalized vulnerability objects before database insertion.
  • Web UI: A React frontend that connects to the REST API. Standard single-page application.
  • PostgreSQL: The only supported database. Vulnerability data, workspace metadata, and user accounts all live here.
  • faraday-client (legacy GTK desktop): Effectively deprecated in favor of the web UI. Ignore it—the docs referencing it are stale.

The plugin architecture is the key design choice. By keeping parsers as a separate package, the core server stays tool-agnostic and you can update a parser without redeploying the server. The downside is that two packages must stay version-synchronized, and mismatches produce confusing failures.

The Flask API follows a fairly standard REST design. Authentication uses JWT tokens. Workspaces are the top-level organizational unit—all vulnerability data, hosts, and services live inside a workspace.

Pros and Cons

Pros

  • Solves a real team coordination problem that spreadsheets and email don't handle well for multi-tool assessments.
  • Plugin coverage for 80+ tools means you probably won't need custom parsers for common scanners.
  • The REST API is well-documented and stable, enabling automation without fighting undocumented internals.
  • Active development with regular releases and responsive issue tracking.
  • The web UI is cleaner and more functional than most open-source security tools.

Cons

  • PostgreSQL is a hard dependency. No lightweight option for solo assessors evaluating the tool before committing to infrastructure.
  • The community vs. commercial feature boundary is not always clearly documented. You may hit a paywall mid-engagement on a feature you assumed was free.
  • faraday-plugins version drift is a recurring source of breakage. Two packages requiring synchronized versions is an ongoing maintenance burden.
  • Self-hosting requires real infrastructure: PostgreSQL, a persistent server process, and enough RAM for Flask. Not a tool you spin up quickly for a one-off assessment.
  • The legacy GTK client still appears in older docs and tutorials, creating confusion about which client is current.

Comparison and Alternatives

Measured 90-day trends for this project and its alternatives.

GitHub stars

Weekly star gains

4202100
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

Faraday

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

175 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Weekly total

840
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Faraday

GitHub API observation. Historical values render only when the source provides a real observation for that day.

149 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Weekly total

1160
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Faraday

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

149 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Weekly total

59300
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Faraday

GitHub API observation. Historical values render only when the source provides a real observation for that day.

149 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Weekly total

60300
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Faraday

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

149 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

143 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Weekly total

55280
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Faraday

GitHub API observation. Historical values render only when the source provides a real observation for that day.

149 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub API observation. Historical values render only when the source provides a real observation for that day.

143 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed pull request ratio

Weekly average

100500
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Faraday

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

175 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed issues ratio

Weekly average

100500
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Faraday

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

175 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue

Releases

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

Faraday

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
DefectDojo

GitHub release published_at events bucketed by UTC day; drafts are excluded.

175 observed daily rows. Missing days are not fabricated.

DateValue
Nuclei

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue

Hotness score

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

Faraday

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
DefectDojo

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

175 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Nuclei

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

Faraday

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
DefectDojo

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

175 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Nuclei

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Several open-source tools occupy adjacent space in vulnerability management and security collaboration:

Project Repo Hotness (~6mo) PRs merged (~6mo) Star growth (~6mo)
Faraday https://github.com/infobyte/faraday 7.57 0 2947
DefectDojo https://github.com/DefectDojo/django-DefectDojo metrics pending 0 62
Nuclei https://github.com/projectdiscovery/nuclei 65.05 61 4874

DefectDojo is the strongest open-source alternative for vulnerability management. It has deeper CI/CD integration documentation, stronger support for DevSecOps workflows where findings flow from automated scanners into a continuous tracking system, and a larger contributor base. If your use case is continuous vulnerability tracking in a development pipeline rather than episodic pentest engagements, DefectDojo is the better choice.

Conclusion

Penetration testing teams running multi-tool engagements will get immediate, concrete value from Faraday's workspace and plugin aggregation layer—it eliminates the cross-tool deduplication and status-tracking work that otherwise falls to spreadsheets. Start with the official community documentation to understand the workspace model before you deploy, so you know what the community edition actually gives you versus what requires a commercial license.

Do not run pip install faradaysec without also pinning faraday-plugins to the matching version—mismatched packages cause silent import failures where tool output appears to be accepted but no vulnerabilities land in the workspace. Before anything else, run faraday-manage check to validate that your PostgreSQL connection and plugin installation are correctly configured.

Join the conversation

Reviews · Questions · Posts

Share what you know about faraday — write a review from your real experience, ask an implementation question, or publish a post about how you use it.

Share your experience

Write or update your review

Explain what worked, what broke down, and what another team should know before adopting faraday.

Write your review now — it saves locally and publishes automatically after you sign in.

Rating
Positive attributes
Negative attributes

Project Q&A

Questions and answers

Browse implementation threads tied directly to infobyte/faraday. Each question links through to the full answer page.

Q&A No threads yet

Be the first to ask how teams run faraday in production. Every question you post becomes a durable, searchable answer page other developers can find.

Ask the first question

Related posts

Posts tagged with the same topics

These posts come from the same topic surface as this repo, so readers can move from project evaluation into practical writeups and migration notes without leaving context.

Posts No topic-linked posts yet

Share how your team uses faraday — a migration note, an architecture writeup, or a comparison. Your post reaches everyone browsing these same topics.

Write the first post
Get a weekly email with the hottest new projects in the Agents & Orchestration and Agent world.
No Spam. Unsubscribe easily at any time.

Copyright 2018-2026 Awesome Open Source.  All rights reserved.