# 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`

## 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

