Amazon S3 (This link is likely to change in the future.) MHo 2013-03-28: Seems the links is dead. GWL 2014-03-22: This package is in TclLib.

The Amazon Simple Storage Service ( is an inexpensive service from that allows users to store, catalog, and retrieve data via HTTP.

The S3 package is a pure-Tcl library that allows a Tcl program to easily access this service. The library comes with TDP-style documentation and test cases, and it is portable without change between Windows and Linux. (Mac has not been tested, but it's pure Tcl. Testers appreciated.)

The package is currently in beta status. It relies on some Tcl 8.5 features, including dict and {*}.

The package is already in production use in some of the author's custom software. In addition, it has been used as the basis of a distributed-computation application currently also in beta.

Error reporting is complete, allowing precise recovery. Multi-file operations provide progress callbacks. Invocations have the option of running in blocking mode or being driven off the event loop, as the caller wishes.

Routines include

  • S3::REST - submit a low-level operation with full control by the caller.
  • S3::Configure - configure identity, defaults, and other options.
  • S3::SuggestBucket - Generate unique bucket names.
  • S3::ListAllMyBuckets - Just what it says.
  • S3::PutBucket - Create a new bucket.
  • S3::DeleteBucket - Delete an empty bucket.
  • S3::GetBucket - List the contents of a bucket.
  • S3::Put - Store data into the S3 service.
  • S3::Get - Fetch data from the S3 service.
  • S3::Delete - Delete data from the S3 service.
  • S3::Head - Get metadata about data in the S3 service.
  • S3::Push - Recursively store a directory tree into the S3 service.
  • S3::Pull - Recursively retrieve a directory tree from the S3 service.
  • S3::Toss - Recursively delete a directory tree from the S3 service.

See the documentation in the package for a full description of operations and arguments.

See Amazon SimpleDB

The TclLib amazon-s3 utility seems to be abandoned.

I started trying to use it years ago and quickly found that it was not sufficiently mature for real-world use.

I started fixing the problems I found, but ran into fundamental design flaws and started again from scratch. (I now have a robust library supporting s3 (with versioning), sns, sqs, ec2, iam, mfa, sts, sdb, ses etc...)

It seems that more than 2 years later my patches have not been acted on:

I would recommend that anyone looking to talk to AWS from Tcl avoid this package. If anyone involved in tcllib reads this, please consider removing the package from tcllib. The Amazon APIs are constantly evolving, and a package like this that is so out of date is likely to do more harm than good. There are more than 2 years worth of best-practice recommendations and security advisories from Amazon that this package has not included.

ak - 2014-06-20 18:27:42

Hello samoc. I am the overall maintainer of Tcllib (which leaves me holding the bag when an individual module/package maintainer disappears, like has apparently happened for S3 with Darren).

I am willing to take and apply patches for S3 to fix its problems.

I am also willing to have it replaced by newer code which is already up to date in whichever way. In that case I would however ask for a commitment from the author of the new code to maintain it before putting it into Tcllib.

If the author of such a package wants to keep his/her package separate from Tcllib then that is fine as well. However I will then need an url/location of the package I can point people to from the S3 documentation. Which means that while S3 would be deprecated and not installed at least its documentation would be left in place, with a forward to whichever package should be considered to be its proper replacement.

The email addresses I can be reached at for more detailed discussions can be found in my page here, Andreas Kupries.