Releases: xplshn/dbin
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.go
now 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!
-
--silent
now 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: []binaryEntry
for holding the unmarshalled repository index. The repository index is only unmarshalled once and shared across the codebase, so thatdbin
only does a single network request per instance. (NOTE; its not a global variable) -
Removed the "filters" in
listBinaries.go
&&search.go
-
TLDR;
dbin
has 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_NOCONFIG
andDBIN_CONFIG_FILE
env variables have been added and explained in the help page - dbin
search
now 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.
The 0.SEVENTH release!
- Pretty multi progressbars are displayed when installing a binary or fetching a given URL [Added by @akkuman]
- The progressbar can be customized in the config :)
- The AppBundleHUB repo now comes included in dbin's official metadata
- Metadata is now only fetched once per instance of
dbin
- Optimized
update
functionality - Improved the checksum checks during install/fetch
- fsearch.go was fixed and now it won't display binaries without a description (2 binaries in the repos didn't have descriptions) (22f7456)
Officially, now the only file that dbin
ever writes, is the config, and whatever binaries you request. We don't need to create a local database. (we just use XATTR to save the info of the binaries within the binaries themselves, during install.).
dbin
does not ever push user data to the outside world, it only fetches binaries from the given repositories. Logs for the build process of each binary/package are available.
MISC
- AppBundleHUB, a repo that uses Github actions to build one-liner recipes of programs like Ungoogled Chromium, thunar, PCSX2, etc. The metadata is generated by the Appstream-helper, a tool I developed for AppBundleHUB that automatically fetches the upstrea metadata of these programs just by matching their name, and it creates a metadata.json that can be used as a repository for
dbin
. - I also created a readme for the programs that are in charge of creating
dbin
's metadata (the file which contains the name of the programs, their download_url, and a lot more info), https://github.com/xplshn/dbin/tree/master/misc/cmd
Hopefully, this will help spawn a lot more dbin
repos! :)
If you maintain a repository that has self-contained or static programs, please hit me up, I'm open to setting up a GH action for you to be able to offer your repo as a dbin
repo.
TODO
- Fuzzy search should allow the user to supply more than one word
- Make update.go a little bit more verbose (almost like it used to be...)
- git (more) gud?
The 0.SIXTH release!
- Added a config format
- The new config format now supports Hooks, these let you execute things based on the extension of the program being installed, or do actions upon installation of any binary. You can call external commands, and also use the
run --transparent
mode ofdbin
via"use_run_from_cache": true
. You can also enable or disable, or simply remove these hooks from your config. You may also choose to - Integration for formats like AppBundle, AppImage, and NixAppImage has been added (these are simple Hooks in the default config)
info
(without arguments) does not require internet now, if you want to perform "lazy validation" (simply compare the names of files in your DBIN_INSTALL_DIR against the remote's) you can useinfo -r
.
Shall icons be displayed in the info
? I can use my eimg
library to display icons using Sixel, Kitty, Framebuffer graphics, ANSII ASCII art...
I still haven't added a multi-progressbar library. (I am both dumb and lazy. I couldn't figure it out last time I tried) (you may try making a PR :))
The 0.FIFTH release!
- Use XATTR in order to track which binaries were install by
dbin
, this ensures thatdbin
will never remove or update a binary that wasn't installed by it - Parallel
install
(haven't finished writing an implementation that uses multi progressbars, sorry) - Requests now disable cache
- findURL(), addToTrackerFile(), install.go & remove.go now always work in a bulk/parallel manner
- Improved info.go, made it work with the newer(not newest, yet) metadata format
- Added buffered IO in various funcs :)
The 0.FOURTH release
- General QOL improvements
- Cached binaries are no longer within
$DBIN_TRACKERFILE
- Enhanced cleanup of
run
- Better handling of the tracker file;
dbin run
is now sensitive to the trackerFile, eg: you can runbusybox/whoami
and then runcoreutils/whoami
andrun
will notice that$DBIN_CACHEDIR/whoami
is NOTcoreutils/whoami
and will re-fetch the correctwhoami
. dbin search
now handles cached binaries correctly
Note: This nix object correction thingie is computationally expensive. Its regexp. It may be unreliable. Thus, I am providing two sets of binaries, ones without this madness and ones with it enabled. (see the 0.THIRD release for details)
EDIT:
- Migrated metadata to
dbin-metadata
repo. I am deeply sorry for the 10 hours of downtime update
andinfo
(without arguments) will ignore symlinks
The 0.THIRD release
- Better error propagation in the functions related to
install
,update
,run
and in./findurl.go
- We now correct nix objects downloaded from the repo. Yeah, I do not know why those are there, but they're not being removed anytime soon (apparently I'm the only person that finds it annoying). (do
curl https://bin.ajam.dev/x86_64_Linux/Baseutils/openssl/c_rehash
to see an example of what I'm talking about) - Errors messages are now more consistent
revive
,gocritic
andgofumpt
return no warnings in our codebase :)- The help page now displays the env variables section
- Faith and hope has been re-instated, it was previously removed due to issues with the
json
parsing library
Note: This nix object correction thingie is expensive. Its regexp. It may be unreliable. Thus, I am providing two sets of binaries, ones without this madness and ones with it enabled.
The 0.SECOND release
- Better handling of errors in install.go, remove.go, update.go, run.go, findurl.go
- Handle verbosity levels correctly
- Updated the examples section in the help page
- Updated the CCMD library, now the help page prints its sections in the correct order (ALWAYS)
- We now support a hobby operating system called Windows (it was a 2 lines change anyways)
run.go
is now more portable, we dropped thesyscall
package in favor of usingos.Stat
to get the ATIME of files inDBIN_CACHEDIR