# engram
<img src="https://img.shields.io/crates/v/engram?color=b7bdf8&labelColor=363a4f&style=for-the-badge&logo=rust&logoColor=white" height="22">
<img src="https://img.shields.io/gitlab/last-commit/mbednarek360/engram?color=a6da95&labelColor=363a4f&style=for-the-badge&logo=gitlab&logoColor=white" height="22">
<img src="https://img.shields.io/gitlab/stars/mbednarek360/engram?color=eed49f&labelColor=363a4f&style=for-the-badge&logo=stackblitz&logoColor=white" height="22">
<br><br>
Engram is a fast and robust version control system for portable file backups, inspired by git and [rsnapshot](https://rsnapshot.org/). It creates snapshots of directories and stores them in an efficient and portable delta-based format.
Engram can be used in a cron job to automatically backup files, and the backup can be stored remotely with a tool like [rclone](https://rclone.org/). It does not encrypt snapshots, so this should be handled externally if desired.
Unlike other backup tools, engram allows for deletion of any number of previous revisions, as it stores instructions on how to create previous snapshots given the current state.
## Usage
> :information: See `engram --help` for more detailed information.
Initialize a repository with data:
`$ engram init ~/repo ~/data`
Update a repository with new data:
`$ engram update ~/repo ~/data 3days`
Pull historical repository data:
`$ engram pull ~/repo ~/out 2024-11-28T12:00:00`
Revert updates to a repository:
`$ engram revert ~/repo 2024-11-28T12:00:00`
Manually remove old updates:
`$ engram clean ~/repo 3days`
## Current Limitations
- renamed directories can create big index files
- cannot pull files bigger than available system memory
- will not preserve file metadata
- only supports a UNIX-based OS