- A Machine Consumable & Automation Friendly dataset is published & kept
UP To Date
- It's available as
JSON
,TOML
&YAML
- Example:
!#${ARCH} is just $(uname -m), i.e aarch64 or x86_64 "https://bin.ajam.dev/${ARCH}/METADATA.AIO.json" "https://bin.ajam.dev/aarch64/METADATA.AIO.json" "https://bin.ajam.dev/x86_64/METADATA.AIO.json"//The Structure is like: { "base": [ { ${Binaries from bin.ajam.dev/${ARCH}/**/Baseutils/**} } ], "bin" : [ { ${Binaries are from core bin.ajam.dev/$ARCH}/**} } ], "pkg" : [ { ${Binaries, or rather pkgs are from Toolpacks Extras} } ]
- [Each of the ${BIN/PKG} contains fields like]:
name: "#Contains the Name of the $PKG itself, this is NOT what it will/should be Installed as", bin_name: "#Contains the real name, the $PKG will be installed as", description: "#Contains the Description of the $PKG/$PKG_FAMILY [Otherwise EMPTY]", note: "#Contains Additional Notes,Refs,Info the user need to be aware of, of the $PKG/$PKG_FAMILY" version: "#Contains the version of the $PKG <AUTOGENERATED>", download_url: "#Contains the Raw Direct Download URL of the $PKG <AUTOGENERATED>", size: "#Contains the Total Size of the $PKG <AUTOGENERATED>", bsum: "#Contains the Exact Blake3sum of the $PKG <AUTOGENERATED>", shasum: "#Contains the Exact Sha256sum of the $PKG <AUTOGENERATED>", build_date: "#Contains the Exact Date the $PKG was Built(Fetched) & Uploaded", src_url: "#Contains the Github/Gitlab/$GIT_SRC URL of the $PKG/$PKG_FAMILY [Otherwise EMPTY]", web_url: "#Contains the Website/Project Page URL of the $PKG/$PKG_FAMILY [Otherwise EMPTY]", build_script: "#Contains the Actual Script the $BINARY was Built(Fetched) With <AUTOGENERATED>" build_log: "#Contains the link to view the Actual CI BUILD LOG of the $BINARY <AUTOGENERATED>" category: "#Contains the $PKG/$PKG_FAMILY's Category" extra_bins: "#Contains names of related binaries (Only if they belong to same $PKG_FAMILY) of the $PKG/$PKG_FAMILY [Otherwise EMPTY]"
- Additional Details & Fields
!#A number of things are undocumented/missing from the METADATA.AIO files, these are just examples ↣ $(.base | .bin) -> NeoFetch Style GH Fetch IMG #Binaries that have a Github URL set as .src_url, you can get a neofetch style img "$(.download_url).ghfetch.png" #Example: https://bin.ajam.dev/x86_64/curl.ghfetch.png -> NeoFetch Style GH Fetch TXT #Binaries that have a Github URL set as .src_url, you can get a neofetch style ascii txt "$(.download_url).ghfetch.txt" #Example: https://bin.ajam.dev/x86_64/curl.ghfetch.txt -> Github Images/Previews #Binaries that have a Github URL set as .src_url, you can get a preview/thumnail PNG file "$(.download_url).preview.png" #Example: https://bin.ajam.dev/x86_64/curl.preview.png↣ $(.pkg) #Since these are AppImages and the like, icons, desktops etc can be fetched -> .Desktop Files "$(.bin.name).desktop" #Example: https://bin.ajam.dev/x86_64/qbittorrent.desktop -> Icons & .DirIcons "$(.bin.name).icon.png" #Example: https://bin.ajam.dev/x86_64/qbittorrent.icon.png "$(.bin.name).DirIcon" #Example: https://bin.ajam.dev/x86_64/qbittorrent.DirIcon (.DirIcon is a copy of .icon.png, downloading both isn't necessary) -> .Version Files #This info is also in the metadata, but if for some reason it's not "$(.name).version" #Example: https://bin.ajam.dev/x86_64/qbittorrent.AppImage.version -> .Zsync Files #Though, there now exists appimageupdatetool: https://github.com/AppImageCommunity/AppImageUpdate, you can still use zsync manually if you need it "$(.name).zsync" #Example: https://bin.ajam.dev/x86_64/qbittorrent.AppImage.zsync
- You can use this data to automate downloading, updating or even build a full fledged 📦 Package Manager like
@QaidVoid/soar
,@xplshn/dbin
&@ivan-hc/AM
-
Using JQ to Parse METADATA.json
- This is a basic example demonstrating how easy it is to work with the Metadata
#-----------------------------------------------------------------------------# # Host Triplet echo "$(uname -m)" #either x86_64 or aarch64 #---------------------# # Append `| jq -r '.$TYPE[].$PROPERTY'` to filter them, for example: !# Simple example to: list all Pkgs in .bin curl -qfsSL "https://bin.ajam.dev/$(uname -m)/METADATA.AIO.json" | jq -r '.bin[] | .name' !#To pretty print anything that matches qbittorrent from .pkg curl -qfsSL "https://bin.ajam.dev/$(uname -m)/METADATA.AIO.json" | jq -r '.bin[] | select(.name | test("qbittorrent"; "i")) | "---------------------------\n" + (. | to_entries | map("\(.key): \(.value)") | join("\n"))'
- People often ask why there's
weird/ugly
naming scheme likeaarch64_arm64_Linux
.- Though, at the time I had my reasons (Take a look at any 3-4 cli tools' naming schema that do Github Releases), I admit it's a pain now.
- Hence, I have set
URL
Redirects, so as long as your client follows a301
, you can basically use any of these to reach to any$ARCH/$HOST
- The ones in the Left will Redirect you to Correct
Location/Link
(Ones in the Right)Examples:
!# curl needs the `-L, --location` flag to Follow redirects !# wget works without any flags !# *Nix --> $(uname -m) will print aarch64/x86_64 [Better: "$(uname -m)-$(uname -s)" ] !# ADB/Termux --> getprop ro.product.cpu.abi will print arm64-v8a on Android [Better: "$(getprop ro.product.cpu.abi)-$(getprop ro.board.platform)" ] !# powershell --> $env:PROCESSOR_ARCHITECTURE || cmd.exe --> echo %PROCESSOR_ARCHITECTURE% [Better: "$env:PROCESSOR_ARCHITECTURE-$env:OS" ] !# Example on Android curl -qfsSLO "https://bin.ajam.dev/$(getprop ro.product.cpu.abi)/$BIN_OR_PATH_TO_BIN" !# Example on Linux curl -qfsSLO "https://bin.ajam.dev/$(uname -m)/$BIN_OR_PATH_TO_BIN" !# Example on Windows Invoke-WebRequest -Uri "https://bin.ajam.dev/$env:PROCESSOR_ARCHITECTURE/$BIN_OR_PATH_TO_BIN.exe" -OutFile "$BIN.exe"