Skip to content

Releases: xplshn/dbin

1.1 - Proper error handling and general bug fixes

24 Feb 20:39
Compare
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
Compare
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
Compare
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
Compare
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.

The 0.SEVENTH release!

05 Dec 23:22
19ba2f6
Compare
Choose a tag to compare
  • 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
  1. Fuzzy search should allow the user to supply more than one word
  2. Make update.go a little bit more verbose (almost like it used to be...)
  3. git (more) gud?

The 0.SIXTH release!

06 Nov 00:47
Compare
Choose a tag to compare
  • 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 of dbin 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 use info -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!

06 Oct 19:18
Compare
Choose a tag to compare
  • Use XATTR in order to track which binaries were install by dbin, this ensures that dbin 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

03 Sep 03:14
Compare
Choose a tag to compare
  • 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 run busybox/whoami and then run coreutils/whoami and run will notice that $DBIN_CACHEDIR/whoami is NOT coreutils/whoami and will re-fetch the correct whoami.
  • 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 and info (without arguments) will ignore symlinks

The 0.THIRD release

30 Aug 17:54
Compare
Choose a tag to compare
  • 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 and gofumpt 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

24 Aug 23:15
Compare
Choose a tag to compare
  • 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 the syscall package in favor of using os.Stat to get the ATIME of files in DBIN_CACHEDIR