| Crates.io | gipm |
| lib.rs | gipm |
| version | 0.2.1 |
| created_at | 2025-08-11 06:02:49.444557+00 |
| updated_at | 2025-11-29 04:33:55.304652+00 |
| description | Gipm is a git package manager |
| homepage | https://github.com/gipm-rs/gipm |
| repository | https://github.com/gipm-rs/gipm |
| max_upload_size | |
| id | 1789662 |
| size | 263,611 |
gipmgipm - Simple Git Package(like) Manager
cargo install gipmgipm update - updates packagesgipm sync - sync to lockfile versionsgipm clean - remove .gitvenvgipm --help - show help-v|--verbose.gipm work?gipm is written in rust, and uses the same pubgrub dependency resolution library as uvgipm utilizes semantic version ranges, improving flexibility over submodule limitationsgipm provides a .lock file to guarantee repeatability when necessarygipm utilizes the gix library to drive its git interactions; no need to manage any external tooling.
gix is still undergoing heavy development. Currently, gix has limited support for submodules, and if a dependency is cloned containing a submodule, they be recursively initialized using git for the time being.git2 binding?gipm works by reading in a dependencies.yaml file, with the following format:
dependencies:
- version: "~3"
url: https://gitlab.com/libeigen/eigen.git
- version: "^7.88"
url: https://github.com/curl/curl.git
prefix: curl-
replacement:
- ["_", "."]
- version: 1.2.13
url: https://github.com/madler/zlib.git
- version: ~3.4
url: https://github.com/openssl/openssl.git
prefix: openssl-
- version: "~0.4"
url: https://github.com/gipm-rs/test-repo-1.git
gipm will recursively solve the dependency problem by considering further dependency.yaml files at each of these repositories and versions. gix facilitates an efficient in-process extraction of the yaml file without any extra overhead of needing to to a tree checkout for this resolution process.
gipm aims to efficiently store git repositories for efficient clone speed and checkout speeds. gipm clones dependency databases in ~/.gipm/db, storing refs for use across many gipm workspaces.
Once the dependency problem is solved, gipm will clone or update a shallow repository under .gitvenv for the resolved dependencies, and then re-point the remote to the original url. This facilitates efficient checkout processes, and re-use for shared dependencies, while still allowing flexibility to develop against dependencies in your resolved workspace.
This is designed for:
If your dependencies do not have further dependencies of their own, submodules work great, and you should use them. However, when muti-layered dependency trees exist these become a nightmare to manage with git submodules. Having a package-like system tagging along with git makes sense. With the modern semantic versioning guidelines we can resolve a compatible package for use across all of your dependencies.
This is not a replacement for uv, cargo, npm, etc. If you are working within a given language with a well supported package manager, you should stop here and use that to manage those dependencies.
The dependencies.yaml file currently has one supported tag: dependencies::
dependencies: # REQUIRED
- version: "<semantic-version-range>" # REQUIRED
url: <path/to/git/repo> # REQUIRED
prefix: <prefix> # OPTIONAL
replacement: # OPTIONAL
- [<from>, <to>] # OPTIONAL
- ["_", "."] # example of replacement
- version: "version"
...
This is the top level entry for defining dependencies. In the future there may be more top level tags, i.e. to set git options potentially. Dependencies contains an array of at versions, urls, with some optional extras to help with resolving tags.
This is the semantic version specification. This should follow the cargo version requirement syntax
This is the path to the repository. This can be specified in any compliant git path (i.e. ssh, https, etc) - but the protocol must be supported on the system with appropriate keys/etc.
For most repositories, gipm can automatically infer a prefix to a semantic version, if that semantic version is consistent and repeated across >= 75% of tags that look to be semantic in nature. For cases where gipm cannot automatically infer the desired prefix to the semantic-like sequence, the prefix may be explicitly set.
For most repositories, gipm can automatically infer common replacements for semantic version matching with tags. Most commonly this may be -, or _. However, if this cannot be automatically inferred, it can be explicitly specified here. Note that a semantic version is in the form major.minor.patch for release versions.