Package Repository Client

Package Client Toolset Source Code Repository

The Package Client Toolset is now considered production quality.

Download the Package Client Toolset installation script (Bash) for Linux and macOS

View documentation for version 1 of the Package Client Toolset

The Package Client Toolset, which is currently part of the Eagle project, allows users to obtain packages for both Tcl and Eagle.

It is implemented as a set of Tcl scripts, all of which support being evaluated in a native Tcl or Eagle interpreter.

It uses HTTPS to communicate with the Package Repository Server and the Package Downloads Server, which are just customized instances of Fossil.

All trunk check-ins on the Package Repository Server and Package Downloads Server are OpenPGP signed.

All files managed by the Package Repository Server and Package Downloads Server are OpenPGP signed.

The Package Downloads Client verifies the OpenPGP signatures on all downloaded files.

For each file that belongs to an Eagle package (e.g. script files), a Harpy script certificate file is also present.

This project is sponsored by Eyrie Solutions.


The Package Repository Server is used to keep track of all package metadata, e.g. the script used to obtain a given package and its associated cryptographic signatures. Here is an example package script that itself makes use of the public procedures exposed by the Package Client Toolset:

  apply [list [list] {
    set fileNames [list]

    lappend fileNames [file join Garuda1.0 dotnet.tcl]
    lappend fileNames [file join Garuda1.0 Garuda.dll]
    lappend fileNames [file join Garuda1.0 helper.tcl]
    lappend fileNames [file join Garuda1.0 msvcr100.dll]
    lappend fileNames [file join Garuda1.0 pkgIndex.tcl]
    lappend fileNames [file join Garuda1.0 Scripts ex_winForms.tcl]
    lappend fileNames [file join Garuda1.0 Tests all.tcl]

    set options [list \
        -persistent false -usePgp true -useAutoPath true]

    package require Eagle.Package.Downloader

    ::PackageDownloader::resetCookieAndLoginSimple
    ::PackageDownloader::downloadFiles tcl 8.4 "" $fileNames $options
    ::PackageDownloader::logoutAndResetCookie
  }]

And the associated OpenPGP signature for the above block is:

  -----BEGIN PGP SIGNATURE-----
  Version: GnuPG v2
  Comment: Eagle Package Repository

  iQIcBAABCAAGBQJdVOFMAAoJEFAslq9JXcLZ5vwP/iOOvF4VZT7jan+L0qE5y3kY
  lPyBemKftOEvZpc9ClY04nhloiHaZCpMm2zb21Uxwzyq2cMnDt+rKJ8ggAbmofdb
  VGgCgx98Vb7iS8zXIeQmbbo5Jq/e7PTem0yHgitGzNm3KPVeA9Frz/EUPz1/d5KV
  8bGEyWV092RqcXTfz25S/9iPphWWZKZOPzCYAyvjrztTu/VO2aITpXpmj3eb9JIe
  SsfO6ELtBmrN/BYBZKB9NZHdwRizgjR3ZaKKLtnigvP99JflIEnKiOPVLe/QdB8s
  VWdV6V7nDXo5QRZHZfgtey3CFO+QvNesktYt9zwrFyCaSIcHdlTbg3805q1eb0K4
  qq6nF3H/fhH6gsESX+YIJ5BdhbVWPJkZrHIaz0IpH077AJ8DbH+/lnj9XeChu87t
  iL1kWWAQytbNMd/jZccR5RiCxpz+IONea9oucQcQMft747sRpWztzfjIg3UKYtBF
  AO5MhoIVoSeiA4nYJ5K53Oz1EarrzW7toSV1S6hEfyeMjJyEoPlYSrgODAtz1pdb
  ZwG7GhKtvWYqv+JWkcezxIRbPh9RA0uRnoCnQD59BllTGWLyDF/TWjglRG5QVSqX
  5brKLB+WGR4FZSiCa3ayHVjq0ED5kV8vyO6P+zAvGCwAGTXqZ7hCiYFJjTe/0sJt
  +iQirt7s4XZCP3hPtWIH
  =pqYT
  -----END PGP SIGNATURE-----

Also see


In order to use the Package Repository Client, the following prerequisites must be met:

  1. The tls package available for use by the local Tcl installation; the IronTcl distribution already includes it.
  2. An implementation of the OpenPGP standard that includes appropriate command-line tools (e.g. GPG ).
  3. The Package Client Toolset , added to the auto_path of the local Tcl installation.
  4. The Package Signing Key (dated "2003-06-09", with fingerprint C3C7 5138 83EE DD3A ED1F E425 502C 96AF 495D C2D9 ) on your local OpenPGP key ring.

Currently, Package Repository Client is in the beta testing phase.

There are an extremely limited set of packages available and all access is controlled via API keys.

To request access in order to add the packages that you maintain, please contact Joe Mistachkin. Please include your public OpenPGP key so that it can be added to the appropriate key ring(s).

For those simply wanting to examine the client code, which is Tcl licensed, it can be found here .


Important Notes

  1. The GPG executable ("gpg2") must reside along the PATH.
  2. When using Eagle, the Harpy packages and their associated license certificates must be available.

How to use with Eagle Beta 50 or later:

  # NOTE: When troubleshooting, use the following commands first...
  namespace eval ::Eagle::Tools::Common {variable verboseGetUrl true}
  namespace eval ::PackageRepository {variable verboseUnknownResult true; variable verboseUriDownload true}
  namespace eval ::PackageDownloader {variable quiet false; variable verboseTemporaryDirectory true}

  # NOTE: Download and load the Package Client Toolset...
  loadPackageClientToolset [downloadAndExtractPackageClientToolset]

  # NOTE: Test that the Package Client Toolset is working...
  package require ZZZ.Test; # NOTE: Should (eventually) result in "0.0"

How to use with IronTcl:

  1. Download the Package Client Toolset from here .
  2. Extract the resulting ZIP file to a local directory.
  3. Add the local directory from the previous step joined with "client/1.0/neutral" to the auto_path.
  4. Evaluate the following commands:
  # NOTE: When troubleshooting, use the following commands first...
  namespace eval ::Eagle::Tools::Common {variable verboseGetUrl true}
  namespace eval ::PackageRepository {variable verboseUnknownResult true; variable verboseUriDownload true}
  namespace eval ::PackageDownloader {variable quiet false; variable verboseTemporaryDirectory true}

  # NOTE: Load the Package Client Toolset...
  package require Eagle.Package.Repository

  # NOTE: Test that the Package Client Toolset is working...
  package require ping; # NOTE: Should (eventually) result in "0.0"

Other distributions of Tcl/Tk can also be used; however, they will need to have the http and tls packages already available as HTTPS is a hard-and-fast requirement.