fast-yaml-cli

Crates.iofast-yaml-cli
lib.rsfast-yaml-cli
version0.5.0
created_at2025-12-29 18:06:59.201872+00
updated_at2026-01-19 04:02:44.036795+00
descriptionFast YAML command-line processor with validation and linting
homepage
repositoryhttps://github.com/bug-ops/fast-yaml
max_upload_size
id2011061
size207,553
Andrei G (bug-ops)

documentation

README

fy

Crates.io CI License MSRV

Fast YAML command-line processor with validation and linting. Built on fast-yaml for high-performance YAML 1.2.2 processing.

Installation

From crates.io

cargo install fast-yaml-cli

[!TIP] Use cargo binstall fast-yaml-cli for faster installation without compilation.

From source

git clone https://github.com/bug-ops/fast-yaml
cd fast-yaml
cargo install --path crates/fast-yaml-cli

Verify installation

fy --version
fy --help

Usage

fy [OPTIONS] [FILE] <COMMAND>

Parse and validate

# Parse from file
fy parse config.yaml

# Parse from stdin
echo "name: test" | fy parse

# Show parse statistics
fy parse --stats large.yaml

Format YAML

Single file:

# Format to stdout
fy format messy.yaml

# Custom indentation (2-8 spaces)
fy format --indent 4 --width 100 config.yaml

# Format in-place
fy format -i config.yaml

Batch mode (directories, globs, multiple files):

# Format entire directory (recursive)
fy format -i src/

# Format with glob pattern
fy format -i "configs/**/*.yaml"

# Multiple files
fy format -i file1.yaml file2.yaml file3.yaml

# Non-recursive directory formatting
fy format -i --no-recursive configs/

# Parallel processing with 8 workers
fy format -i -j 8 large-project/

# Read file paths from stdin
find . -name "*.yaml" | fy format -i --stdin-files

[!TIP] Batch mode automatically detects when processing multiple files, directories, or glob patterns. Use -j N to control parallelism (default: auto-detect CPU cores).

Include/exclude patterns:

# Format all YAML except tests
fy format -i --exclude "**/tests/**" configs/

# Format only production configs
fy format -i --include "prod-*.yaml" configs/

# Combine patterns (respects .gitignore by default)
fy format -i --include "*.yaml" --exclude "draft-*" ./

Dry run and output control:

# Preview changes without modifying files
fy format -n configs/

# Quiet mode (only show errors)
fy format -i -q large-project/

# Verbose mode (show each file processed)
fy format -i -v configs/

Convert formats

# YAML to JSON
fy convert json config.yaml > config.json

# JSON to YAML
fy convert yaml data.json > data.yaml

# Compact JSON (no pretty-print)
fy convert json --pretty=false app.yaml

Lint YAML

# Lint with default rules
fy lint config.yaml

# Custom rules
fy lint --max-line-length 100 --indent-size 2 app.yaml

# JSON output for IDE integration
fy lint --format json config.yaml

Commands

Command Description
parse Parse and validate YAML syntax
format Format YAML with consistent style
convert Convert between YAML and JSON
lint Lint YAML with diagnostics

Options

Common Options

Option Short Description Default
--in-place -i Edit file in-place -
--output -o Write to file stdout
--format -f Output format (yaml/json/compact) yaml
--no-color - Disable colored output -
--quiet -q Suppress non-error output -
--verbose -v Enable verbose output -

Batch Mode Options

Option Short Description Default
--jobs -j Number of parallel workers (0 = auto) auto-detect
--stdin-files - Read file paths from stdin -
--include - Include pattern (glob) all files
--exclude - Exclude pattern (glob) none
--no-recursive - Disable recursive directory traversal recursive
--dry-run -n Preview changes without modifying -

[!NOTE] Batch mode activates automatically when processing multiple paths, directories, glob patterns, or when using --stdin-files, --include, --exclude, or --jobs.

Features

Feature Default Description
colors Yes Colored terminal output
linter Yes YAML linting capabilities
all - All features enabled

Build with minimal features:

cargo build --release --no-default-features

[!NOTE] The linter feature adds the lint command. Without it, only parse, format, and convert are available.

Exit Codes

Code Meaning
0 Success
1 Parse error
2 Lint errors found
3 I/O error
4 Invalid arguments

Examples

Pipeline usage

# Validate all YAML files
find . -name "*.yaml" -exec fy parse {} \;

# Format and convert in one pipeline
cat config.yaml | fy format | fy convert json > config.json

# Check YAML before committing
git diff --name-only --cached -- '*.yaml' | xargs -I {} fy lint {}

CI/CD integration

# GitHub Actions
- name: Validate YAML
  run: |
    cargo install fast-yaml-cli
    find . -name "*.yaml" -exec fy lint {} \;

Performance

Built on fast-yaml-core for optimal performance:

  • Startup time: ~5ms
  • Binary size: ~1MB (stripped)
  • Batch processing: Multi-threaded with automatic CPU detection
  • Streaming: Memory-mapped I/O for files >512KB
  • Full YAML 1.2.2 compliance

[!TIP] Batch mode provides 3-6x speedup on multi-core systems when processing 100+ files. Use -j N to control worker count.

License

Licensed under MIT or Apache-2.0 at your option.

Commit count: 232

cargo fmt