1
1
# Comparison between ` rustic ` and ` restic `
2
2
3
3
Note that we regularly update this document to compare the latest versions of
4
- rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0 .
4
+ rustic and restic. Currently, we compare restic 0.17.1 with rustic 0.9.1 .
5
5
6
6
## General differences
7
7
8
8
| | ` restic ` | ` rustic ` |
9
9
| ---------------------- | ------------------------------------------------- | -------------------------------------------------- |
10
10
| programming language | Go | Rust |
11
- | test coverage | ✅ | ❌ (45 % in rustic_core) |
11
+ | test coverage | ✅ | ❌ (46 % in rustic_core) |
12
12
| config profile support | ❌ (wrapper tools available) | ✅ |
13
13
| locking | lock files in repository | lock-free operations, two-phase pruning |
14
14
| cold storage | ❌ (no direct support, may work in special cases) | ✅ (full support including warm-up of needed data) |
15
15
| in-repo config | ❌ | ✅ (see below for details) |
16
- | logging | ` -v ` or ` --quiet ` , no log-file support | ` --log-level ` , supports log-file output |
17
- | returns error code | ✅ | ❌ |
16
+ | logging | ` -v ` or ` --quiet ` | ` --log-level ` |
17
+ | allow to log to file | ❌ | ✅ |
18
+ | returns error code | ✅ | (✅) only 0 or 1; not all commands support it |
18
19
| available as library | ❌ | ✅ rustic_core |
19
20
| interactive mode (TUI) | ❌ | ✅ |
20
21
@@ -104,8 +105,8 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
104
105
| ` --insecure-tls ` | ✅ | ❌ |
105
106
| ` --json ` | ✅ | ✅ |
106
107
| ` --key-hint ` | ✅ | ❌ |
107
- | ` --limit-download ` | ✅ | ❌ |
108
- | ` --limit-upload ` | ✅ | ❌ |
108
+ | ` --limit-download ` | ✅ | ❌ (for opendal option ` trottle ` ) |
109
+ | ` --limit-upload ` | ✅ | ❌ (for opendal option ` trottle ` ) |
109
110
| ` --log-file ` | ❌ | ✅ (or in config profile) |
110
111
| ` --no-cache ` | ✅ | ✅ (or in config profile) |
111
112
| ` --no-extra-verify ` | ✅ needed in every call | ✅ configure once using ` config ` |
@@ -144,13 +145,18 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
144
145
145
146
## Snapshot filtering
146
147
147
- | filter | ` restic ` | ` rustic ` (options also in config profile) |
148
- | -------- | ------------ | ------------------------------------------------- |
149
- | by host | ✅ ` --host ` | ✅ ` --filter-host ` |
150
- | by label | ❌ | ✅ ` --filter-label ` |
151
- | by paths | ✅ ` --paths ` | ✅ ` --filter-paths ` |
152
- | by tags | ✅ ` --tags ` | ✅ ` --filter-tags ` |
153
- | custom | ❌ | ✅ ` --filter-fn ` (using [ Rhai] ( https://rhai.rs/ ) ) |
148
+ | filter | ` restic ` | ` rustic ` (options also in config profile) |
149
+ | --------------------- | ------------ | ------------------------------------------------- |
150
+ | by host | ✅ ` --host ` | ✅ ` --filter-host ` |
151
+ | by label | ❌ | ✅ ` --filter-label ` |
152
+ | by paths | ✅ ` --paths ` | ✅ ` --filter-paths ` |
153
+ | by exact pathlists | ❌ | ✅ ` --filter-paths-exact ` |
154
+ | by tags | ✅ ` --tags ` | ✅ ` --filter-tags ` |
155
+ | by exact tagists | ❌ | ✅ ` --filter-tags-exact ` |
156
+ | by date/time | ❌ | ✅ ` --filter-before ` , ` filter-after ` |
157
+ | by size | ❌ | ✅ ` --filter-size ` |
158
+ | by size added to repo | ❌ | ✅ ` --filter-size-added ` |
159
+ | custom | ❌ | ✅ ` --filter-fn ` (using [ Rhai] ( https://rhai.rs/ ) ) |
154
160
155
161
## Comparison of important commands
156
162
@@ -208,7 +214,7 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
208
214
| ` --skip-if-unchanged ` | ✅ | ✅ ` --skip-identical-parent ` |
209
215
| ` --stdin ` | ✅ | ✅ (use ` - ` as backup source) |
210
216
| ` --stdin-filename ` | ✅ | ✅ |
211
- | ` --stdin-from-command ` | ✅ | ❌ |
217
+ | ` --stdin-from-command ` | ✅ | ✅ |
212
218
| ` --tag ` | ✅ | ✅ |
213
219
| ` --time ` | ✅ | ✅ |
214
220
| ` --with-atime ` | ✅ | ✅ |
@@ -315,14 +321,15 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
315
321
| check index vs packs | ✅ | ✅ |
316
322
| check snapshot files | ✅ | ✅ |
317
323
| (optionally) check pack files | ✅ | ✅ |
324
+ | only check given snapshots | ❌ | ✅ |
318
325
| cache policy | create temporary (use existing: roadmap 0.18) | use existing |
319
326
| check cache integrity | ❌ | ✅ |
320
327
| check hot/cold integrity | ❌ (no cold storage support) | ✅ |
321
328
322
329
| option | ` restic ` | ` rustic ` |
323
330
| -------------------- | ----------------------------- | --------------------- |
324
331
| ` --read-data ` | ✅ | ✅ |
325
- | ` --read-data-subset ` | ✅ | ❌ |
332
+ | ` --read-data-subset ` | ✅ | ✅ |
326
333
| ` --trust-cache ` | ❌ (no cache integrity check) | ✅ |
327
334
| ` --with-cache ` | ✅ | ✅ (default behavior) |
328
335
@@ -345,7 +352,7 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
345
352
| general | ` restic ` | ` rustic ` |
346
353
| ----------------------------------------- | -------- | -------- |
347
354
| summarize identical snapshots (like ` +3 ` ) | ❌ | ✅ |
348
- | show summary information (sizes) | ❌ (WIP) | ✅ |
355
+ | show summary information (sizes) | ✅ | ✅ |
349
356
350
357
| option | ` restic ` | ` rustic ` |
351
358
| -------------------------- | -------------------- | -------------------------- |
@@ -379,25 +386,25 @@ rustic and restic. Currently, we compare restic 0.17.0 with rustic 0.8.0.
379
386
| summarize snapshots with identical result (like ` +3 ` ) | ❌ | ✅ |
380
387
| fast searching for given full paths | ❌ | ✅ |
381
388
382
- | option | ` restic ` | ` rustic ` |
383
- | ------------------------------ | -------------------------- | ------------------------- |
384
- | ` --all ` | ❌ (no summarizing) | ✅ |
385
- | ` --blob ` | ✅ | ❌ |
386
- | ` --glob ` | ✅ (give patterns as args) | ✅ |
387
- | ` --group-by ` | ❌ | ✅ |
388
- | ` --ignore-case ` | ✅ | ✅ (` --iglob ` ) |
389
- | ` --long ` | ✅ | ❌ (default: long output) |
390
- | ` --newest ` | ✅ | ❌ |
391
- | ` --numeric-uid-gid ` | ❌ (default: numeric ids) | ✅ |
392
- | ` --oldest ` | ✅ | ❌ |
393
- | ` --pack ` | ✅ | ❌ |
394
- | ` --path ` (filter snapshots) | ✅ | ✅ (use ` --filter-path ` ) |
395
- | ` --path ` (full path to search) | ❌ | ✅ |
396
- | ` --show-pack-id ` | ✅ | ❌ |
397
- | ` --show-misses ` | ❌ | ✅ |
398
- | ` --snapshot ` | ✅ | ✅ (give ids as args) |
399
- | ` --tag ` | ✅ | ✅ (use ` --filter-tags ` ) |
400
- | ` --tree ` | ✅ | ❌ |
389
+ | option | ` restic ` | ` rustic ` |
390
+ | ------------------------------ | -------------------------- | -------------------------- |
391
+ | ` --all ` | ❌ (no summarizing) | ✅ |
392
+ | ` --blob ` | ✅ | ❌ |
393
+ | ` --glob ` | ✅ (give patterns as args) | ✅ |
394
+ | ` --group-by ` | ❌ | ✅ |
395
+ | ` --ignore-case ` | ✅ | ✅ (` --iglob ` ) |
396
+ | ` --long ` | ✅ | ❌ (default: long output) |
397
+ | ` --newest ` | ✅ | (✅) use ` --filter-before ` |
398
+ | ` --numeric-uid-gid ` | ❌ (default: numeric ids) | ✅ |
399
+ | ` --oldest ` | ✅ | ✅ use ` --filter-after ` |
400
+ | ` --pack ` | ✅ | ❌ |
401
+ | ` --path ` (filter snapshots) | ✅ | ✅ ` --filter-path ` |
402
+ | ` --path ` (full path to search) | ❌ | ✅ |
403
+ | ` --show-pack-id ` | ✅ | ❌ |
404
+ | ` --show-misses ` | ❌ | ✅ |
405
+ | ` --snapshot ` | ✅ | ✅ (give ids as args) |
406
+ | ` --tag ` | ✅ | ✅ ` --filter-tags ` |
407
+ | ` --tree ` | ✅ | ❌ |
401
408
402
409
### ` diff `
403
410
0 commit comments