{"id":23739236,"url":"https://github.com/xplshn/dbin","last_synced_at":"2025-10-05T16:58:47.990Z","repository":{"id":254359381,"uuid":"846297318","full_name":"xplshn/dbin","owner":"xplshn","description":"📦 Poor man's package manager. +4164 statically linked binaries in the default repos (amd64/arm64/riscv)! The easy to use, easy to get, suckless software distribution system.","archived":false,"fork":false,"pushed_at":"2025-08-31T01:28:13.000Z","size":3587,"stargazers_count":254,"open_issues_count":1,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-04T14:43:50.108Z","etag":null,"topics":["binary-manager","cli","cool","dependency-checker","fast","go","musl","no-install","package-management","package-manager","package-manager-tool","portable","portable-package-manager","risc-v","riscv","runner","standalone","static","suckless","superior"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xplshn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-08-22T23:15:18.000Z","updated_at":"2025-08-31T19:26:41.000Z","dependencies_parsed_at":"2024-10-23T01:39:30.440Z","dependency_job_id":"c2bcb7b6-0035-4e79-aa92-da28298274c6","html_url":"https://github.com/xplshn/dbin","commit_stats":null,"previous_names":["xplshn/dbin"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/xplshn/dbin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplshn%2Fdbin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplshn%2Fdbin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplshn%2Fdbin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplshn%2Fdbin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xplshn","download_url":"https://codeload.github.com/xplshn/dbin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xplshn%2Fdbin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278486275,"owners_count":25994941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary-manager","cli","cool","dependency-checker","fast","go","musl","no-install","package-management","package-manager","package-manager-tool","portable","portable-package-manager","risc-v","riscv","runner","standalone","static","suckless","superior"],"created_at":"2024-12-31T09:36:39.996Z","updated_at":"2025-10-05T16:58:47.984Z","avatar_url":"https://github.com/xplshn.png","language":"Go","readme":"# dbin: The easy to use, easy to get, suckless software distribution system\n[![Go Report Card](https://goreportcard.com/badge/github.com/xplshn/dbin)](https://goreportcard.com/report/github.com/xplshn/dbin)\n[![License](https://img.shields.io/badge/license-%20RABRMS-bright_green)](https://github.com/xplshn/dbin/blob/master/LICENSE)\n[![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/xplshn/dbin?include_prereleases)](https://github.com/xplshn/dbin/releases/latest)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/xplshn/dbin)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/xplshn/dbin)\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/logo_by_peacefulwilliam.svg\" alt=\"dbin logo, made with love, by @peacefulwilliam \u003cgithub.com/contrarybaton60\u003e\" width=\"150\" /\u003e\u003c/p\u003e\n\n\u003c!--[Makes my repo look bad because these usually show \"Failing\"]-------------------------------------------------------------------------------------------\n[![AMD64 repo status](https://github.com/Azathothas/Toolpacks/actions/workflows/build_x86_64_Linux.yaml/badge.svg)](https://github.com/Azathothas/Toolpacks)\n[![ARM64 repo status](https://github.com/Azathothas/Toolpacks/actions/workflows/build_aarch64_Linux.yaml/badge.svg)](https://github.com/Azathothas/Toolpacks)\n--\u003e\n\ndbin is a simple and extensible software distribution system, it is like a package manager, but without the hassle of dependencies nor the bloat, every binary provided is statically linked or otherwise self-contained, dbin itself doesn't even require a database to track installs, all operations are atomic and stateless. Dbin is particularly well-suited for embedded systems, we support both amd64, aarch64 and riscv64.\n\ndbin can also work on systems other than Linux, but given that we don't have repositories offering binaries for other systems, we just don't release `dbin` for other systems. But, creating a repo and compiling `dbin` are trivial matters, feel free to start your own `dbin` repository :)\n\n\u003e Why?\n\n\"I tend to think the drawbacks of dynamic linking outweigh the advantages for many (most?) applications.\" – John Carmack. If you are looking for more in-depth arguments, see: [dynlib - drewdevault.com](https://drewdevault.com/dynlib.html), [cat-v.ORG - Dynamic Linking](https://harmful.cat-v.org/software/dynamic-linking)\n\n\u003e I've seen lots of package manager projects without \"packages\". What is different about this one?\n\n There are currently ![Current amount of binaries in the repos! x86_64](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/counter.svg) binaries in our repos. They are all statically linked.\n\n### Features ![pin](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/pin.svg)\n\n```\n$ dbin --help\n\n Copyright (c) 2024-2025: xplshn and contributors\n For more details refer to https://github.com/xplshn/dbin\n\n  Synopsis\n    dbin [-v|-h] [|list|install|remove|update|run|info|search|] \u003c-args-\u003e\n  Description:\n    The easy to use, easy to get, software distribution system\n  Options:\n    -h, --help        Show this help message\n    -v, --version     Show the version number\n    --verbose         Run in extra verbose mode\n    --silent          Run in silent mode, only errors will be shown\n    --extra-silent    Run in extra silent mode, suppressing all output\n  Commands:\n    list              List all available binaries\n    install, add      Install binaries\n    remove, del       Remove binaries\n    update            Update binaries binaries installed by dbin\n    run               Run a specified binary from cache\n    info              Show information about a specific binary OR display installed binaries if called without arguments\n    search            Search for a binaries by supplying one or more search terms\n  Variables:\n    DBIN_INSTALL_DIR   If present, it must contain a valid directory path\n    DBIN_CACHE_DIR     If present, it must contain a valid directory path\n    DBIN_NOTRUNCATION  If present, and set to ONE (1), string truncation will be disabled\n    DBIN_REOWN         If present, and set to ONE (1), it makes dbin update programs that may not have been installed by dbin\n    DBIN_NOCONFIG      If present, and set to ONE (1), it makes dbin use its builtin config, it won't create or read an existing one\n    DBIN_REPO_URLs     If present, it must contain one or more repository's index file urls separated by ;\n  NOTE: Check out `config --show` to see all parameters and their env vars\n\n```\n\n### Examples\n```\n    dbin search editor\n    dbin install micro.upx\n    dbin install lux kakoune aretext shfmt\n    dbin --silent install bed \u0026\u0026 echo \"[bed] was installed to $INSTALL_DIR/bed\"\n    dbin del bed\n    dbin del orbiton tgpt lux\n    dbin info\n    dbin info | grep a-utils | xargs dbin add # install the entire a-utils suite\n    dbin info jq\n    dbin list --detailed\n    dbin tldr gum\n    dbin --verbose run curl -qsfSL \"https://raw.githubusercontent.com/xplshn/dbin/master/stubdl\" | sh -\n    dbin --silent run --transparent micro ~/.profile\n    dbin run chromium.dwfs.AppBundle \"https://www.paypal.com/donate/?hosted_button_id=77G7ZFXVZ44EE\" # Donate?\n```\n\n#### Features ![pin](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/pin.svg)\n- Ability to install specific versions of binaries (by specifying the Snapshot you want to install of it)\n- Ability to use user-curated repositories, as the format for the repository indexes is quite simple\n  Note that a repo index for `dbin` can be in either of these formats:\n  - JSON: For ease of use\n  - CBOR: To optimize the time it takes to load the repo\n  - YAML: Because this library is already used for the config, so, why not?\n   The repo indexes can be compressed as .gz or .zst, this is specially useful for large catalogs of programs\n- Hooks. `dbin` can run a set of commands or a script, whenever a binary of file with a certain extension is being installed. The user can also specify uninstall hooks\n- `dbin` can work without a config, and it can also run from RAM\n- No breaking changes. Old releases of `dbin` do not break, until after at least 3 releases of newer versions.\n- `dbin` will survive even if the upstream repo disappears. `dbin` has a repository index that is held in its own repo. And given that the upstream binaries are held \u0026 built in GHCR, all build logs and binaries will continue to be usable/downloadable even if `pkgforge` disappears or experiences downtime\n- The binaries in `dbin` are specifically filtered for `portability` (meaning, they work on older kernel versions, they work on `Musl` and `Glibc` and even weird yet wonderful systems like [AliceLinux](https://github.com/xplshn/alicelinux), [OasisLinux](https://github.com/oasislinux/oasis) or FreeBSD (with linuxlator, so that you don't have to set up an Ubuntu chroot to install a Linux web browser and be able to watch DRM content, etc)\n\n#### What are these optional flags? ![pin](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/pin.svg)\n##### Flags that correspond to the `run` functionality\nIn the case of `--transparent`, it runs the program from $PATH and if it isn't available in the user's $PATH it will pull the binary from `dbin`'s repos and run it from cache.\n##### `Update` arguments:\nUpdate can receive an optional list of specific binaries to update OR no arguments at all. When `update` receives no arguments it updates everything that is both found in the repos and in your `$DBIN_INSTALL_DIR` (unless `$DBIN_REOWN=1`, dbin will not update binaries it didn't install. It won't modify symlinks either).\n##### Arguments of `info`\nWhen `info` is called with no arguments, it displays all binaries which were installed by `dbin`. When it is called with a binary's name as argument, `info` will display as much information of it as is available.\n###### Example:\n```\n$ dbin info micro\nName: micro#github.com.zyedidia.micro\nPkg ID: github.com.zyedidia.micro\nPretty Name: micro\nDescription: Modern and intuitive terminal-based text editor\nVersion: HEAD-7d16dcd-250311T073524\nDownload URL: oci://ghcr.io/pkgforge/bincache/micro/official/micro:HEAD-7d16dcd-250311T073524-x86_64-linux\nSize: 14 MB\nB3SUM: b6f32b2b8ff4b5abad126c4d0d466549f91c12eedafbc9826d0673b91d10eea9\nSHA256: 3a9278b2be59a8c1fd87647f65d0cfcb9c707e823713045e93af183610ef8102\nBuild Date: 2025-03-12T03:02:06Z\nBuild Script: https://github.com/pkgforge/soarpkgs/blob/main/binaries/micro/static.official.source.yaml\nBuild Log: https://api.ghcr.pkgforge.dev/pkgforge/bincache/micro/official/micro?tag=HEAD-7d16dcd-250311T073524-x86_64-linux\u0026download=micro.log\nRank: 1102\nSnapshots: HEAD-9b3f7ff-250119T130748-x86_64-linux [2.0.14]\n```\n##### Arguments of `list`\n`list` can receive the optional argument `--detailed`/`-d`. It will display all binaries + their description\n##### Arguments of `search`\n`search` can only receive various search terms, if the name of a binary or a description of a binary contains the term, it is shown as a search result.\n`search` can optionally receive a `--limit` argument, which changes the limit on how many search results can be displayed (default is 90) (you can also put this in your config)\n\n## Getting Started ![pin](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/pin.svg)\n\nTo begin using dbin, simply run one of these commands on your Linux/FreeBSD+Linuxlator system. No additional setup is required. You may also build the project using `go build` or `go install`\n#### Use without installing\n```\nwget -qO- \"https://raw.githubusercontent.com/xplshn/dbin/master/stubdl\" | sh -s -- --help\n```\n##### Install to `~/.local/bin`\n```\nwget -qO- \"https://raw.githubusercontent.com/xplshn/dbin/master/stubdl\" | sh -s -- --install \"$HOME/.local/bin/dbin\"\n```\n\n### Examples of usage cases of `dbin`\n#### Inside of a SH script\nWhenever you want to pull a specific GNU coreutil, busybox, toybox, etc, insert a bash snippet, use a *fetch tool, etc, you can use dbin for the job! There's also a `--transparent` flag for `run`, which will use the users' installed version of the program you want to run, and if it is not found in the `$PATH` dbin will fetch it and run it from `$DBIN_CACHEDIR`.\n```sh\nsystem_info=$(wget -qO- \"https://raw.githubusercontent.com/xplshn/dbin/master/stubdl\" | sh -s -- run --silent albafetch --no-logo - || curl -qsfSL \"https://raw.githubusercontent.com/xplshn/dbin/master/stubdl\" | sh -s -- run --silent albafetch --no-logo -)\n```\n#### For creating a statically-linked \u0026 bootable rootfs using `toybox`'s `mkroot`\n![image](https://github.com/user-attachments/assets/949465ab-9572-404f-b02d-319eb3bc2fe0)\n![image](https://github.com/user-attachments/assets/64700072-a087-4206-8b52-212ecfea668d)\n\n###### dbin uses a format for defining the repository index file that is derived from the endpoints provided by Pkgforge. During this step, we remove unportable programs and re-order variants based on their ID (smaller binaries are prioritized)\n\n`dbin` is a package manager, which can use any repos. But it comes with a strong default selection by default.\n\n\u003e Hmm, can I add my own repos?\n\nYup, you'll need to provide a repository index, a JSON (or CBOR/YAML) (it can optionally be compressed | as .gz or .zst) file like this:\n```json\n{\n \"SillyRepo\": [\n  {\n   \"pkg\": \"a-utils/ed\",\n   \"pkg_name\": \"ed\",\n   \"pkg_id\": \"github.com.xplshn.a-utils\",\n   \"icon\": \"https://api.ghcr.pkgforge.dev/pkgforge/bincache/a-utils/official/ed?tag=0.0.5-x86_64-linux\\u0026download=ed.png\",\n   \"description\": \"ed from u-root but with syntax highlighting\",\n   \"version\": \"0.0.5\",\n   \"download_url\": \"oci://ghcr.io/pkgforge/bincache/a-utils/official/ed:0.0.5-x86_64-linux\",\n   \"size\": \"5.4 MB\",\n   \"bsum\": \"1f0213b604bf964dbd2ad0dbaddab1c6a64e5da7ea89febcbdb9de337a081d19\",\n   \"shasum\": \"e2deb5cb912858603900a890630876e0830a9a912d2a71c05742b697c98bc768\",\n   \"build_date\": \"2025-01-21T02:21:53Z\",\n   \"src_urls\": [\n    \"https://github.com/xplshn/a-utils\"\n   ],\n   \"web_urls\": [\n    \"https://github.com/xplshn/a-utils\",\n    \"https://github.com/xplshn/Andes\"\n   ],\n   \"build_script\": \"https://github.com/pkgforge/soarpkgs/blob/main/binaries/a-utils/static.official.stable.yaml\",\n   \"build_log\": \"https://api.ghcr.pkgforge.dev/pkgforge/bincache/a-utils/official/ed?tag=0.0.5-x86_64-linux\\u0026download=ed.log\",\n   \"snapshots\": [\n    {\n     \"commit\": \"0.0.5-x86_64-linux\",\n     \"version\": \"0.0.5\"\n    }\n   ],\n   \"notes\": [\n    \"Pre Built Binary Fetched from Upstream. Check/Report @ https://github.com/xplshn/a-utils\"\n   ],\n   \"rank\": 1012\n  },\n... More Entries here ...\n}\n```\n\nNOTE: Not all fields are essential :)\n\nA schema of the metadata format can be found here [/misc/cmd/dbinRepoIndexGenerators/*/generator.go](https://github.com/xplshn/dbin/tree/master/misc/cmd/dbinRepoIndexGenerators)\n\n# Acknowledgements\n\n### Default repos ![pin](https://raw.githubusercontent.com/xplshn/dbin/master/misc/assets/pin.svg)\n###### NOTE: All of them are based on external sources, except AppBundleHUB. As I'm not a package maintainer. The default repos come within the same file\n\n- [PkgForge's repos](https://docs.pkgforge.dev/repositories): External repository with __Portable__ programs that are _truly static, or otherwise self-contained_ using a wrapper format\n   - Pkgcache: 206 \u003c!-- PKGCACHE_COUNT --\u003e\n     - Detailed repo info: https://docs.pkgforge.dev/repositories/pkgcache\n     - Package request doc: https://docs.pkgforge.dev/repositories/pkgcache/package-request\n   - Bincache: 3925 \u003c!-- BINCACHE_COUNT --\u003e\n     - Detailed repo info: https://docs.pkgforge.dev/repositories/bincache\n     - Package request doc: https://docs.pkgforge.dev/repositories/bincache/package-request\n   - Note however that pkgforge also has dynamic (unportable) programs/packages (that only run on Debian \u0026 derivatives), `dbin` filters these out, leaving behind only the static/portable programs. These are a minority of the  programs included.\n- [AppBundleHub](https://github.com/xplshn/AppBundleHUB): Only self-hosted repository: __Portable__ programs in .AppBundle format\n  - 34 \u003c!-- APPBUNDLEHUB_COUNT --\u003e\n\n##### Endpoints\n\n- Lite (recommended): `https://d.xplshn.com.ar/misc/cmd/1.6/amd64_linux.lite.cbor.zst`: .lite version doesn't include all possible fields of `dbin info`, only those which are relevant to the user \u0026 are used by `dbin`. Namely: `{Web Manifest, Sha256, Screenshots, IconURL, Provides, AppsStreamID, LongDescription}`\n- NLite (default): `https://d.xplshn.com.ar/misc/cmd/1.6/amd64_linux.nlite.cbor.zst`: .nlite is like .lite, but includes all the fields that upstream forces me to. Namely: \"Web Manifest\"\n- Complete: `https://d.xplshn.com.ar/misc/cmd/1.6/amd64_linux.cbor.zst`: opposite of .lite, contains all fields of the DbinItem type defined in the repository generators at [misc/cmd/dbinRepoIndexGenerators/*/generator.go](misc/cmd/dbinRepoIndexGenerators)\n\nIt makes no difference which endpoint you choose. `.lite` will be the best option for embedded hardware, unmarshalling the Complete endpoint is slow on embedded hardware, from experience, even for the MT7622 router.\n\nNOTE: If you're using an Opteron Venus or similar ancient CPU, it may be better to use the uncompressed .lite endpoint, as the bottleneck is your CPU, not network\n\n## Optional repos\n- [AM repo](https://docs.pkgforge.dev/repositories/external/am): External repository with not-so portable programs that work only on glibc-based distros. The packages come from the [AM](https://github.com/ivan-hc/AM) package manager\n  - 2264 \u003c!-- AM_COUNT --\u003e\n  - NOTE: Scrapped by pkgforge. Adapted to `dbin` format at `dbin-metadata`\n  - URL: `https://d.xplshn.com.ar/misc/cmd/1.6/AM_amd64_linux.lite.cbor.zst`\n\n- [PkgForge Go repo](https://docs.pkgforge.dev/repositories/external/go): External repository with __Portable__ _truly static_ programs, they are the result of scrapping various sources with Go repositories and compilng them. You can read more about the process at the docs of the upstream project: https://docs.pkgforge.dev/repositories/external/pkgforge-go\n  - The binaries in this repo are Go projects that have been fetched, filtered and built automagically\n  - 31275 \u003c!-- GO_COUNT --\u003e\n  - URL: `https://d.xplshn.com.ar/misc/cmd/1.6/pkgforge-go_amd64_linux.lite.cbor.zst`\n\n- [PkgForge Cargo repo](https://docs.pkgforge.dev/repositories/external/pkgforge-cargo):\n  - The binaries in this repo are Rust projects that have been fetched, filtered and built automagically\n  - 6142 \u003c!-- CARGO_COUNT --\u003e\n  - URL: `https://d.xplshn.com.ar/misc/cmd/1.6/pkgforge-cargo_amd64_linux.lite.cbor.zst`\n\n### Libraries\nI am using these libraries for `dbin`:\n1. https://github.com/urfave/cli (v3)\n2. https://github.com/hedzr/progressbar (an attractive-looking progressbar, but with a messy API and codebase. Currently the only good alternative to mpb/v8+)\n3. https://github.com/goccy/go-json (index files can be .json)\n4. https://github.com/goccy/go-yaml (config \u0026\u0026 index files can be .yaml)\n5. https://github.com/klauspost/compress (index files can be .zst \u0026\u0026 .gz)\n6. https://github.com/fxamacker/cbor (index files can be .cbor)\n7. https://github.com/zeebo/blake3 (checksums)\n8. https://golang.org/x/term\n\n## Contributing\nContributions are welcome! Whether you've found a bug, have a feature request, or wish to improve the documentation, your input is valuable. Fork the repository, make your changes, and submit a pull request. Together, we can make dbin even more powerful and simpler. If you can provide repos that meet the requirements to add them to `dbin`, I'd be grateful.\n\n## License\ndbin is licensed under the ISC (equivalent to MIT but without unnecessary legal wording) or RABRMS Licenses, choose whichever fits your needs best.\n\n## Its pretty safe to state that we are ![cooltext](https://github.com/user-attachments/assets/4397b1d3-44f2-4ae9-99c6-7379860bfa73)\n","funding_links":["https://www.paypal.com/donate/?hosted_button_id=77G7ZFXVZ44EE"],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxplshn%2Fdbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxplshn%2Fdbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxplshn%2Fdbin/lists"}