The renderer package provides a flexible system for rendering vulnerability search results in a CLI using a JSON-based layout configuration. It supports smart omission of empty fields, list truncation, and automatic formatting for booleans, numbers, and urgency indicators.
To use the renderer, you must:
- Define a JSON layout containing
LayoutLine objects. - Parse the layout using
ParseLayout. - Convert your
vulnx.Vulnerability objects into renderer.Entry objects using FromVulnerability. - Call
Render to generate the final string output.
package main
import (
"fmt"
"log"
"github.com/projectdiscovery/vulnx/pkg/tools/renderer"
"github.com/projectdiscovery/vulnx"
)
func main() {
// Define layout configuration
layoutJSON := `[
{
"line": 1,
"format": "[{doc_id}] {severity} - {title}",
"omit_if": []
},
{
"line": 2,
"format": "↳ Authors: {authors} | Vuln Age: {age_in_days}d | EPSS: {epss_score} | CVSS: {cvss_score}",
"omit_if": ["authors.length == 0", "epss_score == 0", "cvss_score == 0"]
}
]`
// Parse layout
layout, err := renderer.ParseLayout([]byte(layoutJSON))
if err != nil {
log.Fatal(err)
}
// Convert vulnerability to entry
entry := renderer.FromVulnerability(vuln)
entries := []*renderer.Entry{entry}
// Render output
result := renderer.Render(entries, layout, 1, 1)
fmt.Println(result)
}