Releases: xplshn/dbin
1.7: bugfixes and fallback repo URLs
dbin 1.7 is a minor release, only introducing one feature, and some minor bugfixes.
-
config.gonow accepts fallback URLs for repository declarations. I strongly encourage users to dodbin config --newto get a fresh config that uses the fallback URLs -
config.go's warnings have been improved, it'll notify the users when adbinrepo URL corresponds to anotherdbinversion (which is not a critical error btw. Such a thing is allowed.) -
utility.gohas improved error reporting foraccessCachedOrFetch() -
fetch.gointroduced more error handling, to detect more invalid file types -
dbin searchcan now receive the-r/--repo/--reposflag to filter by repositories (e, g:dbin search -r pkgcache,dbin search -r pkgcache,pkgcache-go`) -
dbin listhas been refactored to support-r/--repo/--reposand have it work the same way as in search.go. Previously, it didn't support multiple repos. -
Fixed update.go's error reporting
-
Updated dependencies and introduced https://github.com/adrg/xdg, this library helps keep
dbinfully xdg-compliant, and more portable than before
dbin <=1.1 has been decommissioned
I had ensured that old dbin versions, even 0.8 still kept working, but such a thing made the GH action that generates the repository indexes slow
I also removed the .yaml/.msgp endpoints from the repository index generators. This shouldn't trouble anyone, as dbin never supported .msgp and this endpoint was for another project of mine, and the .yaml endpoint wasn't in use by any other project either (at least not that I found with a Github search)
TODO: Further refactor the hooks system & make hooks be multi-line, and have an interpreter type. This is pending since the last release, as it'd break existing configs...
1.6: new logo, new repos, more features, less bloat
dbin 1.6 is a minor release, only introducing one feature, and some minor QOL changes. Its mostly a refactor.
-
dbin listcan now receive the-r/--reposflag to filter by repositories (e, g: "bincache", "pkgcache", etc) -
Program's LICENSE files optionally get downloaded to a directory the user can change via an env var or via the config (opt-out. Legal reasons)
-
Use a config directory, so, config file now lives at ~/.config/dbin/dbin.yaml (NOTE: We comply with XDG, so you can have your .config dir at any place, under any name.)
-
Bugfixes that had accumulated since the 1.5 release, among them: Fixes to the
--verboseand--silentflag, I had forgotten to include the logging condition in some prints. NOTE: We may switch to using a log function that automatically handles this. -
Improved handling of the progressbar in
fetch.go. The progressbar doesn't look flaky when resuming a download anymore -
Refactored the way the hooks work, the complete list of exposed env vars to the integration commands is:
$DBIN(path to the$DBINbinary)$DBIN_INSTALL_DIR(as it appears todbin)$DBIN_CACHE_DIR(as it appears todbin)$DBIN_HOOK_BINARY(the path to the binary being installed/removed)$DBIN_HOOK_BINARY_EXT(the extension of the binary being installed/removed)$DBIN_HOOK_TYPE(either "install" or "remove")
-
You can now create hooks that get executed on binaries of any extension ("*"): Here's an example that makes programs with extensions be installed without them, example:
mpv.dwfs.AppBundlewill be installed asmpvif using this hook:-
Hooks: commands: "*": integrationCommand: sh -c "if [ \"$DBIN_HOOK_BINARY_EXT\" = \".AppBundle\" ]; then NF=\"$(basename \"$DBIN_HOOK_BINARY\" | cut -d'.' -f1)\"; mv \"$DBIN_HOOK_BINARY\" \"$DBIN_INSTALL_DIR/$NF\"; elif [ -n \"$DBIN_HOOK_BINARY_EXT\" ]; then mv \"$DBIN_HOOK_BINARY\" \"${DBIN_HOOK_BINARY%.*}\"; fi; $DBIN info > \"${DBIN_CACHE_DIR}/.info\"" deintegrationCommand: sh -c "if [ \"$DBIN_HOOK_BINARY_EXT\" = \".AppBundle\" ]; then NF=\"$(basename \"$DBIN_HOOK_BINARY\" | cut -d'.' -f1)\"; rm -f \"$DBIN_INSTALL_DIR/$NF\"; elif [ -n \"$DBIN_HOOK_BINARY_EXT\" ]; then rm -f \"${DBIN_INSTALL_DIR}/$(basename \"${DBIN_HOOK_BINARY%.*}\")\"; fi; $DBIN info > \"${DBIN_CACHE_DIR}/.info\"" runFromCache: true silent: true nop: false
-
-
Clean up of utility.go
-
Add support for the Darwin platform
-
Updated & removed dependencies
-
New logo by
peacefulwilliam(github.com/contrarybaton60) -
New optional repositories: https://github.com/xplshn/dbin?tab=readme-ov-file#optional-repos
- "pkgforge-go": automatically discovered & built static Go programs.
- "pkgforge-cargo": automatically discovered & built static Rust programs.
- "AM": programs from the AM package manager. not static, so: centered on
glibc, but some packages may work onmuslsystems.
TODO: Further refactor the hooks system & make hooks be multi-line, and have an interpreter type
1.5: Resumable downloads, pubkey verification, performance improvements, lots of fixes
- Added:
- Resumable downloads, with retention of the *.tmp files for up-to a day
- Pubkey verification
- Ability to change cache re-fetch time
@as repository label separator: You can now request packages using any of the following formats:namename#idname#id:versionname#id@reponame#id:version@repo
SilentYAML key in hooks
- Fixed:
$DBIN_NOCONFIG$DBIN_REOWN/RetakeOwnershipfindurl.go: Now will error out when given two binaryEntries that have the same namefindurl.go: Now will return only one binaryEntry when given an ambiguous request (one that matches more than 1 binary)config.go: the default config file no longer has NoConfig, ProgressbarFIFO, two values that shouldn't be in the file, but can be altered via their env
- Others:
- Refactored
dbin, tried to make the codebase consistent - The repository index generator for v1.5 now deduplicates WebURLs/SrcURLs, if WebURLs == SrcURLs, we discard WebURLs
- Added logic to get the repository labels contained within each repo index
- Changed the colors used by
search&info - Cleaned up the way hooks work
- Added a default hook which will be used by programs like
fastfetchto know how many binaries have been installed bydbin, without them having to calldbin info | wc -l - Unified cache/fetch logic for pubkeys & repository index files
- Simplified binary lottery in
info.go, we no longer pick the binaries based on theirrank, when there is more than one matching binary
- Refactored
NOTE: The binaries in this release have been updated to include the following minor fixes:
- Make the SyncInterval parameter in the config work
dbin config --newshould create the config in$DBIN_CONFIG_FILEif this variable is set- Added RiscV release
1.4: added `config` command + minor bug fixes
-
Added:
config--show: Will show you the internal variables ofdbinas they are set after reading the config (or not) and reading the DBIN_* env variables--new: Replaces your config with a default one
-
Fixed repository cache refreshment, when refreshing cache
dbinwould give an error, but the next runs after that would all work, so the issue would only be present every 6 hours. -
Made repository cache update every hour
-
Made config logic detect that you have an outdated default repo in your config
-
Fixed
search.go's indicator for cached programs -
Fixed
run.go's cache logic -
A small refactor of main.go, utility.go, info.go, config.go & the repository index generators
1.3 - New versioned repo index format!
1.3 - dbin evolves once again!
dbinnow versions its repo index format, and it is hardcoded to each version. This should make the URLs for the repos be easier to readdbinnow caches its metadata (6hours), if have this enabled in your config. (this behavior gets disabled with DBIN_NOCONFIG)dbinnow EXCLUDES all non-portable programs from the reposdbinhas gained the ability to usefile:///as a repo index URLdbin's parsing of env variables in its Config struct has been reworked to be more idiomatic and work with aliasesdbinnow shows you the notes and licenses of packagespelfdwas recently removed from the repos. As such, I've developed a replacement, which will be introduced soon and will make it asdbin's AppBundle/AppImage/RunImage/FlatImage integrator, very soon
NOTE: Please change your dbin config to use the new repo, or remove the config. This won't be necessary again as repo URLs now come versioned and dbin will be able to fix an old config.
A follow-up release is imminent! Stay tuned!
TODO
Add -l/--limit flag ./search.go: Done!- Use
integraas default AppBundle/AppImage hook Add env vars to help section: Done! (in v1.5!)Add help section about config options: Done! (in v1.5!)
To document env vars, config options, etc
1.2 - Support for binary Snapshots and logic optimizations
- Support has been added for binary Snapshots, meaning, you can download a specific version of a program by specifying one of the snapshots of it that can be seen in
dbin info:
]~/Documents/TrulyMine/dbin@ dbin search micro edit
[i] micro#github.com.zyedidia.micro - Modern and intuitive terminal-based text editor
]~/Documents/TrulyMine/dbin@ dbin add micro
▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▌ 100.0% | micro
]~/Documents/TrulyMine/dbin@ dbin info micro | tail
: HEAD-5ee7fb6-250129T171353-x86_64-linux [2.0.14]
: HEAD-e4b0ad7-250131T175936-x86_64-linux
: HEAD-b432bb7-250201T094125-x86_64-linux [2.0.14]
: HEAD-bf4156c-250208T161959-x86_64-linux [2.0.14]
: HEAD-5a62a8e-250209T151943-x86_64-linux
: HEAD-c937479-250224T180102-x86_64-linux [2.0.14]
: HEAD-272a308-250227T190330-x86_64-linux [NA-2025-02-27]
: HEAD-3c68655-250301T135830-x86_64-linux [NA-2025-03-01]
: HEAD-2ae9812-250304T201523-x86_64-linux [2.0.14]
: HEAD-9835676-250308T140441-x86_64-linux [NA-2025-03-08]
]~/Documents/TrulyMine/dbin@ dbin add micro#github.com.zyedidia.micro:HEAD-9835676-250308T140441-
x86_64-linux
▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 100.0% | micro
]~/Documents/TrulyMine/dbin@
dbin's repo index file generator (modMetadata) has been optimized, I realized that we didn't need the ghcr_pkg field nor the ghcr_blob fields, as we could simply make the DownloadURL start withoci://to signify that the binary is hosted itghcr. This results in a much smaller index file, and much faster parsing. A 500ms improvement in my netbook. (this change is retro-compatible, you don't need to updatedbinin order to be benefited)- Consistency; install.go, fetch.go & findurl.go now use the
[]binaryEntrytype. This resulted in shorter, more efficient code.
NOTE: I don't quite agree with how upstream handles Snapshots, it is a bit inconsistent IMO. But it is a really useful and great feature.
NOTE: The Readme.md has been updated, be sure to check it out :)
Thanks for using my software! I hope it helps you in your day to day computer shenanigans!
1.1 - Proper error handling and general bug fixes
-
run.go's arg parsing and cache logic has been fixed -
fixed
config.go's handling of envDBIN_NOCONFIG -
main.gonow properly captures the Error interface that"github.com/urfave/cli/v3"returns -
HOTFIX: fetch.go, fixed a condition.
The FIRST.0 release!
1.0 is out!
-
--silentnow works with./install.go&&./remove.go -
Migrated to urfave/cli/v3 for argument handling
-
Added tab completion support
-
Added support for repository index files in:
- CBOR, a compact binary format aiming to replace JSON in time-sensitive operations where being human-readable isn't a priority
- JSON, most beloved serialization format
- YAML
-
The metadata can be compressed as GZIP (must end in ".gz"), or compressed as ZSTD (must end in ".zst"). Or not compressed at all...
-
The default repo index format is now CBOR
-
Switched config format from JSON to YAML
-
Removed the unnecessary BinaryInfo type, now we just use binaryEntry
-
Removed
metadata: map[string]interface{}, now we useuRepoIndex: []binaryEntryfor holding the unmarshalled repository index. The repository index is only unmarshalled once and shared across the codebase, so thatdbinonly does a single network request per instance. (NOTE; its not a global variable) -
Removed the "filters" in
listBinaries.go&&search.go -
TLDR;
dbinhas undergone various major refactors and gained stability
Ideas for new features or reducing the size of the dbin binaries are welcome.
TODO: Fix the "Skipped: " counter in update.go
NOTE: Hotfixes have been applied to this release
The 0.NINTH release!
- Metadata is now alphabetically sorted
- "info", "findurl" will use the binaryEntry of an existing binary to perform lookups, if only a name was specified. (this in turn also fixes "update" installing wrong package variants)
- parseBinaryEntry() now refuses to use ANSI escape codes if the output of dbin is being piped into another program
- the
DBIN_NOCONFIGandDBIN_CONFIG_FILEenv variables have been added and explained in the help page - dbin
searchnow accepts more than one search term - modMetadata.go now produces a ".lite" version of the metadata, which is used by default. It is a metadata file that does not contain the .provides field (AKA: "Extra bins")
- modMetadata.go now includes packages that don't have a bsum and only have a sha256sum
Hot fixes (post-release changes):
- Fixed the assertion in info.go that determined a binary's rank
- Now we show the binary's rank in "info"
- Simplified "info"'s handling of []string fields
dbin is now officially the only package manager capable of updating and keeping track of installed binaries, without using a config file or database of any kind. It also ONLY updates/removes binaries installed by it, and it skips symlinks.
NOTE: We will begin referring to our repository "metadata file" as a repository "INDEX" file. The actual file name in https://github.com/xplshn/dbin-metadata may or may not change
NOTE: We MAY migrate to using a more advanced CLI parsing library
The 0.EIGHTH release!
-
Migration to new repo
-
New metadata format, we now host packages in ghcr as well as Huggingface
-
Binaries can now be installed using any of the following syntax:
dbin add binaryName,dbin add binaryName#pkgId,dbin add binaryName#pkgId:version -
Updated libraries
-
The user can now specify repository indexes that end in .json.gz in the config
-
Greatly simplified the codebase
-
You can now specify the progressbar style you want in the config
-
Major overhaul of the codebase. Introduced the binaryEntry type, which shall be used everywhere in the codebase, instead of strings containing the binary names, etc.
-
"search" gained the ability to use more than one search term
-
(postRelease hotfixes 12/02/25), fixed "info" & "update". Now using go1.24.0 for releases.
NOTE: I'm wondering whether we should switch from JSON to another format. Any thoughts on this from the community would be appreciated. I want to use the same format for the repos and the config, to keep dbin lightweight in library dependencies.
As always, older versions of dbin are kept working on a best effort basis.