#version-control #control-system #git #object #cli #developer-utility

app vault_vcs

A simplified version control system built in Rust for local files, quite similar to how git functions

2 stable releases

1.2.2 Dec 23, 2023

#196 in Development tools

MIT license



Vault will be a command line tool (if successful) similar to git which would have multiple features like brances etc etc.

Drop of a ✨ if you are here. It would mean a lot : )

__     __          _ _   
\ \   / /_ _ _   _| | |_ 
 \ \ / / _` | | | | | __|
  \ V / (_| | |_| | | |_ 
   \_/ \__,_|\__,_|_|\__| , simplified version control for local files 


Vault is a version control system in Rust, written as a learning project. It follows a similar approach of how Git works i.e.

  • Files are stored as Blobs and Directories as Trees.
  • SHA256 is used to encode these objects.
  • ZLib Compression is used for maximum efficiency.

For more details, Refer to Workflow.md (wip)

Vault is not suitable for real-world use, but might be of interest for learning about git-internals.


You can directly install from Cargo by

cargo install vault_vcs


From Source

  1. Clone this repository by running the command
git clone https://github.com/shubhexists/vault
  1. cd into the directory and run
cargo build --release

This will create binaries for the project.

  1. Export the path of the executable (It is in the /target/release/ directory .) For eg,
   export PATH="$PATH:/home/jerry/Desktop/vault/target/release"
  1. You are now all set to "VAULTIFY" your local files :)


  1. To initialize a new vault instance in your present working directory.
vault init
  1. To create a new commit.
vault commit -m "Your Commit Message"

Parameter -m or --message is optional. It would take an empty message by default if no message is provided.

  1. To create a new branch.
vault create branch_name
  1. To revert commits (get back to a previous point of directory)
vault revert -l "No. of commits" "dir_name"
  • Parameter -l or --level defines the number of commits to go back.. For eg. -l 2 would go back 2 commits in the repository. If nothing is provided , default vaule would be taken as 1.

  • dir_name requires a directory name in which the files would be added. If nothing is provided, it would replace the files of the current directory.. (wip)

For eg. for vault revert -l 2 hello, a new directory would be created namely hello, that would have the files 2 commits ago..

  1. Delete a Branch
vault delete branch_to_delete
  1. Switching to another branch ( git checkout )
vault switch branch_to_switch
  1. Logs of the current branch
vault log

Note - Output of vault log just consists of the logs of current active branch.

Output of vault log 8) (Mainly For Debugging Purposes) To read the contents of a Zlib compressed binary

vault cat hash_string_to_read

Note - vault cat command should be run in the root directory. i.e. the directory in which .vault exists. Screenshot from 2023-12-23 10-05-08

Limitations / WIP

  1. .vaultignore is not functional currently
  2. To add - Test cases and subsequent workflows
  3. Add more useful commands

There would be probably many more! Some of them are in the issues.


If you read till here, thanks for showing interest in the project :)


~121K SLoC