Tin is a Github-based Tcl package manager that I am working on: https://github.com/ambaker1/Tin ---- '''[arjen] - 2023-04-12 04:22:45''' I like the idea and I have actually contemplating something similar. The main issue, I guess, is assembling a registry of packages (but I know that in general there is a lot more involved ;) - see the other initiatives that exist or have existed at some time). Why not use a Wiki page to allow people to populate that registry with their favourites. Your package manager requires a minimum of configuration (mainly a file to install the right files and a github repository), so if that information is put into a Wiki page (with a similar minimal markup), then it would be easy to find them. And easy for people to contribute to. ---- '''[AMB] - 2023-09-08 23:27:21''' Thanks! I thought about this, and with version 1.0, what you mentioned is entirely possible. For example, if you created a package/repository called "foobar", and you wanted to share it, you could just have people run this code: ====== package require tin tin add -auto foobar https://github.com/username/foobar InstallFooBar.tcl tin save ====== This will add the installation instructions to the Tin List, and save it to a local configuration file on your machine. ---- '''[AMB] - 2023-10-19 17:48:15''' I decided to make Tin a lot more lightweight. Version 1.1 only has packages "Tin", "wob", and "flytrap" automatically included in the Tin list, to demonstrate how dependencies work. Other packages can be easily included with a "tin add" command. ---- '''[AMB] - 2025-02-09 02:16:50''' Version 2.0 (https://github.com/ambaker1/Tin/releases/tag/v2.0) eliminates the pre-packaged list of package installation, and simplifies the architecture behind automatically populating installation instructions from repository release tags. For example, to install the package "ndlist", the following code can be copied into a Tcl interpreter: ====== package require tin 2.0 tin autoadd ndlist https://github.com/ambaker1/ndlist install.tcl tin import ndlist ====== This new version of Tin should be more flexible for your package ecosystem needs. ---- '''[AMB] - 2025-03-02 21:37:00''' It was suggested to modify Tin to install from release assets on GitHub. This is possible using GitHub CLI, but I do not want Tin to be dependent on GitHub. It is designed to work with any Git repository. If you want to install from a GitHub release asset, this can be configured in the installation file. Here is an example of how one would configure an installation that utilizes release assets: Code to install package "foo" ====== package require tin tin add foo 1.0 https://github.com/username/foo v1.0 install_foo.tcl tin install foo ====== Installation file "install_foo.tcl" located in the repository ====== # Install dependency package require tin tin add bar 1.2 https://github.com/username/bar v1.2 install_bar.tcl tin depend bar 1.2 # Use GitHub CLI to download release assets (InstallFoo1.0.exe and foo1.0.zip) exec gh release download v1.0 --clobber; # --clobber overwrites # Customize installation for operating system switch -- $::tcl_platform(os) { Windows { # Run binary installation file exec InstallFoo1.0.exe } default { # Extract zip folder, and install contents to library folder package require zipfile::decode 0.7.1 ::zipfile::decode::unzipfile foo1.0.zip [pwd] set dir [tin mkdir -force foo 1.0] set files [glob -directory foo1.0 *] file copy {*}$files $dir } } ======---- '''[AMB] - 2025-03-03 17:38:23''' I was experimenting with the capabilities of Tin and realized that you can actually bypass the requirement of having an installation file in the repository. Here is an example of Tin being used to install "SpiceGenTcl", a Tcl package repository not configured with an install file. ====== # Script for installing a package from a repository release asset package require tin set version 0.65 set fid [open install.tcl w] puts $fid { package require tin package require zipfile::decode 0.7.1 # Download release assets using GitHub CLI exec gh release download @VERSION@ # Extract zip folder, and install contents to library folder ::zipfile::decode::unzipfile SpiceGenTcl@VERSION@.zip [pwd] set dir [tin mkdir -force SpiceGenTcl @VERSION@] set files [glob -directory SpiceGenTcl@VERSION@ *] file copy {*}$files $dir } close $fid tin bake install.tcl install.tcl VERSION $version tin add SpiceGenTcl $version https://github.com/georgtree/SpiceGenTcl $version [file join [pwd] install.tcl] tin install SpiceGenTcl file delete install.tcl; # Clean up ======