tus - resumable file uploads
We stand with the brave people of Ukraine. Stop the war. Find out<br>how you can help
tus – resumable file uploads
People are sharing more and more photos and videos every day, but<br>mobile<br>networks remain fragile. Platform APIs are often a mess and every<br>project builds its own file uploader. There are a thousand<br>one-week projects that barely work, when all we need is one real<br>project. One project done right.
We are going to do this right. Our aim is to make file uploads<br>reliable once and for all. tus is a new, open<br>protocol for resumable uploads
built on HTTP. It offers simple, cheap and reusable stacks for clients<br>and servers. It supports any language, any platform and any network.
It may seem to be an impossible dream. Perhaps that is because no one<br>has solved it yet. Still, we are confident and we are going to give it<br>our best shot. Join us on GitHub<br>and help us make the world a better place. Say "No!" to lost cat videos!<br>Say "Yes!" to tus!
Built as a layer on top of the popular HTTP protocol, tus can easily be<br>integrated into applications using existing libraries, proxies and firewalls,<br>and can be used directly from any website.
tus is ready for use in production. It has undergone numerous rounds of<br>improvements and received valuable feedback from people working at Vimeo, Google<br>and multiple other well-known companies.
tus is brought to you by the people behind
Transloadit but the source code to all of<br>our implementations, this website and even the protocol itself is accessible to<br>everyone under MIT license, directly from our GitHub<br>organization.
The specification only requires a very small set of features to be implemented<br>by clients and servers. tus embraces simplicity, fast development and iteration<br>speed for everyone.
tus nevertheless features a sizable list of extensions that introduce additional<br>functionality, such as parallel uploading or checksums and expiration. All of<br>these may be implemented according to your preferences.
We believe in an open and accessible evolution of this protocol. At any stage<br>since the beginning of tus, feedback has been appreciated and integrated. We<br>look forward to your contributions as well.
Say Hello 👋
We are still actively improving the protocol and all of its<br>implementations. We welcome your involvement and are happy to answer any<br>questions!
Follow @tus_io
Official implementations<br>tus-android-client<br>tus-java-client<br>tus-js-client<br>tusd<br>tusdotnet<br>TUSKit
Additionally, there are many other projects built and maintained<br>by our community.
Blog posts<br>tusd is now available in Nix package manager<br>May 20, 2025
tus Node.js server 2.0.0: integrate in all meta-frameworks and JS runtimes<br>Mar 25, 2025
tusd v2: better hooks, network resilience and IETF protocol<br>Sep 20, 2023
tus Node.js server 1.0.0: new packages, rewritten in TypeScript, and much more<br>Sep 4, 2023
Standardizing Resumable Uploads with the IETF<br>Aug 9, 2023
Who is using tus?
Do you (plan to) use tus?<br>Add your company
tus on GitHub<br>Idempotency keys are a helpful tool to prevent duplicate upload resources from being created, but it might not be that helpful for solving concatenation failures on its own as I initially assumed. If we take a look at the original issue of duplicate uploads because of failed concatenations, the duplicates are just a symptom, but not the actual fault. That is the concatenation failing in the first place due to the request timing out. To prevent that the concatenation could be run in a background process, which has more time to complete than the short-lived request context. So even if the request times out after X seconds, the concatenation can continue. Deduplication via Idempotency-Key would still play an important role here as it ensures that client retrieves the original upload resources when it retries the upload concatenation request.\n> \n> What do you think about this idea? The hurdle to getting this in tusd is higher since it currently doesn't have a system for running tasks in the background. But we might want to have this for other features as well (e.g. cleaning up old...