A terminal UI for querying the CVEDB vulnerability database. No API key required.
Built with Bubbletea, Bubbles, and Lipgloss.
Claude was used throughout this project to assist in, and expedite development. If you have moral obligations to AI being used as a development tool, you may want to skip this project.
Download a prebuilt binary from Releases, or build from source:
# Build locally
make build
./bin/cveye
# Or install to $GOPATH/bin
make install
cveyeRequires Go 1.21+ to build from source.
Downloaded binaries will be blocked by macOS quarantine. Remove the quarantine attribute before running:
xattr -d com.apple.quarantine cveye-darwin-*Launch the interactive TUI with no arguments, or jump straight to a search with a subcommand:
# Interactive mode
cveye
# Direct lookups
cveye cve CVE-2021-44228
cveye product apache
cveye cpe log4jLook up a single CVE by ID. Shows a rich detail panel with CVSS score bar, EPSS percentage, KEV/ransomware badges, affected CPEs, and references.
# Launch and type a CVE ID
cveye
> CVE-2021-44228
# Or directly from the command line
cveye cve CVE-2021-44228
Search for CVEs by product name. Results are shown in a scrollable table with CVSS, EPSS, and KEV columns. Press Enter on a row to see full details.
# Type a product name in the Product Search tab
> log4j
# Or directly from the command line
cveye product log4j
All results are fetched upfront so sorting and filtering are instant:
/— filter results by keyword (matches CVE ID, summary, vendor, product)e— open sort menu (EPSS, CVSS, date, CVE ID — ascending or descending)f— toggle KEV-only filtern/p— next / previous page
Search for CPE 2.3 strings by product name. Select a CPE and press Enter to pivot to Product Search filtered by that CPE.
# Type a product name in the CPE Browser tab
> apache
# Or directly from the command line
cveye cpe apache
All results are fetched upfront. Use / to filter CPEs by keyword (useful for narrowing by version), and n/p to page through results.
Add --json to any subcommand to skip the TUI entirely. Pretty-printed JSON is written to stdout and saved to a file in the working directory:
cveye cve CVE-2021-44228 --json # → CVE-2021-44228.json
cveye product apache --json # → apache-cves.json
cveye cpe log4j --json # → log4j-cpes.jsonFor product and CPE searches, --json automatically fetches all pages and combines them into a single output.
Output is pipeable — the filename confirmation goes to stderr:
cveye cve CVE-2021-44228 --json | jq '.cve_id'Press s to save results as JSON. A prompt appears in the footer where you can edit the filename before confirming with enter.
When a filter is active (Product Search or CPE Browser), you'll first be asked whether to save all results or only the filtered results.
Default filenames:
- CVE Lookup —
CVE-2021-44228.json - Product Search (list) —
apache-cves.json(orapache-cves-filtered.json) - Product Search (detail) —
CVE-2021-44228.json - CPE Browser —
apache-cpes.json(orapache-cpes-filtered.json)
Press c to copy data from the current view. In detail views (CVE Lookup, Product Search detail), a menu lets you choose which field to copy (CVE ID, summary, CVSS, EPSS, references, CPEs). In the Product Search list, you can copy the selected row's CVE ID, CVSS, or EPSS. In the CPE Browser, c copies the selected CPE string directly.
Clipboard support: pbcopy (macOS), xclip/xsel/wl-copy (Linux), clip (Windows).
| Key | Action |
|---|---|
tab / shift+tab |
Switch between views |
enter |
Submit search / select row |
up / down / j / k |
Navigate list |
/ |
Filter results by keyword (Product Search, CPE Browser) |
e |
Open sort menu (Product Search) |
f |
Toggle KEV-only filter (Product Search) |
c |
Copy to clipboard |
s |
Save results as JSON |
n / p |
Next / previous page (Product Search, CPE Browser) |
esc |
Toggle search input focus / clear filter / close detail panel |
ctrl+c / q |
Quit |
The footer bar updates to show only the hotkeys available in the current view. Submenus (sort, save, copy) replace the footer temporarily — press esc to cancel.