Skip to main content
.vectorlint.ini is VectorLint’s project configuration file. It lives in your project root and controls three things: global behavior settings, where VectorLint looks for custom rules, and which rule packs run on which files. Run vectorlint init to generate a starter file. You can edit it manually at any time.

Global Settings

These settings apply to all reviews in the project.
SettingTypeDefaultDescription
RulesPathstring(none)Root directory for custom rule packs. If omitted, only built-in presets are used.
Concurrencyinteger4Number of reviews to run in parallel.
DefaultSeveritystringwarningSeverity level for reported violations: warning or error.
# .vectorlint.ini

RulesPath=.github/rules
Concurrency=4
DefaultSeverity=warning

File Pattern Sections

Use [glob/pattern] sections to map file types to rule packs. Each section targets files matching the pattern and specifies which rules to run.
[**/*.md]
RunRules=Acme

[content/docs/**/*.md]
RunRules=Acme

[content/marketing/**/*.md]
RunRules=TechCorp

[content/drafts/**/*.md]
RunRules=

RunRules

A comma-separated list of rule pack names. Pack names correspond to subdirectory names inside RulesPath.
RunRules=Acme, TechDocs
Set RunRules= with no value to explicitly skip all rules for matching files (useful for drafts or generated content).

Rule Pack Directory Structure

The RulesPath setting defines where VectorLint looks for rule packs. Each subdirectory becomes an available pack name.
project/
├── .github/
│   └── rules/              ← RulesPath
│       ├── Acme/           ← Pack: "Acme"
│       │   ├── grammar.md
│       │   └── style.md
│       └── TechCorp/       ← Pack: "TechCorp"
│           └── brand.md
└── .vectorlint.ini
Rules inside Acme/ are available when you set RunRules=Acme. Nesting is supported: you can organize rules into subdirectories within a pack.

Cascading Configuration

VectorLint applies configuration blocks from general to specific, similar to Vale’s cascade behavior. All blocks that match a given file are applied, and rule packs accumulate. A file runs every pack from every matching block, from the most general to the most specific.
# Applied first: general
[**/*.md]
RunRules=GeneralRules

# Applied second: more specific
# Result: content/docs/api.md runs GeneralRules AND TechDocs
[content/docs/**/*.md]
RunRules=TechDocs
Specificity is determined by path depth and wildcard count. content/docs/**/*.md is more specific than **/*.md.

Confidence threshold

VectorLint filters findings through confidence checks before surfacing violations. The confidence threshold controls how aggressively this filter applies. Set it in your .env file or as an environment variable:
CONFIDENCE_THRESHOLD=0.75
ValueEffect
Lower (for example 0.5)More findings surfaced, higher recall, more noise
Default (0.75)Balanced precision and recall
Higher (for example 0.9)Fewer findings surfaced, higher precision, fewer false positives
Invalid values fall back to the default of 0.75.

Complete Example

# .vectorlint.ini

RulesPath=.github/rules
Concurrency=4
DefaultSeverity=warning

# All markdown files: baseline checks
[**/*.md]
RunRules=Acme

# Technical docs
[content/docs/**/*.md]
RunRules=Acme

# Marketing: brand voice rules
[content/marketing/**/*.md]
RunRules=TechCorp

# Drafts: skip all checks
[content/drafts/**/*.md]
RunRules=

Global Style Guide (VECTORLINT.md)

In addition to .vectorlint.ini, you can place a VECTORLINT.md file in your project root to define global style instructions in plain language. Zero-config mode: If no .vectorlint.ini exists, VectorLint automatically detects VECTORLINT.md, creates a synthetic “Style Guide Compliance” rule, and reviews content against it. Combined mode: When .vectorlint.ini is present, the contents of VECTORLINT.md apply globally to every review, making your tone and terminology preferences active across all rules.
Keep VECTORLINT.md concise. VectorLint emits a warning if the file exceeds approximately 4,000 tokens, as very large contexts can degrade review quality and increase API costs.

Next Steps