id = "goaccess"
name = "GoAccess"
homepage = "https://goaccess.io/"
description = "Real-time web log analyzer and interactive viewer that runs in a terminal."
executables = ["goaccess"]
[dotfiles]
paths = ["~/.goaccessrc"]
secret = []
[commands]
format = 1
label = "Analyze web logs"
description = "Parse an access log and show it in the terminal, or write a JSON, CSV or HTML report. Panels, GeoIP, real-time WebSocket options and persistence are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true }
[[commands.source]]
id = "man"
kind = "manual"
url = "https://raw.githubusercontent.com/allinurl/goaccess/master/goaccess.1"
revision = "master 2026-10-27"
evidence = """
--time-format=<timeformat>
--date-format=<dateformat>
--log-format=<logformat>
-f --log-file=<logfile>
-o --output=<path/file.[json|csv|html]>
-e --exclude-ip=<IP|IP-range>
-q --no-query-string
-a --agent-list
--ignore-crawlers
--anonymize-ip
--html-report-title=<title>
--real-time-html
--no-color
--no-progress
--tz=<timezone>
--process-and-exit
"""
[[commands.field]]
id = "log_file"
label = "Log file"
description = "Access log to parse. Leave empty to read from standard input."
type = "path"
option = ["--log-file", "-f"]
path = { kind = "file", role = "input" }
sources = ["man"]
[[commands.field]]
id = "log_format"
label = "Log format"
description = "A predefined name such as COMBINED, or a custom format string."
type = "string"
option = ["--log-format"]
suggestions = [{ value = "COMBINED", label = "Combined" }, { value = "COMMON", label = "Common" }, { value = "VCOMBINED", label = "Virtual host combined" }]
sources = ["man"]
[[commands.field]]
id = "date_format"
label = "Date format"
type = "string"
option = ["--date-format"]
sources = ["man"]
[[commands.field]]
id = "time_format"
label = "Time format"
type = "string"
option = ["--time-format"]
sources = ["man"]
[[commands.field]]
id = "output"
label = "Output file"
description = "Report to write; the extension (.html, .json, .csv) picks the format."
type = "path"
option = ["--output", "-o"]
path = { kind = "file", role = "output", must_exist = false }
effect = "overwrite"
sources = ["man"]
[[commands.field]]
id = "exclude_ip"
label = "Exclude IP or range"
type = "string"
option = ["--exclude-ip", "-e"]
multiple = true
sources = ["man"]
[[commands.field]]
id = "ignore_crawlers"
label = "Ignore crawlers"
type = "boolean"
option = ["--ignore-crawlers"]
sources = ["man"]
[[commands.field]]
id = "no_query_string"
label = "Strip query strings"
type = "boolean"
option = ["--no-query-string", "-q"]
sources = ["man"]
[[commands.field]]
id = "anonymize_ip"
label = "Anonymize IPs"
type = "boolean"
option = ["--anonymize-ip"]
sources = ["man"]
[[commands.field]]
id = "report_title"
label = "HTML report title"
type = "string"
option = ["--html-report-title"]
sources = ["man"]
[[commands.field]]
id = "real_time_html"
label = "Real-time HTML"
description = "Serve the HTML report live over WebSocket."
type = "boolean"
option = ["--real-time-html"]
sources = ["man"]
[[commands.field]]
id = "tz"
label = "Timezone"
type = "string"
option = ["--tz"]
sources = ["man"]
[[commands.task]]
id = "terminal"
label = "Browse in terminal"
set = { log_format = ["COMBINED"] }
fields = ["log_file", "log_format", "exclude_ip", "ignore_crawlers", "no_query_string"]
required = ["log_file"]
[[commands.task]]
id = "html-report"
label = "HTML report"
set = { log_format = ["COMBINED"] }
fields = ["log_file", "log_format", "output", "report_title", "ignore_crawlers", "anonymize_ip", "real_time_html"]
required = ["log_file", "output"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["log_file", "log_format", "output", "ignore_crawlers", "no_query_string"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["date_format", "time_format", "exclude_ip", "anonymize_ip", "report_title", "real_time_html", "tz"]