Flag of Ukraine   We stand with the brave people of Ukraine. Stop the war. Find out how you can help.

🎄 Uppy 2.1-2.3: Audio plugin, fast and efficient streaming for Companion, production-ready Unsplash, and more

Last Christmas, we gave you Uppy 1.24, but this very next year, we’ll take it away (since it’s outdated by now) and give you a brand-new Uppy 2.3 🎁!

After the release of our latest major version, 2.0.0, we’ve been busy with many things. First of all is the long-awaited Audio plugin to record and upload live audio directly. We then worked on adding a fast and efficient streaming interface to Companion and made Unsplash production ready. Housekeeping was also part of the job: we made Status Bar improvements, moved from npm to Yarn 3, did some refactoring, and updated dependencies.

Last but not least, we got the issue count down from around 110 since 2.0.0 to around 45 now.

Audio plugin

Uppy now has a new @uppy/audio plugin for recording audio memos, sounds, jingling bells, Christmas carols, and all your holiday cheer. Check it out on the demo page.

@uppy/unsplash is now production ready

The Unsplash plugin has received an update, providing attribution to the image authors and adding some polish to make it look better. Being fully brand compliant with Unsplash means it’s now production ready. You can demo the plugin on the website or read the docs.

New streaming interface for Companion

Companion handles the server-to-server communication between your server and file storage providers such as Google Drive, Dropbox, Instagram, and the like. This bypasses the client (so a 5 GB video isn’t eating into your users’ data plans) and files are directly uploaded to the final destination. Companion is made to be effortlessly integrate-able with Uppy.

It used to work by downloading the requested file from a remote provider on the server to then start uploading it to the destination. This did the job, but it’s wasn’t ideal.

We now built streaming support into Companion, which means the download and upload can happen simultaneously. This can result in two times faster uploads, because we no longer have to wait for files to finish downloading before starting the upload process. It’s especially useful for large files and removes the need for a lot of storage space on the server, as data will be buffered in memory.

You can enable this by setting streamingUpload in the Companion options.

NOTE: Streaming is turned off by default. Do not turn it on yet if you’re using TUS for uploads, due to this tus-js-client bug.

Interested in using Companion? You can use Transloadit-hosted Companion on every Plan.

Status Bar error state improvements

The Status Bar plugin would get confused about upload errors in Uppy, and we’ve addressed this:

  • The error state is now shown in case of only one failed file instead of all failed files. The plugin used to get stuck in the uploading state when a single file failed.
  • Added “X of X files uploaded” below “Upload failed” for extra context.
  • Improved the error details button styling in the Status Bar and the file info card.
  • Status Bar state is set to complete if the user manually removes the failed files.

status bar improvements screenshot

Internal housekeeping

Yarn v3 instead of npm

We’ve switched the Uppy repo to Yarn 3 to improve package install performance. With our complex dependency graph and over thirty packages in a monorepo, we are seeing install times reduced by more than a few minutes!

We are using Corepack to make sure all Uppy contributors are using the same version of Yarn. If you are an Uppy contributor, please run the following commands to enable Corepack:

corepack -v || npm i -g corepack # install Corepack if not already installed
yarn -v || corepack enable # install Yarn through Corepack if not already installed
yarn || corepack yarn install # install npm dependencies using yarn

View the PR

Refactor locale scripts & generate types and docs

This is an internal change, but important nonetheless. Our locales now live in a separate locale.js file for every plugin instead of this.defaultLocale in the class. The docs and types are automatically updated when we add or remove new locale strings.

View the PR.

Automated release scripts

A lot of things need to happen when we’re publishing a new release. A complete redo of the automation script is now available for quick and secure releases.

Here are some highlights:

  • Releaser runs yarn release and will get a series of prompts to set up a release.
  • A changelog will be generated.
  • The contributions table will be updated.
  • GitHub Actions will create a release candidate pull request.
  • When approved, GitHub Actions automatically merges, publishes to the npm public registry, and creates CDN bundles.

View the PR.

And more

  • google-drive: plugin has been updated for brand compliance (#3178)
  • google-drive: sort Google Drive list by name #3069
  • status-bar: now shows all details on mobile when showProgressDetails is true (#3174)
  • core: move Uppy class to its own module (#3225)
  • angular: fix component crash by loosening package.json version constraints (#3210)
  • drop-target: exposed events (#3238)
  • companion: add maxFileSize option in companion for safety #3159
  • companion: new AWS S3 multipart presigned URL batching endpoint #3056
  • companion: improve CORS default headers #3167
  • companion: use GET instead of HEAD for getURLMeta for better server compatibility (especially signed S3 URLs) #3048
  • companion: deprecate missing uploadUrls option (will be required in the future) #3182
  • companion: close window on auth callback error and show error to user #3143
  • companion: cut off length of file names to avoid AWS error #3048
  • companion: safely escape <script> injected code in Companion’s send-token.js #3101
  • companion: upgrade aws-sdk #3334
  • companion: improve logging #3103
  • companion: change Provider/SearchProvider API to async and use streams instead #3159

Happy Holidays from the Uppy team! Enjoy Christmas and New Year, stay safe, take a walk outside. See you in 2022!