-
Notifications
You must be signed in to change notification settings - Fork 0
User Guide Configuration Reference
Prev: Configuration | Up: User Guide | Next: Security, Audit, and SBOM
This page is master config.lua reference.
Use Configuration for practical guidance and this page for exact fields, defaults, override rules, runtime caveats, and feature discovery.
| Goal | Main config areas | Commands / runtime | Caveats |
|---|---|---|---|
| Change plugin discovery and wrapper-source precedence |
downloader, registry
|
normal plugin loads, update, wrapper refresh |
workspace ./plugins can shadow configured plugins |
| Tune audit blocking and advisory matching |
security, reports
|
install, update, audit
|
reports.* pipeline is still partial |
| Tune recovery, concurrency, and write-policy checks | execution |
mutating commands | transaction DB applies to mutating runs only |
| Keep machine-readable logs |
logging, display
|
all commands | display capture matters only for structured logs |
| Keep reproducible installed-state snapshots | history |
mutating commands, snapshot
|
trackInstalled is independent from history.enabled
|
| Control ReqPack self-update source and install path | selfUpdate |
rqp update self-update mode |
only rqp update with no system and no --all uses this section |
| Set remote-server defaults | remote |
rqp serve --remote |
explicit serve flags override config |
Configure native rqp repositories |
rqp |
install rqp, update rqp, pack
|
not same thing as general repositories
|
Main config path:
$XDG_CONFIG_HOME/reqpack/config.lua- fallback:
~/.config/reqpack/config.lua
Related config file:
-
remote.lualives beside it and is separate fromconfig.lua
ReqPack accepts either:
- Lua file returning root table
- Lua file that sets global
config = { ... }
Config resolution order:
- built-in defaults
- config file selected by
--config <path>or default config path - CLI overrides
Behavior notes:
- if config file does not exist, cannot parse, or cannot execute, ReqPack keeps fallback defaults
- most CLI overrides are last-writer-wins
- repeated
--log-categoryflags accumulate, normalize, and dedupe -
--jobsand--jobs-maxare mutually exclusive -
-Dproxy.<name>.default=<target>lowercases both proxy name and target
ReqPack resolves default XDG roots and ~ against invoking user home in this order:
SUDO_USERSUDO_UIDHOME- passwd entry for current UID
- current working directory fallback
Meaning:
- under
sudo, default config, data, cache, plugin, history, and self-update paths can still resolve to original user instead of/root - explicit
XDG_CONFIG_HOME,XDG_DATA_HOME, andXDG_CACHE_HOMEstill win when set - default self-update link path
~/.local/bin/rqpfollows same invoking-user logic
Path-like values usually support ~ expansion to invoking user home.
Supported env-reference expansion is full-value only, not partial interpolation.
Behavior notes:
- supported forms are
$NAMEand${NAME} - missing env references resolve to empty string
- mixed strings such as
prefix-$TOKEN-suffixare not interpolated
Example:
archives = {
password = "$REQPACK_ARCHIVE_PASSWORD",
}Common places with env-reference expansion:
archives.password- repository auth
username - repository auth
password - repository auth
token - repository auth
sshKey - repository auth
headerName
Direct environment fallback also exists for archive password:
REQPACK_ARCHIVE_PASSWORD
Not every runtime state area has a config key.
Host snapshot cache:
- path:
$XDG_CACHE_HOME/reqpack/host/info.v1.jsonfallback - TTL: 24 hours
- used by plugin-visible
context.hostandreqpack.host -
rqp host refreshforces live refresh - successful self-update invalidates this cache
Root sections are:
applicationNameversionloggingsecurityreportsexecutionplannerdownloaderregistryinteractionremotesbomrqpselfUpdatearchivesrepositorieshistorydisplay
Metadata fields:
| Field | Type | Default | Notes |
|---|---|---|---|
applicationName |
string | "ReqPack" |
currently affects rqp version output prefix |
version |
string | build release ID | accepted by config loader, but current rqp version still prints binary build release ID |
Purpose: logger sinks, format, categories, structured logs.
| Field | Type | Default | Notes |
|---|---|---|---|
level |
string | "info" |
trace, debug, info, warn, error, critical; parser also accepts warning
|
consoleOutput |
bool | false |
logger console sink |
fileOutput |
bool | false |
text file sink enable |
filePath |
path | reqpack.log |
~ expands |
structuredFileOutput |
bool | false |
JSONL sink enable |
structuredFilePath |
path | reqpack.jsonl |
~ expands |
captureDisplayEvents |
bool | true |
mirrors display events into structured logs |
enabledCategories |
string[] | [] |
normalized lowercase, deduped |
enableBacktrace |
bool | false |
spdlog backtrace |
backtraceSize |
integer | 32 |
backtrace depth |
pattern |
string | [%^%l%$] %v |
spdlog text-sink pattern |
Behavior notes:
- empty
enabledCategoriesmeans no category filter - common inferred categories are
general,plugin,display, andstdout -
structuredFileOutputwrites JSON Lines with fields such astimestamp,severity,category,event,summary,cause,recommendation,details,source,scope, andcontext -
captureDisplayEventsonly affects structured logs; it decides whether display session/item/table events are mirrored into JSONL - if
enabledCategoriesexcludesdisplay, display events are still filtered even whencaptureDisplayEvents = true -
patternapplies to text logger sinks, not structured JSON or display renderer output - with active display attached, raw console sink is suppressed; warning-and-higher log events still reach display, and
consoleOutput = truealso mirrors lower-level log messages there -
--verbosecurrently enables logger console output; it does not change log level by itself
Purpose: audit policy, vulnerability data, thin-layer policy.
| Field | Type | Default |
|---|---|---|
enabled |
bool | true |
autoFetch |
bool | true |
requireThinLayer |
bool | false |
severityThreshold |
string | "critical" |
scoreThreshold |
number | 0.0 |
onUnsafe |
string | "continue" |
promptOnUnsafe |
bool | false |
allowUnassigned |
bool | true |
defaultGateway |
string | "security" |
cachePath |
path |
$XDG_CACHE_HOME/reqpack/security/cache fallback |
indexPath |
path |
$XDG_DATA_HOME/reqpack/security/index fallback |
osvDatabasePath |
path |
$XDG_DATA_HOME/reqpack/security/osv fallback |
osvFeedUrl |
string | https://storage.googleapis.com/osv-vulnerabilities |
osvRefreshMode |
string | "manual" |
osvRefreshIntervalSeconds |
integer | 86400 |
osvOverlayPath |
path | empty |
ignoreVulnerabilityIds |
string[] | [] |
allowVulnerabilityIds |
string[] | [] |
ecosystemMap |
map | {} |
osvEcosystemMap |
map | {} |
gateways |
map | {} |
backends |
map | {} |
onUnresolvedVersion |
string | "continue" |
strictEcosystemMapping |
bool | false |
includeWithdrawnInReport |
bool | false |
Enum values:
-
severityThreshold:low,medium,high,critical -
onUnsafe:continue,prompt,abort; parser also acceptsaskandfail -
onUnresolvedVersion:continue,prompt,abort; parser also acceptsaskandfail -
osvRefreshMode:manual,periodic,always
Important interactions:
- if
indexPathis still default andosvDatabasePathchanges, ReqPack alignsindexPathto same OSV DB path -
ecosystemMapentries are copied intoosvEcosystemMaptoo - if
backends.osvis absent, ReqPack synthesizes it from top-levelosv*fields - thin-layer runtime exec enforcement requires both
security.requireThinLayer = trueandexecution.checkVirtualFileSystemWrite = true
Policy behavior:
-
defaultGatewayis normalized lowercase and used when a gateway name is omitted -
onUnsafe = "prompt"enables prompting even ifpromptOnUnsafe = false -
sync_errorfindings always block -
unsupported_ecosystemfindings block only whenstrictEcosystemMapping = true -
unresolved_versionfindings block only whenonUnresolvedVersion = abortand prompt whenonUnresolvedVersion = prompt - findings at or above
severityThresholdorscoreThresholdalso trigger block-or-prompt disposition - if prompt is required while
interaction.interactive = false, ReqPack aborts instead of continuing -
includeWithdrawnInReport = falseskips withdrawn advisories during vulnerability matching
Current caveats:
-
security.enabledis accepted by config loader, but current validator/executor path does not use it as a global off-switch -
allowUnassignedis accepted by config loader, but current source sweep found no active runtime consumer
| Field | Type | Default |
|---|---|---|
enabled |
bool | true |
backends |
string[] | [] |
Gateway names are normalized lowercase.
| Field | Type | Default |
|---|---|---|
enabled |
bool | true |
feedUrl |
string/path | empty |
refreshMode |
string | manual |
refreshIntervalSeconds |
integer | 86400 |
overlayPath |
path | empty |
Paths are expanded. Backend names are normalized lowercase.
Purpose: validator report-generation hook.
| Field | Type | Default |
|---|---|---|
enabled |
bool | false |
format |
string | "none" |
outputPath |
path | reqpack-report.json |
includeValidationFindings |
bool | true |
includeDependencyGraph |
bool | true |
Enum values:
nonejsoncyclonedx
Current state from source:
- this section is not same thing as explicit
rqp audit --outputorrqp sbom --output -
reports.enabledonly tells validator to callgenerateReport()during validation path -
Validator::generateReport()is still skeleton hook -
reports.format,reports.outputPath,includeValidationFindings, andincludeDependencyGraphare accepted config and CLI surface, but current generator does not emit finished report artifacts yet
Purpose: transaction, concurrency, mutation behavior.
| Field | Type | Default |
|---|---|---|
useTransactionDb |
bool | true |
deleteCommittedTransactions |
bool | true |
checkVirtualFileSystemWrite |
bool | true |
stopOnFirstFailure |
bool | false |
dryRun |
bool | false |
jobs |
integer | 1 |
jobsMode |
string | "fixed" |
transactionDatabasePath |
path |
$XDG_CACHE_HOME/reqpack/transactions fallback |
Enum values:
-
jobsMode:fixed,max
Important interactions:
-
jobsMode = "max"resolves tostd::thread::hardware_concurrency()or1fallback -
jobsmust be positive -
--jobsand--jobs-maxare mutually exclusive - transaction DB behavior applies to mutating runs such as
install,ensure,remove, andupdate - interrupted active run is recovered before a new active run starts
- a run becomes
committedonly when every recorded item reachessuccessorcommitted; otherwise run becomesfailed -
deleteCommittedTransactionsremoves committed run state after commit path finishes -
checkVirtualFileSystemWriteis also a preflight writeability gate, not only thin-layer helper
Purpose: aliases, proxies, graph building, auto-download behavior.
| Field | Type | Default |
|---|---|---|
enableProxyExpansion |
bool | true |
autoDownloadMissingPlugins |
bool | true |
autoDownloadMissingDependencies |
bool | true |
buildDependencyDag |
bool | true |
topologicallySortGraph |
bool | true |
systemAliases |
map<string,string> | {} |
proxies |
map | {} |
Alias names and targets are normalized lowercase.
| Field | Type | Default |
|---|---|---|
default |
string | empty |
targets |
string[] | [] |
options |
map<string,string> | {} |
Notes:
- proxy names and targets are normalized lowercase
-
enableProxyExpansion = falseprevents proxy-request expansion step - CLI override
-Dproxy.<name>.default=<target>changes onlydefault
Purpose: download behavior and earliest explicit plugin sources.
| Field | Type | Default |
|---|---|---|
enabled |
bool | true |
followRedirects |
bool | true |
connectTimeoutSeconds |
integer | 10 |
requestTimeoutSeconds |
integer | 60 |
userAgent |
string | ReqPack build user-agent |
pluginSources |
map<string,string> | {} |
Plugin source keys are normalized lowercase.
Important interactions:
-
pluginSourcesis earliest explicit registry-source layer - later
registry.sources, on-disk registry source files, andregistry.overlayPathcan override same source names
Purpose: registry database, remote registry sync, plugin loading, source trust metadata.
| Field | Type | Default |
|---|---|---|
databasePath |
path |
$XDG_DATA_HOME/reqpack/registry fallback |
remoteUrl |
string | empty in struct, set by app defaults for normal runs |
remoteBranch |
string | main |
remotePluginsPath |
string | registry |
overlayPath |
path | empty |
sources |
map | {} |
pluginDirectory |
path |
$XDG_DATA_HOME/reqpack/plugins fallback |
autoLoadPlugins |
bool | true |
shutDownPluginsOnExit |
bool | true |
Notes:
-
databasePathmay point to directory or directregistry.luafile - when
databasePathis directory, ReqPack loads registry source file from<databasePath>/registry.lua - in normal app startup, main registry remote URL is defaulted to
https://github.com/Coditary/rqp-registry.git - registry-source merge order is
downloader.pluginSources, thenregistry.sources, then source file loaded fromdatabasePath, thenregistry.overlayPath; later layers win - if workspace contains local
plugins/, and startup still uses built-in default plugin directory with no explicit--configor--plugin-dir, ReqPack switchesregistry.pluginDirectoryto workspace./plugins - even when configured plugin directory remains elsewhere, ReqPack still scans distinct workspace
./pluginsat runtime - if configured and workspace plugin dirs both contain same plugin ID, later workspace scan shadows earlier script path
- built-in
rqpis reserved and cannot be replaced from scanned directories -
autoLoadPlugins = falseprevents implicit plugininit()during command execution -
shutDownPluginsOnExit = falseskips pluginshutdown()during registry teardown
Accepted short form:
registry = {
sources = {
demo = "https://example.test/demo.lua",
},
}Accepted full form fields:
| Field | Type | Notes |
|---|---|---|
source / url / path / target
|
string | first present field becomes source |
alias |
bool | aliases point to source name, not path |
description |
string | optional metadata |
role |
string | normalized lowercase |
capabilities |
string[] | normalized lowercase |
ecosystemScopes |
string[] | normalized lowercase |
writeScopes |
table[] | each entry needs kind, optional value
|
networkScopes |
table[] | entries can contain host, scheme, pathPrefix
|
privilegeLevel |
string | normalized lowercase |
scriptSha256 |
string | normalized lowercase |
bootstrapSha256 |
string | normalized lowercase |
Source-file behavior:
- on-disk registry source files may return table or set global
registry - if returned or global table contains
sources = { ... }, ReqPack uses that subtable - otherwise ReqPack treats root table itself as source map
- non-alias path values get
~expansion when loaded
Purpose: prompting behavior.
| Field | Type | Default |
|---|---|---|
interactive |
bool | true |
promptBeforeUnsafeActions |
bool | false |
promptBeforeMissingPluginDownload |
bool | false |
promptBeforeMissingDependencyDownload |
bool | false |
CLI --non-interactive overrides interactive to false.
Current behavior notes:
-
interactivecurrently feeds security confirmation prompts and archive-extraction prompting -
promptBeforeUnsafeActions,promptBeforeMissingPluginDownload, andpromptBeforeMissingDependencyDownloadare accepted config fields, but current source sweep found no active runtime consumer beyond config loading
Purpose: baseline remote-server defaults.
| Field | Type | Default |
|---|---|---|
readonly |
bool | false |
maxConnections |
integer | 16 |
serve --remote uses these unless explicit CLI flags override them.
Purpose: default SBOM export behavior.
| Field | Type | Default |
|---|---|---|
defaultFormat |
string | "table" |
defaultOutputPath |
path | empty |
prettyPrint |
bool | true |
includeDependencyEdges |
bool | true |
skipMissingPackages |
bool | false |
Enum values:
tablejsoncyclonedx-jsoncyclonedx
Important notes from source:
-
defaultOutputPathis active and used by SBOM exporter -
includeDependencyEdgesis active and controls JSON/CycloneDX dependency sections -
skipMissingPackagesis active via CLI/config override path -
skipMissingPackagesonly suppresses unresolved packages without explicit version; explicitly versioned specifiers still remain hard missing-package failures -
prettyPrintis accepted by config loader and CLI override surface, but current exporter code does not read it - explicit CLI format inference still wins over config defaults, for example
--outputwithout--formatselectscyclonedx-json
Purpose: native ReqPack package repositories and state.
| Field | Type | Default |
|---|---|---|
repositories |
string[] | [] |
statePath |
path |
$XDG_DATA_HOME/reqpack/rqp/state fallback |
systemAliases |
map<string,string[]> | {} |
Notes:
-
systemAliasesvalues must be strict string arrays or config load falls back - do not confuse
rqp.repositorieswith generalrepositoriestable
Purpose: rqp update self-update source and install paths.
| Field | Type | Default |
|---|---|---|
repoUrl |
string | https://github.com/Coditary/ReqPack.git |
releaseApiBaseUrl |
string | https://api.github.com |
releaseTag |
string | latest |
binaryDirectory |
path |
$XDG_DATA_HOME/reqpack/self/bin fallback |
linkPath |
path | ~/.local/bin/rqp |
Current behavior:
- self-update mode is used only by
rqp updatewith no system argument and no--all -
repoUrlmust parse into release owner and repository name -
releaseApiBaseUrlis trimmed of trailing/ -
releaseTag = "latest"uses latest-release API; any other tag uses tagged-release API path - supported auto-selected release targets are currently
x86_64-linux,aarch64-linux,x86_64-darwin, andaarch64-darwin - expected release asset name is
rqp-<tag>-<target>.tar.gz - extraction currently shells out to
tar - installed bundle path becomes
<binaryDirectory>/rqp-<sanitized-tag>-<target> -
linkPathis replaced atomically to point at installedrqp - successful self-update invalidates host snapshot cache
Purpose: encrypted archive password source.
| Field | Type | Default |
|---|---|---|
password |
string | empty |
If empty, ReqPack falls back to environment variable REQPACK_ARCHIVE_PASSWORD.
Purpose: plugin-consumed package repositories grouped by ecosystem.
Shape:
repositories = {
maven = {
{
id = "central",
url = "https://repo1.maven.org/maven2",
priority = 10,
enabled = true,
type = "maven",
auth = { type = "none" },
validation = { checksum = "warn", tlsVerify = true },
scope = { include = { "com.example:*" } },
snapshots = false,
},
},
}| Field | Type | Default |
|---|---|---|
id |
string | required |
url |
string | required |
priority |
integer | 100 |
enabled |
bool | true |
type |
string | empty |
auth |
table | defaults to type = none
|
validation |
table | checksum warn, TLS verify true
|
scope |
table | empty include/exclude |
Unknown extra fields are preserved as typed extras if they are:
- string
- bool
- number
- string array
type values:
nonebasictokenssh
Supported auth fields:
usernamepasswordtokensshKeyheaderName
Validation rules:
-
nonerejects any extra auth credentials -
basicrequires both username and password -
tokenrequires token -
sshrequires sshKey
Repository-loading notes:
- auth fields
username,password,token, andheaderNamesupport full-value env references -
sshKeysupports env reference plus~expansion - invalid auth config causes whole repository entry to be skipped
- duplicate repository
idvalues inside same ecosystem keep first valid entry and skip later duplicates
| Field | Type | Default |
|---|---|---|
checksum |
string | warn |
tlsVerify |
bool | true |
checksum values:
failwarnignore
Parser also accepts warning for warn.
| Field | Type | Default |
|---|---|---|
include |
string[] | [] |
exclude |
string[] | [] |
ReqPack sorts repository entries by ascending priority before exposing them to plugin runtime.
Purpose: append-only history log and installed-state tracking.
| Field | Type | Default |
|---|---|---|
enabled |
bool | true |
trackInstalled |
bool | true |
historyPath |
path |
$XDG_DATA_HOME/reqpack/history fallback |
maxLines |
integer | 0 |
maxSizeMb |
number | 0.0 |
Important behavior:
-
historyPathis directory holding bothhistory.jsonland installed-state database files -
enabledcontrols append-only event log only -
trackInstalledcontrols current installed-state snapshot used bysnapshot -
trackInstalledis independent fromenabled - installed-state tracking can stay on even if append-only history logging is reduced
- tracked state is updated from successful
install,ensure,remove, andupdateactions - after successful mutating runs, ReqPack may resync installed state per affected system by calling plugin
list() - security gateway systems are skipped during installed-state resync
- trimming affects only
history.jsonl, not installed-state snapshot data -
maxLines = 0andmaxSizeMb = 0.0disable trimming - when both limits are set, ReqPack keeps newest entries and uses stricter active limit
Purpose: plain vs color rendering and color rules.
| Field | Type | Default |
|---|---|---|
renderer |
string | plain |
colors |
table | default built-in scheme |
renderer values:
plaincolorcolour
| Key | Default |
|---|---|
rule |
empty |
header |
bold |
summaryOk |
bold green |
summaryFail |
bold red |
barFill |
green |
barEmpty |
empty |
barOuter |
empty |
step |
cyan |
successMarker |
bold green |
failureMarker |
bold red |
message |
empty |
Values are formatter/color spec strings consumed by color display layer.
plain renderer ignores them.
Override behavior:
- CLI overrides are last layer over file config
- repeated
--log-categoryvalues accumulate; most other overrides replace previous value -
install --stdinapplies per-line overrides cumulatively across later lines in same batch -
serve --stdinapplies each line's overrides against startup config for that line only -
--configonly changes which file is loaded during initial startup; later override application does not reload another config file
High-value CLI overrides include:
--config--log-level--log-console--no-log-console--verbose--log-pattern--log-file--structured-log-file--log-capture-display--no-log-capture-display--log-category--backtrace--registry--registry-path--plugin-dir--no-auto-load-plugins--no-proxy-expansion--dry-run--jobs--jobs-max--stop-on-first-failure--no-transaction-db--non-interactive--archive-password--prompt-on-unsafe--abort-on-unsafe--severity-threshold--score-threshold--osv-db--osv-feed--osv-refresh--osv-refresh-interval--osv-overlay--ignore-vuln--allow-vuln--fail-on-unresolved-version--prompt-on-unresolved-version--strict-ecosystem-mapping--include-withdrawn-in-report--report--report-format--report-output--sbom-format--sbom-output--sbom-no-pretty--sbom-no-dependency-edges--sbom-skip-missing-packages--sbom-fail-on-missing-package-Dproxy.<name>.default=<target>
- Configuration
- Security, Audit, and SBOM
- Output and Report Formats
- Remote Protocol Reference
- Data, State, and Trust
Prev: Configuration | Up: User Guide | Next: Security, Audit, and SBOM
- User Guide
- Getting Started
- Command Reference
- Configuration
- Configuration Reference
- Security, Audit, and SBOM
- Output and Report Formats
- Remote Mode
- Remote Protocol Reference
- Using Native
rqpPackages - Troubleshooting