Skip to content

Releases: xplshn/dbin

1.7: bugfixes and fallback repo URLs

31 Jul 03:59

Choose a tag to compare

dbin 1.7 is a minor release, only introducing one feature, and some minor bugfixes.

  • config.go now accepts fallback URLs for repository declarations. I strongly encourage users to do dbin config --new to get a fresh config that uses the fallback URLs

  • config.go's warnings have been improved, it'll notify the users when a dbin repo URL corresponds to another dbin version (which is not a critical error btw. Such a thing is allowed.)

  • utility.go has improved error reporting for accessCachedOrFetch()

  • fetch.go introduced more error handling, to detect more invalid file types

  • dbin search can now receive the -r/--repo/--reposflag to filter by repositories (e, g:dbin search -r pkgcache, dbin search -r pkgcache,pkgcache-go`)

  • dbin list has been refactored to support -r/--repo/--repos and 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 dbin fully 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

22 Jun 23:50
3edfdf7

Choose a tag to compare

dbin 1.6 is a minor release, only introducing one feature, and some minor QOL changes. Its mostly a refactor.

  • dbin list can now receive the -r/--repos flag 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 --verbose and --silent flag, 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 $DBIN binary)
    • $DBIN_INSTALL_DIR (as it appears to dbin)
    • $DBIN_CACHE_DIR (as it appears to dbin)
    • $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.AppBundle will be installed as mpv if 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 on musl systems.
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

26 May 09:15

Choose a tag to compare

  • 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:
      • name
      • name#id
      • name#id:version
      • name#id@repo
      • name#id:version@repo
    • Silent YAML key in hooks
  • Fixed:
    • $DBIN_NOCONFIG
    • $DBIN_REOWN/RetakeOwnership
    • findurl.go: Now will error out when given two binaryEntries that have the same name
    • findurl.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 fastfetch to know how many binaries have been installed by dbin, without them having to call dbin 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 their rank, when there is more than one matching binary

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 --new should create the config in $DBIN_CONFIG_FILE if this variable is set
  • Added RiscV release

1.4: added `config` command + minor bug fixes

11 May 14:21

Choose a tag to compare

  • Added: config

    • --show: Will show you the internal variables of dbin as 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 dbin would 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!

04 Apr 04:37

Choose a tag to compare

1.3 - dbin evolves once again!

  • dbin now versions its repo index format, and it is hardcoded to each version. This should make the URLs for the repos be easier to read
  • dbin now caches its metadata (6hours), if have this enabled in your config. (this behavior gets disabled with DBIN_NOCONFIG)
  • dbin now EXCLUDES all non-portable programs from the repos
  • dbin has gained the ability to use file:/// as a repo index URL
  • dbin's parsing of env variables in its Config struct has been reworked to be more idiomatic and work with aliases
  • dbin now shows you the notes and licenses of packages
  • pelfd was recently removed from the repos. As such, I've developed a replacement, which will be introduced soon and will make it as dbin'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 integra as 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

31 Mar 02:20
e36abf1

Choose a tag to compare

  • 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 with oci:// to signify that the binary is hosted it ghcr. 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 update dbin in order to be benefited)
  • Consistency; install.go, fetch.go & findurl.go now use the []binaryEntry type. 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

24 Feb 20:39

Choose a tag to compare

  • run.go's arg parsing and cache logic has been fixed

  • fixed config.go's handling of env DBIN_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!

20 Feb 09:26

Choose a tag to compare

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 use uRepoIndex: []binaryEntry for holding the unmarshalled repository index. The repository index is only unmarshalled once and shared across the codebase, so that dbin 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!

17 Feb 02:10

Choose a tag to compare

  • 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 and DBIN_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!

08 Feb 15:01

Choose a tag to compare

  • 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.