XerWoho/zeP
A new zig Package manager, and version manager for zig.
Status: WIP Current Versions:
zeP is a fast, lightweight package manager and Zig version manager designed with simplicity, and comfort for the end-user. No "copy-this add it here", we handle everything for you. Just install packages, and manage Zig versions - quickly.
Install packages from:
.json package definitions)Automatic hash tracking for installed packages
Smart package name resolution
Resolving zig versions
Maintains:
zep.json (package definitions)zep.lock (exact installed package state)Handles:
zeP takes a different route then other package managers, like zigmod, zon, gyro or zig itself. Instead of importing packages using the built-in zig fetch, we fetch, and verify them independently via our own program.
This allows for fast installs, and fast caching. Furthermore, zeP uses an approach similar to pnpm, where installed packages are stored on a main folder within your system, and symlinked inbetween projects making installs very quick and efficient.
Also, because of this approach of installing projects, you simply know what you are typing. Our system allows for intellisense across the whole project, meaning that you get automatic function completion, and parameter declaration. Zzig fetch, leaves you guessing, no intellisense, no auto-complete.
Lastly, are you really not sick of adding garbage into your build.zig? First run $ zig fetch --save
Then, you have to manually add the dependency into your build.zig. Compatibility with your Zig version isn’t guaranteed.
That is not efficient, it is bad. We take EVERYTHING off your hands, you install whatever you want, ANY VERSION of our available packages, and we tell you whether or not it is compatible or not (yes, we checked all projects). Furthermore, we inject the imports within your build.zig, using a function. The function? A simple injector, no hidden code, or obfuscation, you can even view it within .zep/injector.zig, no secrets, only efficiencies.
Nobody wants one package manager and one version manager, these are too many managers. zeP handles both, so you can enjoy, and not worry about the other managers.
After zeP fetches any package via github, it does not store the zip file within the cache. Instead, we filter out all the bloat that is not useful to you, eg. the .github folder, tests/, examples/, or unimportant files such as .gitignore, .gitattributes, LICENSE, stuff that YOU dont need, will be discarded, and only then, will the folder be cached. Everybody hates bloat, we just got rid of it.
What about speed though? zeP, as mentioned, is pretty quick. We picked out the .zip files for every single project, and its version, which makes installs very quick. In the future we hope to store the already de-bloated files within a server, but that is a plan for the future.
All tools executed on the same VM with identical network conditions.
| Tool | Installed Size | Cache Size |
|---|---|---|
| zeP | 136 KB | 24 KB |
| zigmod | 884 KB | — |
| zig | 168 KB | — |
| zigp | 168 KB | — |
| Tool | real | user | sys | CPU |
|---|---|---|---|---|
| zeP | 0.41s | 0.00s | 0.01s | 2% |
| zigmod | 0.74s | 0.08s | 0.08s | 21% |
| zig | 0.61s | 0.01s | 0.02s | 4% |
| zigp | 1.0s | 0.01s | 0.04s | 4% |
These numbers aren't meant to declare zeP the "winner." The point is to give a rough idea of its baseline overhead. As the project grows, more extensive benchmarks will be added (dependency trees, cold/hot caching, uninstall cycles, and remote registry latency).
& ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/XerWoho/zeP/refs/heads/main/scripts/installer/installer.ps1')))
curl -fsSL https://raw.githubusercontent.com/XerWoho/zeP/refs/heads/main/scripts/installer/installer.sh | bash
zep install <package-name>@<version>
zep uninstall <package-name> # deletes from local project
zep global-uninstall <package-name>@<version> # deletes globally
zep fglobal-uninstall <package-name>@<version> # deletes globally forcefully
zep pkg list <package-name>
zep pkg add <package-name>
(if a package is not within our local packages, you can add your own! [unverified])
zep pkg remove <package-name>
zep cmd add
zep cmd run <cmd>
zep cmd remove <cmd>
zep cmd list
zep purge pkg
zep purge cache
zep zig install <version> <target>
zep zig list
zep zig switch <version> <target>
zep zig uninstall <version>
zep zep install <version>
zep zep list
zep zep switch <version>
zep zep uninstall <version>
zep prebuilt build [name] (target)
zep prebuilt use [name] (target)
zep prebuilt delete [name]
zep build
zep runner <args>
--
zep prebuilt build [name] (target)
zep prebuilt use [name] (target)
zep prebuilt delete [name]
zep.jsonYour project’s declared dependencies.
zep.lockExact versions, hashes, and metadata of installed packages.
Both are fully auto-managed. Direct editing is unnecessary unless you enjoy breaking things.
zep init
zep lock
zep json