# lintel-check
[](https://crates.io/crates/lintel-check)
[](https://docs.rs/lintel-check)
[](https://github.com/lintel-rs/lintel/actions/workflows/ci.yml)
[](https://github.com/lintel-rs/lintel/blob/master/LICENSE)
Core validation engine for [Lintel](https://github.com/lintel-rs/lintel). Validates JSON, YAML, TOML, JSON5, and JSONC files against JSON Schema.
## Features
- **Multi-format parsing** — JSON, YAML, TOML, JSON5, JSONC with format-specific `$schema` extraction (inline properties, YAML modelines, TOML header comments)
- **`SchemaStore` catalog** — auto-matches files to schemas using [SchemaStore](https://www.schemastore.org/) `fileMatch` patterns
- **Schema caching** — disk-backed cache for remote schemas with configurable cache directory
- **Project configuration** — `lintel.toml` with exclude patterns, schema URI rewrites, `//`-relative paths, and per-file overrides
- **Rich diagnostics** — [miette](https://crates.io/crates/miette)-powered error reporting with source spans
## Usage
```rust
use lintel_check::validate::ValidateArgs;
let args = ValidateArgs {
globs: vec!["**/*.json".to_string()],
exclude: vec![],
cache_dir: None,
force_schema_fetch: false,
force_validation: false,
no_catalog: false,
config_dir: None,
schema_cache_ttl: None,
};
// Pass args and an HttpClient implementation to validate::run()
```
## Configuration (`lintel.toml`)
```toml
root = true
exclude = ["vendor/**", "node_modules/**"]
[rewrite]
"https://json.schemastore.org/" = "//schemas/"
[[override]]
files = ["**/vector.json"]
schemas = ["**/vector.json"]
validate_formats = false
```
- **`root`** — stop walking up the directory tree for parent configs
- **`exclude`** — glob patterns to skip during validation
- **`rewrite`** — URI prefix replacement rules (longest prefix wins)
- **`//` paths** — resolve relative to the directory containing `lintel.toml`
- **`[[override]]`** — per-file/per-schema settings (e.g. disable format validation)
## License
Apache-2.0