Skip to content

CLI Tools

Command-line utilities for working with TOML files.

toml-validate

Validate TOML file syntax from the command line. Useful for CI/CD pipelines, pre-commit hooks, and editor integrations.

Installation

The validator is included with the package:

bash
composer require php-collective/toml

After installation, the command is available at vendor/bin/toml-validate.

Usage

bash
# Validate a file
vendor/bin/toml-validate config.toml

# Pipe from stdin
cat config.toml | vendor/bin/toml-validate

# Quiet mode (no output on success)
vendor/bin/toml-validate config.toml -q

# With JSON Schema validation
vendor/bin/toml-validate config.toml --schema=schema.json

Exit Codes

CodeMeaning
0Valid TOML
1Invalid TOML (syntax errors)
2Schema validation failed
3File not found or read error

Error Output

When validation fails, the tool displays formatted error messages with context:

bash
$ vendor/bin/toml-validate broken.toml
Syntax errors in broken.toml:

Parse error: Expected value

  3 | [server]
  4 | host = "localhost"
  5 | port =
    |        ^

Hint: A value is required after '='

CI/CD Integration

GitHub Actions

yaml
- name: Validate TOML configs
  run: |
    for file in config/*.toml; do
      vendor/bin/toml-validate "$file"
    done

GitLab CI

yaml
validate-config:
  script:
    - vendor/bin/toml-validate config.toml

Pre-commit Hook

Add to .git/hooks/pre-commit:

bash
#!/bin/bash
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.toml$'); do
    if ! vendor/bin/toml-validate "$file"; then
        echo "TOML validation failed for $file"
        exit 1
    fi
done

Schema Validation

For structural validation beyond syntax, use the --schema flag with a JSON Schema file:

bash
vendor/bin/toml-validate config.toml --schema=config-schema.json

WARNING

Schema validation requires the justinrainbow/json-schema package:

bash
composer require justinrainbow/json-schema

Example schema (config-schema.json):

json
{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["database"],
  "properties": {
    "database": {
      "type": "object",
      "required": ["host", "port"],
      "properties": {
        "host": { "type": "string" },
        "port": { "type": "integer", "minimum": 1, "maximum": 65535 }
      }
    }
  }
}

Scripting Examples

Check validity in scripts:

bash
# Exit on invalid TOML
vendor/bin/toml-validate config.toml || exit 1

# Conditional logic
if vendor/bin/toml-validate config.toml -q; then
    echo "Config is valid"
else
    echo "Config has errors"
fi

Validate multiple files:

bash
# Validate all TOML files in a directory
find . -name "*.toml" -exec vendor/bin/toml-validate {} \;

# Stop on first error
find . -name "*.toml" | while read -r file; do
    vendor/bin/toml-validate "$file" || exit 1
done

Released under the MIT License.