Last updated: November 29, 2024

<span aria-hidden="true" id="introducing-tus-10-for-reliable-resumable-uploads"></span>

# Introducing Tus 1.0 for reliable resumable uploads

![Marius Kleidl](/assets/images/teammates/avatar-acconut-1.jpg?dpl=dpl_AsMTCxwVXNuJ5TmdPevSCe63JuJo)

**Marius Kleidl**

Software Engineer · Munich, Germany · Show bio

[](https://x.com/Acconut%5F)[](https://github.com/Acconut)

It has been a while since we mentioned [tus⁠](https://tus.io), but there have been some cool developments and we would like to refresh your memory.

<span aria-hidden="true" id="so-yeah-uploading-is-broken"></span>

## So yeah, uploading is broken

At Transloadit, we care about providing a reliable upload service. Sometimes, however, it could happen that our servers misbehave, that a mobile user switches connections, or that your end user has unstable WiFi.

We are always doing what we can to limit cases like these, but also have to face the stark reality that too often an upload needs to be retried from the start.

This leads to a bad user experience, especially if it happens right in the middle of a 2 GB upload on a poor connection. What is even worse, the longer an upload takes, the longer it is exposed to this poor connection.

With media getting bigger and networks remaining fragile, we need a better way to handle these outages and hiccups.

<span aria-hidden="true" id="resumable-uploads"></span>

## Resumable uploads

Even though any decent network library implements retries, there is still much that can be improved. In an ideal situation, retries would pick up where the user left off and only upload the remaining bytes as soon as the connection is restored.

If this happens under the hood, so to speak, the user might not even notice that he had an interrupted connection, since the total upload time would barely be impacted.

Additionally, if we could redesign this in such a way that allows us to send multiple file parts simultaneously, the upload might even become faster.

However, for all of this to work, we first need resumable uploads.

There are many pieces of software and various implementations that already offer resumable uploads, but they are not as thorough or interoperable as we would like. They all speak a different dialect.

Imagine every web browser having its own incompatible HTTP dialect. We don't think that is how an\_open web\_ should work.

> A thousand incompatible one week projects that barely work, when all we need is one real project, done right.

And that is exactly what tus is.

<span aria-hidden="true" id="tus"></span>

## Tus

tus is an open protocol that has been[in development⁠](https://github.com/tus/tus-resumable-upload-protocol) for over a year, with high-level contributions from all over the world and from different companies - such as[Vimeo⁠](https://github.com/tus/tus-resumable-upload-protocol/issues/33#issuecomment-46794724).

Here is an example of what a simple back & forth would look like between a client and server that can speak tus 1.0:

Client:

```http
POST /files HTTP/1.1
Host: tus.example.org
Content-Length: 0
Entity-Length: 100
TUS-Resumable: 1.0.0
Metadata: filename d29ybGRfZG9taW5hdGlvbl9wbGFuLnBkZg==

```

Server:

```http
HTTP/1.1 201 Created
Location: https://tus.example.org/files/24e533e02ec3bc40c387f1a0e460e216
TUS-Resumable: 1.0.0

```

Client:

```http
PATCH /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1
Host: tus.example.org
Content-Type: application/offset+octet-stream
Content-Length: 30
Offset: 0
TUS-Resumable: 1.0.0

[first 30 bytes]

```

Server:

```http
HTTP/1.1 204 No Content
TUS-Resumable: 1.0.0

```

Apart from being a lightweight and well documented protocol, tus also provides two example implementations:

* [Client for jQuery⁠](https://github.com/tus/tus-jquery-client/)
* [Server in Go⁠](https://github.com/tus/tusd)

Additionally, there are many community provided[implementations⁠](https://tus.io/implementations.html) in languages like[iOS⁠](https://github.com/tus/TUSKit), [Android⁠](https://github.com/tus/tus-android-client),[Ruby⁠](https://github.com/picocandy/rubytus), [Node.js⁠](https://github.com/vayam/brewtus),[Python⁠](https://github.com/vayam/tuspy), [PHP⁠](https://github.com/leblanc-simon/php-tus), etc. Since we are building tus on top of *plain HTTP*, it is very straightforward to build implementations in your favorite language. If you fully implement the protocol and license it MIT, we will certainly consider adopting your project.

<span aria-hidden="true" id="nearing-10---last-call-for-feedback"></span>

## Nearing 1.0 - last call for feedback

The news today is that we are really[close to releasing⁠](https://tus.io/blog/2015/02/03/protocol-v1.0.0-prerelease/) a stable 1.0 version of the protocol and our reference implementations. For that reason, we are now calling for one last round of feedback over at our[1.0 pull request⁠](https://github.com/tus/tus-resumable-upload-protocol/pull/57) on GitHub.

Please don't be shy. We would love to hear your comments and recommendations on how to make tus 1.0 even better.

Finally, we encourage everybody who deals with uploads (yes, competitors too) to have have a look at tus and consider using it for your next release. Even though tus was started and funded by Transloadit, it is fully community owned and this will never change.

Here at [Transloadit](/index.md), we will be looking to implement tus in our upload and encoding service this year.

Welcoming comments on [Hacker News⁠](https://news.ycombinator.com/item?id=9026174)

[#handling-uploads-service](/blog/tags/handling-uploads-service.md)[#open-source](/blog/tags/open-source.md)[#tus](/blog/tags/tus.md)

### 👩‍💻 Join 20k+ developers

Sign up for our [monthly newsletter](/newsletters.md) to receive direct links to 3 exclusive tech — and 2 product updates. No less, no more.

Your email:

Get access

## File uploading and encoding. Made simple.

Transloadit streamlines file handling for developers, trusted by brands like Coursera and The New York Times. We’re known for a reliable API, top-notch support, and a strong commitment to open source, with projects like [Uppy⁠](https://uppy.io) and [Tus⁠](https://tus.io) setting standards in file processing.

[Sign up](/c/)[Book a Demo](https://survey.typeform.com/to/kRg47Xi5)

No credit card needed

Cancel anytime
