CLI tool
creativeprojects/resticprofile avatar
creativeprojects/resticprofile

resticprofile Configuration and Scheduling for Restic

Configuration profiles manager and scheduler for restic backup

1,445 stars72 forksGoGPL-3.0

At a glance

What is it?
resticprofile manages restic through reusable configuration profiles, sequential groups, retention, checks, hooks, and native schedulers. It fits operators who want policy in configuration files rather than long command lines, but it remains a wrapper around restic rather than a replacement for it.
Who is it for?
Adopt resticprofile when backup behavior must be shared across hosts, expressed in versionable files, or managed through systemd, crond, launchd, or Windows Task Scheduler. Do not adopt it for a single ad hoc restic invocation, and do not treat profile configuration as a substitute for restic's repository password, encryption key, and recovery testing.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 105 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why resticprofile Exists Around Restic

resticprofile addresses a configuration problem rather than introducing a new backup format. Its README calls it the link between a configuration file and the restic backup command line. That distinction matters because restic remains responsible for repository access and backup operations, while resticprofile turns recurring options, environment variables, and command sequences into named profiles. The intended users are system operators, administrators, and developers who run restic repeatedly and want backup behavior stored outside command history or improvised scripts.

A profile can contain options that would otherwise be reconstructed for every invocation. Multiple profiles can live in one configuration file, and those profiles can inherit options from other profiles. Groups provide a separate sequencing mechanism, allowing related profiles to run one after another. This arrangement is useful when, for example, retention or repository checks must accompany different backup jobs, but it also means configuration design becomes part of backup administration. Incorrect inheritance or ordering can propagate across jobs even when the underlying restic command is valid.

The configuration may use TOML, JSON, YAML, or HCL, selected through the corresponding `.toml` or `.conf`, `.json`, `.yaml`, or `.hcl` extension. Templates are also supported. These options give resticprofile more reach than a small shell wrapper, although the README does not document template syntax, validation behavior, or every supported key. Users evaluating it will need the linked configuration reference rather than relying on the short README alone.

Profile, Group, Retention, and Hook Processing

The documented execution model is broader than a one-command alias. A resticprofile run can execute a backup, apply a `retention` section with restic's forget command before or after it, and run a repository check before or after it. Shell commands can also execute before or after a profile, which the README identifies as useful for mounting and unmounting backup disks. An error hook can run when the profile fails. These hooks make resticprofile an orchestration layer around the backup operation.

Groups are documented as collections of profiles run sequentially. Since the README does not describe fail-fast or continuation semantics in this context, operators should not assume how a later group member behaves after an earlier member fails. That behavior needs verification in the generated command or linked documentation. The distinction matters for jobs with dependencies, such as mounting storage, writing a backup, unmounting storage, and applying retention.

The tool also exposes restic operations beyond backup. Features listed for HTTP hooks refer to messages before and after jobs including backup, forget, check, prune, and copy. This indicates that the wrapper models several restic workflows as schedulable actions. It also supports sending a backup stream through `stdin`, stale-lock clearing, process priorities, secondary repository initialization with `copy-chunker-params`, and random key generation. These features extend the operational surface, so adoption should follow an inventory of the actual jobs required by the host, not a general preference for more orchestration.

Scheduling Across systemd, crond, launchd, and Windows

Scheduling is one of resticprofile's clearest reasons to exist. The README states that backups, retention, and checks can be scheduled through systemd, crond, launchd, or Windows Task Scheduler. Based on the repository layout, the project includes platform-specific packages such as `crond/` and `darwin/`, while `coreos/go-systemd/v22` is declared in `go.mod`. The repository also includes scheduling tests and `commands_schedule.go`, indicating that scheduling is implemented inside the command rather than being left entirely to external scripts.

This native coverage is more relevant than claiming that every restic workflow is portable without changes. A schedule still depends on how the target operating system launches commands, resolves paths, supplies environment variables, and handles power or sleep states. resticprofile can avoid scheduling a job while a system is on battery and can prevent idle sleeping, but the README does not specify which platforms support each check. A Linux profile should not be assumed to behave identically under launchd or Task Scheduler.

The scheduler integration should also be reviewed from a secret-handling perspective. Repository credentials, encryption keys, and environment variables must reach both interactive and scheduled runs. The README does not document a secret store or a complete credential-loading procedure, so it would be unsafe to infer that scheduling automatically solves secret distribution. The generated schedule and its runtime user need inspection before a production profile is enabled.

Monitoring Signals and Failure Handling

resticprofile provides several monitoring mechanisms rather than limiting itself to exit codes. It can generate a status file for monitoring software, export a Prometheus file after a backup, or send that report to a Pushgateway. It can also send resticprofile logs to a syslog server. Shell commands can run in the background when non-fatal errors are detected, while HTTP hooks can report the start and completion of successful or failed jobs.

These outputs are complementary. A status file can be consumed by a local monitor, while Prometheus data can be scraped or pushed for broader metrics. HTTP hooks can support notification workflows, although the README names no particular service or payload schema. syslog support may fit hosts that already centralize logs, but it does not itself prove that restic's backup data is healthy. Repository integrity and recoverability remain separate concerns.

The wrapper can run a restic check before or after backup and can execute an error command after failure. That makes failure handling configurable, but it also transfers responsibility for interpreting the results. Non-fatal errors and fatal profile failures are presented as distinct cases in the feature list. Administrators should decide which condition should page someone, which should create a metric, and which should merely leave evidence. Without those decisions, adding every notification mechanism may produce overlapping alerts or insufficient context.

Installing resticprofile and Starting a Profile

The README does not provide a self-contained package installation command, version pin, or binary naming instructions. Instead, it directs new users to the getting started section at `https://creativeprojects.github.io/resticprofile/configuration/getting_started/index.html`. The repository contains an `install.sh` entry and a `Makefile`, but the README does not document installer options or show a complete install target. The README also links to the full documentation at `https://creativeprojects.github.io/resticprofile/`. A first installation should therefore follow that documentation rather than an improvised command.

The project's source is Go, and `go.mod` declares Go 1.26.5 as its language version. It also declares the module path `github.com/creativeprojects/resticprofile`. Those are source-build facts, not a complete installation procedure. Before installing a binary, verify that the target operating system and architecture are covered by the release assets available to you, and confirm the source of the download.

For a first real use, begin with one profile rather than a group. Start from the getting started documentation, create a configuration using a supported file extension, and enter the minimum restic repository, source, and credential settings required for that host. Then use resticprofile's documented help path to confirm the supported command syntax. The README states that both restic and resticprofile help are available through the `help` command or `-h` flag, but it does not provide a complete configuration example suitable for quoting here. After running the single profile interactively, inspect the exit result and generated status output, and only then schedule backups, checks, or retention.

Maintenance, Upgrades, and GPL-3.0 Obligations

The repository is not archived. Its last push was on 2026-07-10, which is within six months of 2026-10-17, but that fact alone does not guarantee compatibility for every deployment. Recent releases include v0.33.1 on 2026-04-15, v0.33.0 on 2026-04-04, and v0.32.0 on 2025-09-26. An upgrade can therefore affect profile parsing, generated schedules, hooks, or the behavior of newer restic releases. Configuration files should be reviewed against the version-specific documentation rather than upgraded without checking.

The module and repository require a relatively recent Go toolchain and contain many operational dependencies, including systemd, Prometheus, FUSE, scheduler, and configuration libraries. This does not mean every host must compile the source, but source builds create a toolchain and dependency maintenance obligation. Prebuilt releases can reduce that work, although upgrade verification remains necessary.

The repository identifies its license as GPL-3.0. That is relevant when deciding how to distribute a modified binary or incorporate project code into another distributed program. This article does not provide legal advice. The applicable `LICENSE` file and the intended distribution model should govern compliance review.

Direct Restic Commands as the Simpler Alternative

The clearest alternative is invoking restic directly from a shell script or from the operating system's scheduler. That approach avoids profile inheritance, configuration parsing, hooks, groups, and resticprofile's monitoring layer. For one host with one stable backup command, it can be easier to inspect and reproduce because the executed operation is not translated through another configuration model.

resticprofile takes a different approach. Its value appears when several related jobs share parameters, need different retention or check policies, run as sequential groups, or must be scheduled through multiple platform-specific mechanisms. Its trade-off is an additional layer where configuration semantics, templates, generated commands, and scheduler integration must be understood. Direct restic commands do not provide resticprofile's profile-oriented management, but they also do not add its configuration surface.

This comparison favors resticprofile for shared backup policy and repeatability across hosts. It disfavors resticprofile for a one-off backup where documentation, secrets, and recovery are already straightforward. The deciding factor should be operational complexity, not the number of advertised features.

Editorial conclusion

Adopt resticprofile when backup behavior must be shared across hosts, expressed in versionable files, or managed through systemd, crond, launchd, or Windows Task Scheduler. Do not adopt it for a single ad hoc restic invocation, and do not treat profile configuration as a substitute for restic's repository password, encryption key, and recovery testing. Before deployment, verify the generated schedule and wrappers on the target operating system, confirm that `restic` is available to the scheduler's environment, and perform a restore from the intended repository and credentials.

Frequently asked questions

What configuration formats does resticprofile support?

resticprofile supports TOML, JSON, YAML, and HCL. The README associates TOML with `.toml` or `.conf`, JSON with `.json`, YAML with `.yaml`, and HCL with `.hcl`.

Which schedulers can resticprofile use?

The README lists systemd, crond, launchd, and Windows Task Scheduler for scheduling backups, retention, and checks. It does not document one identical command sequence for all four platforms.

Does resticprofile replace restic?

No. The README describes resticprofile as the link between a configuration file and the restic command line. It manages profiles and automation around restic rather than replacing restic's backup and repository implementation.

Official sources

  1. creativeprojects/resticprofile on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/creativeprojects-resticprofile.svg)](https://hysenlabs.com/projects/creativeprojects-resticprofile)

Was this useful?