config-forge 0.4.0

A CLI tool for converting, inspecting, and validating configuration files.
Documentation

ConfigForge

ConfigForge is a Rust CLI tool for converting, inspecting, validating, querying, and safely editing configuration files.

The first implementation milestone supports conversion between:

  • JSON
  • TOML
  • YAML

Install

cargo install config-forge

Usage

config-forge --help
config-forge inspect Cargo.toml
config-forge convert app.toml -o app.yaml
config-forge convert app.yaml --to json
config-forge convert app.toml --to yaml --check
config-forge validate app.yaml
config-forge get app.toml server.port
config-forge get app.yaml items.0.name
config-forge get app.toml server --to yaml
config-forge set app.yaml server.host prod -o app.updated.yaml
config-forge set app.json server.port 9090 --value-format json -o app.updated.json
config-forge delete app.yaml server.debug -o app.updated.yaml
config-forge merge base.yaml override.yaml -o merged.yaml
config-forge diff old.toml new.toml

When writing converted content to stdout, pass --to so the output format is explicit:

config-forge convert app.toml --to json

ConfigForge does not overwrite existing output files by default. Pass --overwrite when replacing a file is intentional:

config-forge convert app.toml -o app.yaml --overwrite

get reads values by dot path. Numeric path segments index arrays:

config-forge get app.yaml server.port
config-forge get app.yaml items.0.name

set and delete update existing paths only and require an output file. They do not modify the input file in place:

config-forge set app.yaml server.host prod -o app.updated.yaml
config-forge set app.json server.port 9090 --value-format json -o app.updated.json
config-forge delete app.yaml items.0 -o app.updated.yaml

By default, set treats the replacement as a string. Pass --value-format json for numbers, booleans, arrays, objects, or null.

merge recursively combines object values. Override scalar values and arrays replace the base value:

config-forge merge base.yaml override.yaml -o merged.yaml
config-forge merge base.yaml override.json -o merged.toml --to toml

diff prints path-oriented changes:

config-forge diff old.yaml new.yaml

Example output:

changed server.port
removed server.debug
added server.timeout

Package Check

Before publishing a release build:

cargo publish -p config-forge --dry-run

Release tags use this format:

git tag config-forge-v0.4.0
git push <remote> config-forge-v0.4.0