id = "rustic"
name = "rustic"
homepage = "https://rustic.cli.rs"
description = "rustic is a backup tool that provides fast, encrypted, deduplicated backups."
executables = ["rustic"]
[dotfiles]
paths = [
"[configHome]/rustic/rustic.toml",
"[appData]/rustic/rustic.toml",
"%APPDATA%/rustic/rustic.toml",
]
exclude = []
secret = []
[[dotfiles.secret_paths]]
file = [
"[configHome]/rustic/rustic.toml",
"[appData]/rustic/rustic.toml",
"%APPDATA%/rustic/rustic.toml",
]
match = { key_path = ["repository.password", "repository.key"] }
[commands]
format = 1
label = "rustic"
description = "Back up directories to a rustic repository. Repository, password and dry-run options go before the subcommand; other subcommands (restore, forget, prune, check) are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "config"
kind = "manual"
url = "https://github.com/rustic-rs/rustic/blob/main/config/README.md"
revision = "2026-10-27"
evidence = """
| dry-run | If true, performs a dry run without making any changes. | --dry-run, -n |
| repository | The path to the repository. Required. | -r |
| password-file | Path to a file containing the password for the repository. | --password-file, -p |
| password-command | Command to retrieve the password for the repository. | --password-command |
"""
[[commands.field]]
id = "repository"
label = "Repository"
description = "Path to the repository."
type = "string"
option = ["-r"]
sources = ["config"]
[[commands.field]]
id = "password_file"
label = "Password file"
type = "path"
option = ["--password-file", "-p"]
path = { kind = "file", role = "input" }
sources = ["config"]
[[commands.field]]
id = "password_command"
label = "Password command"
type = "string"
option = ["--password-command"]
sources = ["config"]
[[commands.field]]
id = "dry_run"
label = "Dry run"
type = "boolean"
option = ["--dry-run", "-n"]
sources = ["config"]
[[commands.group]]
id = "basic"
label = "Repository"
fields = ["repository", "password_file", "password_command", "dry_run"]
[[commands.subcommand]]
path = ["backup"]
label = "Create a snapshot"
description = "Back up files and directories. Pass the repository options at the top level."
[[commands.subcommand.source]]
id = "config"
kind = "manual"
url = "https://github.com/rustic-rs/rustic/blob/main/config/README.md"
revision = "2026-10-27"
evidence = """
| description | Description for the snapshot. | --description |
| git-ignore | If true, use .gitignore rules to exclude files from the backup in the source directory. | --git-ignore |
| globs | Array of globs specifying what to include/exclude in the backup. | --glob |
| host | Host name used in the snapshot. | --host |
| init | If true, initialize repository if it doesn't exist, yet. | --init |
| label | Set label for the snapshot. | --label |
| one-file-system | If true, only backs up files from the same filesystem as the source. | --one-file-system |
| skip-if-unchanged | Skip saving of the snapshot if it is identical to the parent. | --skip-identical-parent |
"""
[[commands.subcommand.field]]
id = "sources"
label = "Paths to back up"
type = "path"
position = 0
multiple = true
min = 0
path = { kind = "any", role = "input", must_exist = true }
sources = ["config"]
[[commands.subcommand.field]]
id = "glob"
label = "Include/exclude glob"
description = "Prefix a glob with ! to exclude."
type = "string"
option = ["--glob"]
multiple = true
sources = ["config"]
[[commands.subcommand.field]]
id = "label"
label = "Label"
type = "string"
option = ["--label"]
sources = ["config"]
[[commands.subcommand.field]]
id = "description"
label = "Description"
type = "string"
option = ["--description"]
sources = ["config"]
[[commands.subcommand.field]]
id = "host"
label = "Host name"
type = "string"
option = ["--host"]
sources = ["config"]
[[commands.subcommand.field]]
id = "init"
label = "Initialize repository if missing"
type = "boolean"
option = ["--init"]
sources = ["config"]
[[commands.subcommand.field]]
id = "git_ignore"
label = "Respect .gitignore"
type = "boolean"
option = ["--git-ignore"]
sources = ["config"]
[[commands.subcommand.field]]
id = "one_file_system"
label = "Stay on one filesystem"
type = "boolean"
option = ["--one-file-system"]
sources = ["config"]
[[commands.subcommand.field]]
id = "skip_identical_parent"
label = "Skip if unchanged"
type = "boolean"
option = ["--skip-identical-parent"]
sources = ["config"]
[[commands.subcommand.task]]
id = "backup"
label = "Back up paths"
fields = ["sources", "glob", "label", "git_ignore", "one_file_system", "skip_identical_parent"]
required = ["sources"]
[[commands.subcommand.task]]
id = "first-backup"
label = "First backup (create repository)"
set = { init = [true] }
lock = ["init"]
fields = ["sources", "init", "label", "glob"]
required = ["sources"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["sources", "glob", "label", "init"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["description", "host", "git_ignore", "one_file_system", "skip_identical_parent"]