Ajt: An alternative package manager for Julia

Hi there!
I’ve been working on an alternative package manager for Julia for a while, called Ajt. I built it because I’ve hit some limitations with Pkg.jl in a game engine i am working on which is made in Julia (currently working on it privately). Ajt is implemented in the zig programming language.
Its not meant to replace or overthrow Pkg, i made it to see how far i can go and what will be the tradeoffs.
Some of the things it focuses on:

Do you set a generic CPU_TARGET to prevent architecture-dependent cache?

not in the code of Ajt itself, there is no hardcoded JULIA_CPU_TARGET, but AJt does read a CPU_TARGET from a Dockerfile for example (in my use case)

Curious about whether it supports functionality like Pkg’s Pkg.Apps? I use that for some of my projects but have had a few issues along the way and am wondering if this provides another option?

currently not, if you will try to use Pkg.apps via Ajt it will forward the call to Pkg due to it not being implemented yet, however, i am planning to implement it soon.

update: Pkg.apps is now partly supported (dev, rm, status).
the full Pkg.apps will be supported soon along with binary releases in github releases
note: for all of you who want Ajt in the general registry, that is not possible currently.
Ajt is written in zig and is a standalone package manager for Julia, not a Julia package, sorry for the inconvenience

You could always have a build recipe in Yggdrasil to distribute a JLL package, though I’m not sure if that has a Zig compiler yet

ill check it out and see if it can work.
thank you very much for suggesting it :slight_smile:

i checked, there is no zig recipe in GitHub - JuliaPackaging/Yggdrasil: Collection of builder repositories for BinaryBuilder.jl · GitHub, also if i am not mistaken JLLs are to be retired, but maybe i am wrong.

Hmm I did find a zig recipe here, as well as a recipe that uses zig, so it seems quite possible to do something there. Not sure if those are the versions you need though, but that can always be updated by a PR :wink:

JLLs are not being retired, they are going strong and underpin quite a bit of the ecosystem these days. BinaryBuilder.jl, the thing which builds JLLs, is at some point going to be swapped out for the new BinaryBuilder2.jl, but that is at some point in the future.

oh, i didnt find that, thank you for pointing it out to me! and my bad for thinking JLLs are retiring :sweat_smile: anyhow, ill start to work on shipping Ajt as a JLL, thank you!

Where did you get the impression JLLs would be retired? If there’s some documentation or post that needs to be edited we should do that

i saw it in some post here, i dont remember which tho, lemme find it

i meant this, but i think i read it incorrectly, my bad!

Could you elaborate on what this means. What’s a phase barrier in this context?

a phase barrier in this context is waiting for one stage to happen before moving to the next, Ajt does something different, it moves to the next phase per item instead of waiting globally, for example: if package A is downloaded before package B, it wont wait for package B unless its a dependency

I thought that’s what Pkg already does? I don’t know how to actually check for parallel downloads, but that’s how I interpreted JULIA_PKG_CONCURRENT_DOWNLOADS.

yes, Pkg.jl does concurrent downloads, but it dosent immediately go to compile the downloaded package, it waits for the other packages to finish, only then moving on to the next phase, Ajt models packages as a dependency graph and starts the next phase per package as soon as its ready to move on to that phase.
if you need more clarification please let me know :slight_smile:

Imo, a good package manager should really be language agnostic. Language toolchain should provide language specific parts of build system, and package manager handle multi-language dependencies and reproducible dev environments. One example of this approach is nix+devenv.sh. Nix implementation may be not optimal, but the idea is right imo.

update: Ajt v0.1.0 is now out along with binaries for it, no need to build from source with zig!
github: Release ajt v0.1.0 · sinisterMage/Ajt.jl · GitHub