rift-lint

Crates.iorift-lint
lib.rsrift-lint
version0.1.0-RC13
created_at2026-01-02 23:20:58.278796+00
updated_at2026-01-05 01:41:02.266795+00
descriptionConfiguration linter library and CLI for Rift HTTP Proxy
homepagehttps://github.com/EtaCassiopeia/rift
repositoryhttps://github.com/EtaCassiopeia/rift
max_upload_size
id2019325
size97,455
Mohsen Zainalpour (EtaCassiopeia)

documentation

README

rift-lint

Configuration linter for Rift HTTP Proxy - validates imposter configuration files for Mountebank compatibility.

Features

  • Port conflict detection across multiple imposter files
  • Header validation - ensures values are strings (not arrays, numbers, booleans)
  • Predicate validation - JSONPath selectors, regex patterns, operators
  • JavaScript validation - syntax checking for wait/decorate behaviors
  • Response validation - status codes, proxy URLs, required fields
  • Auto-fix capability for common issues

Installation

Via crates.io

cargo install rift-lint

Via Homebrew (macOS/Linux)

brew tap etacassiopeia/rift
brew install rift
# rift-lint is included

Via Docker (for CI/CD)

docker pull ghcr.io/etacassiopeia/rift-lint:latest
docker run --rm -v $(pwd):/imposters ghcr.io/etacassiopeia/rift-lint .

Build from source

cargo build --release -p rift-lint
./target/release/rift-lint --help

As a library

Add to your Cargo.toml:

[dependencies]
rift-lint = { path = "../rift-lint", default-features = false }

CLI Usage

# Lint a directory of imposters
rift-lint ./imposters/

# Lint a single file
rift-lint ./imposters/my-service.json

# Show only errors (hide warnings)
rift-lint ./imposters/ --errors-only

# JSON output for CI/CD
rift-lint ./imposters/ --output json

# Strict mode - treat warnings as errors
rift-lint ./imposters/ --strict

# Auto-fix issues where possible
rift-lint ./imposters/ --fix

Options

Option Short Description Default
<PATH> Path to file or directory (required)
--fix -f Auto-fix issues false
--output -o Output format: text, json text
--errors-only -e Hide warnings false
--verbose -v Verbose output false
--strict -s Warnings become errors false

Library Usage

use rift_lint::{lint_file, lint_json, lint_value, LintOptions};
use std::path::Path;

// Lint a file
let result = lint_file(Path::new("imposter.json"), &LintOptions::default());
if result.has_errors() {
    for issue in &result.issues {
        eprintln!("{}: {}", issue.code, issue.message);
    }
}

// Lint a JSON string (useful for in-memory validation)
let json = r#"{"port": 4545, "protocol": "http", "stubs": []}"#;
let result = lint_json(json, "inline", &LintOptions::default());

// Lint already-parsed JSON
let value: serde_json::Value = serde_json::from_str(json).unwrap();
let result = lint_value(&value, "inline", &LintOptions::default());

Validation Rules

Errors

Code Description
E001 Invalid JSON / file read error
E002 Port conflict
E003 Missing required field
E004 Invalid protocol
E005 Port out of range
E006-E033 Various structural errors
E034 Multiple predicate operations in one predicate

Warnings

Code Description
W001 Privileged port
W002-W009 Various potential issues

Info

Code Description
I001 Mountebank slice notation in JSONPath
I002 Proxy targets localhost

Feature Flags

  • cli (default) - Enables CLI binary with clap
  • javascript - Enables JavaScript syntax validation with boa_engine
# Library only (no CLI dependencies)
[dependencies]
rift-lint = { path = "../rift-lint", default-features = false }

# With JavaScript validation
[dependencies]
rift-lint = { path = "../rift-lint", features = ["javascript"] }

License

Apache-2.0

Commit count: 0

cargo fmt