Skip to main content

Desired-state infrastructure convergence engine

Project description

verg

Desired-state infrastructure convergence engine. A fast, stateless alternative to Ansible, built in Rust.

Features

  • Fast — pushes a single static binary to targets over SSH, executes locally. No Python, no per-task SSH round-trips.
  • Predictable — stateless convergence. Every run checks reality and converges. No state files.
  • Simple — TOML declarations. No YAML, no Jinja2, no variable precedence maze.
  • Agent-friendly--json output, schema command, structured exit codes. Built for both humans and AI agents.

Quick Start

# Install
cargo install verg

# Initialize a project
verg init

# Edit hosts and state
vim verg/hosts.toml
vim verg/state/base.toml

# Preview changes
verg diff --targets all

# Apply
verg apply --targets all

How It Works

  1. Declare desired state in TOML files under verg/state/
  2. Define hosts in verg/hosts.toml with group assignments
  3. Run verg apply — the tool pushes a binary to each target over SSH, which checks current state and converges

Resource Types

Type Description
pkg System packages (apt, dnf, pacman — auto-detected)
file Files and directories (content, permissions, ownership)
service Systemd services (running/stopped, enabled/disabled)
cmd Run a command (requires idempotency guard)
user System users (create/remove)

Example

# verg/hosts.toml
[hosts.web1]
address = "192.168.1.10"
user = "root"
groups = ["web"]

# verg/state/web.toml
targets = ["web"]

[resource.pkg.nginx]
name = "nginx"
state = "present"

[resource.file.nginx-conf]
path = "/etc/nginx/nginx.conf"
content = "server { listen {{ http_port }}; }"
after = ["pkg.nginx"]

[resource.service.nginx]
name = "nginx"
state = "running"
enabled = true
after = ["file.nginx-conf"]

Commands

Command Description
verg apply -t <targets> Converge targets to desired state
verg diff -t <targets> Show what would change (dry-run)
verg check -t <targets> Verify targets match desired state
verg schema Print resource type schemas as JSON
verg init Scaffold a new project
verg completions <shell> Generate shell completions

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

verg-0.2.0.tar.gz (38.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

verg-0.2.0-py3-none-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

verg-0.2.0-py3-none-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

verg-0.2.0-py3-none-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

verg-0.2.0-py3-none-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file verg-0.2.0.tar.gz.

File metadata

  • Download URL: verg-0.2.0.tar.gz
  • Upload date:
  • Size: 38.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2e87f58a8c4dcb1077d0c8f0e08398506d6518db1e1951a64432d8f06d3a5ea0
MD5 beed0fd313364c3d7f9c0244536c4bc6
BLAKE2b-256 b0359c2dfbda03a47d1ca5064764cb90f8504ebffbea9b0ae2ca0a5e2c160f21

See more details on using hashes here.

File details

Details for the file verg-0.2.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: verg-0.2.0-py3-none-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: Python 3, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.2.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 657057c2428c7cbfe49ac21b5b2075a845f3dbc112eb63912c6667c15e4150dd
MD5 2a2487292317c0edfbfd7c2db0e92a47
BLAKE2b-256 c2d6e9517fdb118da4149e79acdf4ef572a73617661a7059c1016aea6bbd4d8e

See more details on using hashes here.

File details

Details for the file verg-0.2.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for verg-0.2.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3a86d520eef34128767d1c72888c840a0c6d62a79f5e4bc293dc01ef9770b5e6
MD5 03231190f607a497a2bc3a2acfc19f65
BLAKE2b-256 df403c08506ec69bbce7fcbf289c7c1e230925aeb0ad078944b22df4b1c51e7d

See more details on using hashes here.

File details

Details for the file verg-0.2.0-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: verg-0.2.0-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for verg-0.2.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4922e2d84116bfec7ce2658646833fcaee2c5cb2c90ae7295b47c8c14fa17a4f
MD5 dfbed9c55a8dfef53b55f0309a710c1f
BLAKE2b-256 043fd7d8c218cf863d8d030fc5a3c4dcbbf4e3fab3e3998c066ed24283a5173f

See more details on using hashes here.

File details

Details for the file verg-0.2.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for verg-0.2.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d60b66e03db839e47fc00910739090a1926d5e337ff24ed88ed417bd57ea8ab5
MD5 6f484a2fc63ad4d84c35c7191ee6fe62
BLAKE2b-256 1b7bc67dadd9ea30e4485151033e3b70ebe84f6583e1618b794c07c02908158b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page