# 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 atomic 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/).
## 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`
Verify the contents of a repository:
`$ engram verify ~/repo`
## 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