Main commands

Create snapshots

Each snapshot has a channel, which is a non-unique string that you choose when you call rekkord save. Please note that there is a maximum snapshot channel length (256 bytes).

export REKKORD_CONFIG_FILE=/path/to/config.ini
rekkord save <channel> <path1> <path2> ...

The command will give you the object ID (OID) of the snapshot once it finishes. You can retrieve the OID later with rekkord snapshots.

List snapshots

export REKKORD_CONFIG_FILE=/path/to/config.ini
rekkord snapshots

The output looks something like this:

# <channel>                              <date>

webserver                                2025-09-10 03:38:31 +0200
  + OID: MC8AD390511AAA81C4BA9FEDCDB94C2DFFE05035B69FFC64501FC210D55A8BEA4
  + Size: 2.407 GB
  + Stored: 1.255 GB
  + Added: 1.107 GB
media                                    2025-09-11 03:53:25 +0200
  + OID: M8B5FB7CB0C90BABDE37FA2A43B17721D16AAE5D7803A88E151DFCC63CAB14EFD
  + Size: 1.231 GB
  + Stored: 1.152 GB
  + Added: 1.107 GB
webserver                                2025-09-10 03:14:08 +0200
  + OID: M898DB3E9C1229170D6DBB1B1BAA7BF663A978F0B11655F05A7FBD93C1BEB7329
  + Size: 2.407 GB
  + Stored: 1.255 GB
  + Added: 2.411 MB
media                                    2025-09-11 04:01:57 +0200
  + OID: M1B0A86B11F48E9028EAF970B751FA727226168EF0939D625076FFF49DABCF8B5
  + Size: 1.236 GB
  + Stored: 1.153 GB
  + Added: 54.75 MB

Use --format JSON or --format XML to get this list in a JSON or XML format.

Each object ID (or OID) contains a single-letter prefix and a BLAKE3 hash in hexadecimal form.

Explore snapshot

You can list the directories and files in a snapshot with the rekkord list command. You can either use the unique object ID, or provide a snapshot channel, in which case rekkord will use the most recent snapshot that matches it.

export REKKORD_CONFIG_FILE=/path/to/config.ini
rekkord list <identifier>

You can use an object ID (OID) or a snapshot channel as the identifier. In addition, you can specify a path to locate an object inside the main snapshot or directory, separated with a colon.

Here are two examples without path:

Here are two examples with an additional path:

The output looks something like this:

# <type> <name>                                                   <mode> <date>                      <size>

[S] vpn/opt                                                              [2023-12-15 06:18:10 +0100]
  [D] opt/                                                        (0755) [2023-10-05 17:03:38 +0200]

You can recursively list the content with rekkord list <identifier> --recurse flag:

# <type> <name>                                                   <mode> <date>                      <size>

[S] vpn/opt                                                              [2023-12-15 06:18:10 +0100]
  [D] opt/                                                        (0755) [2023-10-05 17:03:38 +0200]
    [D] certificates/                                             (0750) [2023-12-13 09:43:10 +0100]
      [F] cloud.intra.example.com.key                             (0640) [2023-12-13 09:43:10 +0100] 241 B
      [F] forum.intra.example.com.crt                             (0640) [2023-12-13 09:43:10 +0100] 5.269 kB
    [D] agnos/                                                    (0755) [2023-10-02 12:38:29 +0200]
      [D] certificates/                                           (0750) [2023-10-02 12:38:50 +0200]
        [F] cloud.intra.example.com.key                           (0640) [2023-11-20 23:26:06 +0100] 241 B
        [F] forum.intra.example.com.crt                           (0640) [2023-11-20 23:26:07 +0100] 5.269 kB
      [F] agnos                                                   (0755) [2023-09-21 16:53:54 +0200] 11.24 MB
      [F] agnos.toml                                              (0644) [2023-10-02 12:38:28 +0200] 1.893 kB
      [D] accounts/                                               (0750) [2023-09-21 16:53:55 +0200]
        [F] main.key                                              (0644) [2023-09-21 16:53:56 +0200] 3.243 kB
    [D] rekkord/                                                  (0755) [2023-12-13 15:38:23 +0100]
      [F] ENV                                                     (0600) [2023-10-05 17:03:45 +0200] 186 B
      [F] rekkord.sh                                              (0755) [2023-12-13 15:37:58 +0100] 102 B
      [F] rekkord.deb                                             (0644) [2023-12-11 20:45:18 +0100] 5.348 MB
    [D] wireguard/                                                (0755) [2023-09-21 14:28:46 +0200]
      [D] safe/                                                   (0755) [2023-09-21 15:59:39 +0200]
        [F] docker-compose.yml                                    (0644) [2023-09-21 14:28:47 +0200] 408 B
        [F] ENV                                                   (0600) [2023-09-21 15:59:39 +0200] 209 B
        [D] etc/                                                  (0700) [2023-09-21 14:29:06 +0200]
          [F] wg0.json                                            (0640) [2023-12-10 06:00:19 +0100] 7.969 kB
          [F] wg0.conf                                            (0600) [2023-12-10 06:00:19 +0100] 4.025 kB
    [D] rclone/                                                   (0755) [2023-10-05 15:32:04 +0200]
      [F] rclone.cfg                                              (0644) [2023-10-05 15:32:04 +0200] 3.705 kB
      [F] rclone.deb                                              (0644) [2023-09-21 14:26:52 +0200] 18.55 MB
    [D] coredns/                                                  (0755) [2023-12-13 09:42:56 +0100]
      [F] coredns.tar.gz                                          (0644) [2023-09-21 16:50:53 +0200] 15.79 MB
      [F] coredns.conf                                            (0644) [2023-09-21 16:50:56 +0200] 132 B
      [F] domains.zone                                            (0644) [2023-12-13 09:42:55 +0100] 505 B
      [F] coredns                                                 (0755) [2023-02-06 19:27:11 +0100] 53.41 MB
    [D] nginx/                                                    (0755) [2023-12-11 20:44:06 +0100]
      [D] ssl/                                                    (0755) [2023-12-11 20:43:55 +0100]
        [D] webroot/                                              (0755) [2023-09-21 14:28:34 +0200]
          [D] vpn.example.com/                                    (0755) [2023-11-20 19:10:04 +0100]
        [F] dhparam.pem                                           (0644) [2023-09-21 14:28:21 +0200] 424 B
        [D] letsencrypt/                                          (0755) [2023-12-11 20:44:22 +0100]
          [L] vpn.example.com.crt                                        [2023-12-11 20:44:22 +0100]
          [L] 57.128.60.175.key                                          [2023-12-11 20:44:07 +0100]
          [L] vpn.example.com.key                                        [2023-12-11 20:44:19 +0100]
          [L] 57.128.60.175.crt                                          [2023-12-11 20:44:07 +0100]
        [D] internal/                                             (0755) [2023-12-13 09:43:27 +0100]
          [F] ca.crt                                              (0644) [2023-12-13 09:43:24 +0100] 1.883 kB
          [F] vpn.crt                                             (0644) [2023-12-13 09:43:26 +0100] 1.891 kB
          [F] vpn.key                                             (0644) [2023-12-13 09:43:25 +0100] 1.704 kB
      [F] nginx.conf                                              (0644) [2023-12-11 20:44:06 +0100] 7.086 kB

Use --format JSON or --format XML to get the file tree in a JSON or XML format.

Restore snapshot

Use the rekkord restore command to restore the files from a snapshot onto the local filesystem. You can either use the unique object ID, or provide a snapshot channel, in which case rekkord will use the most recent snapshot that matches it.

export REKKORD_CONFIG_FILE=/path/to/config.ini
rekkord restore <identifier> <destination>

Read more about identifiers in the exploration section.

Mount snapshot

You can also use rekkord mount <identifier> <mountpoint> to mount a snapshot or a directory as a read-only filesystem. You can either use the unique object ID, or provide a snapshot channel, in which case rekkord will use the most recent snapshot that matches it.

export REKKORD_CONFIG_FILE=/path/to/config.ini
rekkord mount <identifier> <mountpoint>

Read more about identifiers in the exploration section.

This mode has several limitations for now:

But the goal is to reach performance similar to other commands once Rekkord 1.0 is released.

Hooks

New in Rekkord 0.97

Rekkord supports hooks, which are commands that are executed before and after some actions.

To use hooks, you must set a directory for each type of hook in the configuration file. When Rekkord runs the corresponding command (such as rekkord save for save hooks), it will run the hooks it finds in alphabetical order.

For each command there are two hook phases:

All hook scripts run during the corresponding phase, even if one fails. Rekkord executes them all in order, before aborting if any of them has failed.

Pre-save

These hooks run before a snapshot gets created by rekkord save.

Set the directory where pre-save hook commands exist with PreSaveDirectory in the Hooks section of the config file, as shown in the example below:

# ...

[Hooks]
PreSaveDirectory = /opt/rekkord/hooks/presave

As stated before, if any command fails, the save will not happen and Rekkord exits with an error code.

Post-save

These hooks run after a snapshot been created by rekkord save.

Set the directory where pre-save hook commands exist with PreSaveDirectory in the Hooks section of the config file, as shown in the example below:

# ...

[Hooks]
PostSaveDirectory = /opt/rekkord/hooks/postsave

As stated before, if any command fails, Rekkord will exit with an error code.