Skip to content
Choose a tag to compare


@Acconut Acconut released this
Choose a tag to compare

Release notes

This release cleans up many internal design flaws and inconsistencies while also adding some new features, explaining the high number of breaking changes. However, tusd's tus HTTP interface remains unchanged and tus 1.0 is still as supported as before. No updates to your tus clients should be necessary if they worked before.

For the precompiled tusd binary, which can be downloaded for every release, following important changes have been made:

  • [BREAKING] The -dir flag has been renamed to -upload-dir to emphasize that it defines where the uploads are getting stored on disk.
  • [BREAKING] The -store-size flag, which attempted to limit how much space would be used for uploads, has been removed without a replacement. Please see the discussion for the limitedstore package below for reasons.
  • [BREAKING] When using disk store, the completed uploads are not getting stored with the .bin suffix anymore. So if your completed upload was available at ./data/[ID].bin, it will now be stored at ./data/[ID] without a file extension. This decision has been made to unify the behavior of the disk, S3 and GCS storage.
  • [BREAKING] The upload information, which was previously available as the root object of the JSON payload for the file and HTTP hooks, has been moved to the Upload property. So while the payload previously looked like { "ID": "foo", ... }, it will now be { "Upload": { "ID": "foo", ... }, ... }.
  • The JSON payload for the file and HTTP hooks has gained the new Upload.Storage property. It contains details about where an upload is stored, for example its absolute file path or S3 object name. Please see for more details.
  • The JSON payload for the file and HTTP hooks has gained the new HTTPRequest property. It contains details about the HTTP request which caused this hook to be fired, for example the entire HTTP headers. Please see for more details.
  • The versions from now on will be prefixed with a v. So while it was previously 0.13.3, it will now be v1.2.3, for example.
  • New uploads are now accept at the basepath with and without a trailing slash (e.g. http://localhost:1080/files/ and http://localhost:1080/files). A missing trailing slash was an easy newcomer mistake. This change should be it simpler for beginner to get started.

The package has seen following changes:

  • [BREAKING] The package import paths have been changed to be under the prefix. The package is now available as All other packages, such as are now available as
  • [BREAKING] Support for older Go versions has been dropped. Only Go 1.12 and Go 1.13 are supported by this release. In the future only the two latest major versions of Go will be supported.
  • [BREAKING] The package, which provided a locking mechanism using the Consul services, has been removed due to low usage and higher maintenance costs.
  • [BREAKING] The package, which provides a locking mechanism using the etcd3 server, has been move to the repository to simplify the test and CI setup for tusd.
  • [BREAKING] The package attempted to limit the used space of all uploads. However, its design was flawed from the beginning as its internal state was not saved between server restarts, causing it to leak uploads. Therefore, and because of its low usage numbers, we decided to remove this package.
  • [BREAKING] The option has been removed. Its successor StoreComposer should be used instead.
  • [BREAKING] The notifications channels inside (for example, CompleteUploads) now send HookEvent instead of FileInfo. The new struct also contains details about the HTTP request which caused the notification to be fired.
  • [BREAKING] The interfaces around have been redesigned in two ways:
    1. Most operations now also accept a context.Context object for receiving HTTP request cancellation events.
    2. The upload operations (e.g. retrieving information and writing chunks) now operate on an Upload object instead of the upload ID, allowing data to be cached in between function calls.
  • The dependencies are now handled using Go modules and specified in go.mod and go.sum. This allows you to simply add tusd as a dependency for your project.
  • The has been added which gets invoked before an upload is created. It can be used validate an upload's metadata with the ability to reject invalid uploads.