v1.0.0
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 https://github.com/tus/tusd/blob/master/docs/hooks.md 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 https://github.com/tus/tusd/blob/master/docs/hooks.md for more details. - The versions from now on will be prefixed with a
v
. So while it was previously0.13.3
, it will now bev1.2.3
, for example. - New uploads are now accept at the basepath with and without a trailing slash (e.g.
http://localhost:1080/files/
andhttp://localhost:1080/files
). A missing trailing slash was an easy newcomer mistake. This change should be it simpler for beginner to get started.
The github.com/tus/tusd
package has seen following changes:
- [BREAKING] The package import paths have been changed to be under the
github.com/tus/tusd/pkg/
prefix. Thegithub.com/tus/tusd
package is now available asgithub.com/tus/tusd/pkg/handler
. All other packages, such asgithub.com/tus/tusd/filestore
are now available asgithub.com/tus/tusd/pkg/filestore
. - [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
github.com/tus/tusd/consullocker
package, which provided a locking mechanism using the Consul services, has been removed due to low usage and higher maintenance costs. - [BREAKING] The
github.com/tus/tusd/etcd3locker
package, which provides a locking mechanism using the etcd3 server, has been move to the repository https://github.com/tus/tusd-etcd3-locker to simplify the test and CI setup for tusd. - [BREAKING] The
github.com/tus/tusd/limitedstore
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
github.com/tus/tusd.Config.DataStore
option has been removed. Its successorStoreComposer
should be used instead. - [BREAKING] The notifications channels inside
github.com/tus/tusd/pkg/handler.UnroutedHandler
(for example,CompleteUploads
) now sendHookEvent
instead ofFileInfo
. The new struct also contains details about the HTTP request which caused the notification to be fired. - [BREAKING] The interfaces around
github.com/tus/tusd.DataStore
have been redesigned in two ways:- Most operations now also accept a
context.Context
object for receiving HTTP request cancellation events. - 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.
- Most operations now also accept a
- The dependencies are now handled using Go modules and specified in
go.mod
andgo.sum
. This allows you to simply add tusd as a dependency for your project. - The
github.com/tus/tusd/pkg/handler.Config.PreUploadCreateCallback
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.