Quellcode durchsuchen

Merge branch 'main' into 4.x

* main:
  meta: enable prettier for markdown (#5133)
  @uppy/xhr-upload: do not throw when res is missing url (#5132)
  @uppy/companion: coerce `requestUrl` to a string (#5128)
  Release: uppy@3.25.0 (#5127)
  meta: enforce use of `.js` extension in `import type` declarations (#5126)
  @uppy/core: add instance ID to generated IDs (#5080)
  @uppy/core: reference updated i18n in Restricter (#5118)
Murderlon vor 11 Monaten
Ursprung
Commit
9d8fb57a74
71 geänderte Dateien mit 1316 neuen und 651 gelöschten Zeilen
  1. 202 75
      .github/CONTRIBUTING.md
  2. 1 1
      .prettierignore
  3. 94 36
      BACKLOG.md
  4. 70 50
      BUNDLE-README.md
  5. 237 154
      README.md
  6. 6 2
      SECURITY.md
  7. 3 3
      examples/aws-companion/README.md
  8. 12 5
      examples/aws-php/readme.md
  9. 6 5
      examples/custom-provider/README.md
  10. 12 9
      examples/digitalocean-spaces/README.md
  11. 5 3
      examples/multiple-instances/README.md
  12. 4 2
      examples/node-xhr/README.md
  13. 4 2
      examples/php-xhr/README.md
  14. 6 3
      examples/python-xhr/README.md
  15. 1 1
      examples/react-example/README.md
  16. 7 3
      examples/react-native-expo/readme.md
  17. 9 5
      examples/redux/README.md
  18. 2 1
      examples/svelte-example/README.md
  19. 3 2
      examples/transloadit-markdown-bin/README.md
  20. 2 1
      examples/transloadit/README.md
  21. 4 2
      examples/uppy-with-companion/README.md
  22. 2 1
      examples/vue3/README.md
  23. 10 3
      examples/xhr-bundle/README.md
  24. 10 4
      packages/@uppy/audio/README.md
  25. 10 4
      packages/@uppy/aws-s3/README.md
  26. 12 4
      packages/@uppy/box/README.md
  27. 9 4
      packages/@uppy/companion-client/README.md
  28. 75 32
      packages/@uppy/companion/ARCHITECTURE.md
  29. 47 45
      packages/@uppy/companion/KUBERNETES.md
  30. 23 10
      packages/@uppy/companion/README.md
  31. 14 5
      packages/@uppy/compressor/README.md
  32. 15 6
      packages/@uppy/core/README.md
  33. 14 6
      packages/@uppy/dashboard/README.md
  34. 10 4
      packages/@uppy/drag-drop/README.md
  35. 12 4
      packages/@uppy/dropbox/README.md
  36. 14 5
      packages/@uppy/facebook/README.md
  37. 12 5
      packages/@uppy/file-input/README.md
  38. 12 4
      packages/@uppy/form/README.md
  39. 13 4
      packages/@uppy/golden-retriever/README.md
  40. 14 5
      packages/@uppy/google-drive/README.md
  41. 12 5
      packages/@uppy/image-editor/README.md
  42. 10 4
      packages/@uppy/informer/README.md
  43. 13 6
      packages/@uppy/instagram/README.md
  44. 4 1
      packages/@uppy/locales/README.md
  45. 14 5
      packages/@uppy/onedrive/README.md
  46. 11 4
      packages/@uppy/progress-bar/README.md
  47. 7 5
      packages/@uppy/provider-views/README.md
  48. 7 2
      packages/@uppy/react-native/README.md
  49. 9 4
      packages/@uppy/react/README.md
  50. 10 4
      packages/@uppy/redux-dev-tools/README.md
  51. 6 2
      packages/@uppy/remote-sources/README.md
  52. 10 4
      packages/@uppy/screen-capture/README.md
  53. 15 5
      packages/@uppy/status-bar/README.md
  54. 10 4
      packages/@uppy/store-default/README.md
  55. 17 9
      packages/@uppy/store-redux/README.md
  56. 5 2
      packages/@uppy/svelte/README.md
  57. 6 2
      packages/@uppy/thumbnail-generator/README.md
  58. 11 4
      packages/@uppy/transloadit/README.md
  59. 10 4
      packages/@uppy/tus/README.md
  60. 14 5
      packages/@uppy/unsplash/README.md
  61. 14 5
      packages/@uppy/url/README.md
  62. 6 3
      packages/@uppy/utils/README.md
  63. 5 3
      packages/@uppy/utils/src/getDroppedFiles/README.md
  64. 23 15
      packages/@uppy/vue/README.md
  65. 10 4
      packages/@uppy/webcam/README.md
  66. 11 4
      packages/@uppy/xhr-upload/README.md
  67. 3 6
      packages/@uppy/xhr-upload/src/index.ts
  68. 14 5
      packages/@uppy/zoom/README.md
  69. 4 2
      packages/uppy/CHANGELOG.md
  70. 2 1
      private/README.md
  71. 5 2
      private/remark-lint-uppy/README.md

+ 202 - 75
.github/CONTRIBUTING.md

@@ -1,6 +1,8 @@
 ## Contributing to Uppy
 
-Fork the repository into your own account first. See the [GitHub Help](https://help.github.com/articles/fork-a-repo/) article for instructions.
+Fork the repository into your own account first. See the
+[GitHub Help](https://help.github.com/articles/fork-a-repo/) article for
+instructions.
 
 After you have successfully forked the repository, clone it locally.
 
@@ -9,8 +11,8 @@ git clone https://github.com/transloadit/uppy.git
 cd uppy
 ```
 
-We are using [Corepack][] to manage versions of [Yarn][].
-Corepack comes pre-installed with Node.js >=16.x, or can be installed through `npm`:
+We are using [Corepack][] to manage versions of [Yarn][]. Corepack comes
+pre-installed with Node.js >=16.x, or can be installed through `npm`:
 
 ```sh
 corepack -v || npm i -g corepack
@@ -42,7 +44,10 @@ As you edit Uppy code, the browser will live reload the changes.
 
 ### Companion
 
-If you’d like to work on features that the basic development version of Uppy doesn’t support, such as Uppy integrations with Instagram/Google Drive/Facebook etc., you need to set up your `.env` file (copy the contents of `.env.example` and adjust them based on what you need to work on), and run:
+If you’d like to work on features that the basic development version of Uppy
+doesn’t support, such as Uppy integrations with Instagram/Google Drive/Facebook
+etc., you need to set up your `.env` file (copy the contents of `.env.example`
+and adjust them based on what you need to work on), and run:
 
 ```bash
 yarn run dev:with-companion
@@ -54,42 +59,70 @@ Or, if you only want to run the Companion server:
 yarn run start:companion
 ```
 
-This would get the Companion instance running on `http://localhost:3020`. It uses [nodemon](https://github.com/remy/nodemon) so it will automatically restart when files are changed.
+This would get the Companion instance running on `http://localhost:3020`. It
+uses [nodemon](https://github.com/remy/nodemon) so it will automatically restart
+when files are changed.
 
 ### Live example
 
-An example server is running at <https://companion.uppy.io>, which is deployed with [Kubernetes](https://github.com/transloadit/uppy/blob/main/packages/%40uppy/companion/KUBERNETES.md)
+An example server is running at <https://companion.uppy.io>, which is deployed
+with
+[Kubernetes](https://github.com/transloadit/uppy/blob/main/packages/%40uppy/companion/KUBERNETES.md)
 
 ### How the Authentication and Token mechanism works
 
-This section describes how Authentication works between Companion and Providers. While this behaviour is the same for all Providers (Dropbox, Instagram, Google Drive, etc.), we are going to be referring to Dropbox in place of any Provider throughout this section.
+This section describes how Authentication works between Companion and Providers.
+While this behaviour is the same for all Providers (Dropbox, Instagram, Google
+Drive, etc.), we are going to be referring to Dropbox in place of any Provider
+throughout this section.
 
-The following steps describe the actions that take place when a user Authenticates and Uploads from Dropbox through Companion:
+The following steps describe the actions that take place when a user
+Authenticates and Uploads from Dropbox through Companion:
 
 * The visitor to a website with Uppy clicks `Connect to Dropbox`.
-* Uppy sends a request to Companion, which in turn sends an OAuth request to Dropbox (Requires that OAuth credentials from Dropbox have been added to Companion).
-* Dropbox asks the visitor to log in, and whether the Website should be allowed to access your files
-* If the visitor agrees, Companion will receive a token from Dropbox, with which we can temporarily download files.
-* Companion encrypts the token with a secret key and sends the encrypted token to Uppy (client)
-* Every time the visitor clicks on a folder in Uppy, it asks Companion for the new list of files, with this question, the token (still encrypted by Companion) is sent along.
-* Companion decrypts the token, requests the list of files from Dropbox and sends it to Uppy.
-* When a file is selected for upload, Companion receives the token again according to this procedure, decrypts it again, and thereby downloads the file from Dropbox.
-* As the bytes arrive, Companion uploads the bytes to the final destination (depending on the configuration: Apache, a Tus server, S3 bucket, etc).
+* Uppy sends a request to Companion, which in turn sends an OAuth request to
+  Dropbox (Requires that OAuth credentials from Dropbox have been added to
+  Companion).
+* Dropbox asks the visitor to log in, and whether the Website should be allowed
+  to access your files
+* If the visitor agrees, Companion will receive a token from Dropbox, with which
+  we can temporarily download files.
+* Companion encrypts the token with a secret key and sends the encrypted token
+  to Uppy (client)
+* Every time the visitor clicks on a folder in Uppy, it asks Companion for the
+  new list of files, with this question, the token (still encrypted by
+  Companion) is sent along.
+* Companion decrypts the token, requests the list of files from Dropbox and
+  sends it to Uppy.
+* When a file is selected for upload, Companion receives the token again
+  according to this procedure, decrypts it again, and thereby downloads the file
+  from Dropbox.
+* As the bytes arrive, Companion uploads the bytes to the final destination
+  (depending on the configuration: Apache, a Tus server, S3 bucket, etc).
 * Companion reports progress to Uppy, as if it were a local upload.
 * Completed!
 
 ### Instagram integration
 
-Even though facebook [allows using](https://developers.facebook.com/blog/post/2018/06/08/enforce-https-facebook-login/) http://localhost in dev mode, Instagram doesn’t seem to support that, and seems to need a publically available domain name with HTTPS. So we will tunnel requests to localhost using `ngrok`.
+Even though facebook
+[allows using](https://developers.facebook.com/blog/post/2018/06/08/enforce-https-facebook-login/)
+http://localhost in dev mode, Instagram doesn’t seem to support that, and seems
+to need a publically available domain name with HTTPS. So we will tunnel
+requests to localhost using `ngrok`.
 
-Make sure that you are using a development facebook app at <https://developers.facebook.com/apps>
+Make sure that you are using a development facebook app at
+<https://developers.facebook.com/apps>
 
-Go to “Instagram Basic Display” and find `Instagram App ID` and `Instagram App Secret`. Put them in a file called `.env` in the repo root:
+Go to “Instagram Basic Display” and find `Instagram App ID` and
+`Instagram App Secret`. Put them in a file called `.env` in the repo root:
 
-    COMPANION_INSTAGRAM_KEY="Instagram App ID"
-    COMPANION_INSTAGRAM_SECRET="Instagram App Secret"
+```
+COMPANION_INSTAGRAM_KEY="Instagram App ID"
+COMPANION_INSTAGRAM_SECRET="Instagram App Secret"
+```
 
-**Note!** `ngrok` seems to be blocked by Instagram now, so you may have to find an alternative.
+**Note!** `ngrok` seems to be blocked by Instagram now, so you may have to find
+an alternative.
 
 Run
 
@@ -100,19 +133,25 @@ ngrok http 3020
 Note the ngrok https base URL, for example `https://e0c7de09808d.ngrok.io` and
 append `/instagram/redirect` to it, such as:
 
-    https://e0c7de09808d.ngrok.io/instagram/redirect
+```
+https://e0c7de09808d.ngrok.io/instagram/redirect
+```
 
-Add this full ngrok URL to `Valid OAuth Redirect URIs` under `Instagram Basic Display`.
+Add this full ngrok URL to `Valid OAuth Redirect URIs` under
+`Instagram Basic Display`.
 
 Edit `.env` and change to your ngrok URI:
 
-    COMPANION_DOMAIN="e0c7de09808d.ngrok.io"
-    COMPANION_PROTOCOL="https"
-    VITE_COMPANION_URL = 'https://e0c7de09808d.ngrok.io'
+```
+COMPANION_DOMAIN="e0c7de09808d.ngrok.io"
+COMPANION_PROTOCOL="https"
+VITE_COMPANION_URL = 'https://e0c7de09808d.ngrok.io'
+```
 
 Go to: Roles -> Roles -> Add Instagram testers -> Add your instagram account
 
-Go to your instagram account at <https://www.instagram.com/accounts/manage_access/>
+Go to your instagram account at
+<https://www.instagram.com/accounts/manage_access/>
 
 Tester invites -> Accept
 
@@ -120,8 +159,13 @@ Now you should be able to test the Instagram integration.
 
 ### Requiring files
 
-* If we are `require()`ing a file from the same subpackage, we can freely use relative imports as long as the required file is under the `src` directory (for example to import `@uppy/dashboard/src/utils/hi.js` from `@uppy/dashboard/src/index.js`, use `require('./utils/hi.js')`).
-* But if we want to `require()` some file from another subpackage - we should use global @uppy requires, and they should always be in the form of `@uppy/:packageName/(lib instead of src)/(same path).js`
+* If we are `require()`ing a file from the same subpackage, we can freely use
+  relative imports as long as the required file is under the `src` directory
+  (for example to import `@uppy/dashboard/src/utils/hi.js` from
+  `@uppy/dashboard/src/index.js`, use `require('./utils/hi.js')`).
+* But if we want to `require()` some file from another subpackage - we should
+  use global @uppy requires, and they should always be in the form of
+  `@uppy/:packageName/(lib instead of src)/(same path).js`
 
 ## Tests
 
@@ -135,48 +179,81 @@ yarn test:unit
 
 ### End-to-End tests
 
-We use [Cypress](https://www.cypress.io/) for our e2e test suite. Be sure to checkout “[Writing your first test](https://docs.cypress.io/guides/getting-started/writing-your-first-test#Add-a-test-file)” and the “[Introduction to Cypress](https://docs.cypress.io/guides/core-concepts/introduction-to-cypress#Cypress-Can-Be-Simple-Sometimes)”. You should also be aware of the “[Best Practices](https://docs.cypress.io/guides/references/best-practices)”.
+We use [Cypress](https://www.cypress.io/) for our e2e test suite. Be sure to
+checkout
+“[Writing your first test](https://docs.cypress.io/guides/getting-started/writing-your-first-test#Add-a-test-file)”
+and the
+“[Introduction to Cypress](https://docs.cypress.io/guides/core-concepts/introduction-to-cypress#Cypress-Can-Be-Simple-Sometimes)”.
+You should also be aware of the
+“[Best Practices](https://docs.cypress.io/guides/references/best-practices)”.
 
-To get started make sure you have your `.env` set up. Copy the contents of `.env.example` to a file named `.env` and add the values relevant for the test(s) you are trying to run.
+To get started make sure you have your `.env` set up. Copy the contents of
+`.env.example` to a file named `.env` and add the values relevant for the
+test(s) you are trying to run.
 
 To start the testing suite run:
 
-    yarn e2e
+```
+yarn e2e
+```
 
-This will run Cypress in watch-mode, and it will pick up and rebuild any changes to JS files. If you need to change other files (like CSS for example), you need to run the respective `yarn build:*` scripts.
+This will run Cypress in watch-mode, and it will pick up and rebuild any changes
+to JS files. If you need to change other files (like CSS for example), you need
+to run the respective `yarn build:*` scripts.
 
-Alternatively the following command is the same as the above, except it doesn’t run `build` first:
+Alternatively the following command is the same as the above, except it doesn’t
+run `build` first:
 
-    yarn e2e:skip-build
+```
+yarn e2e:skip-build
+```
 
 To generate the boilerplate for a new test run:
 
-    yarn e2e:generate
+```
+yarn e2e:generate
+```
 
 ## Zoom
 
-See above Instagram instructions for setting up a tunnel, but replace `instagram` with `zoom` in the URL. Note that **you also have to add the OAuth redirect URL to `OAuth allow list`** in the Zoom Oauth app settings or it will not work.
+See above Instagram instructions for setting up a tunnel, but replace
+`instagram` with `zoom` in the URL. Note that **you also have to add the OAuth
+redirect URL to `OAuth allow list`** in the Zoom Oauth app settings or it will
+not work.
 
 Add the following scopes: `recording:read`, `user:read`, `user_info:read`
 
-To test recording a meeting, you need to sign up for a Zoom Pro trial (can be cancelled later), for example using their iOS app.
+To test recording a meeting, you need to sign up for a Zoom Pro trial (can be
+cancelled later), for example using their iOS app.
 
 ## Releases
 
-Releases are managed by GitHub Actions, here’s an overview of the process to release a new Uppy version:
+Releases are managed by GitHub Actions, here’s an overview of the process to
+release a new Uppy version:
 
 * Run `yarn release` on your local machine.
-* Follow the instructions and select what packages to release. **Warning:** skipping packages results in those changes being “lost”, meaning they won’t be picked up in the changelog automatically next release. Always try to release all.
+* Follow the instructions and select what packages to release. **Warning:**
+  skipping packages results in those changes being “lost”, meaning they won’t be
+  picked up in the changelog automatically next release. Always try to release
+  all.
 * Before committing, check if the generated files look good.
-* When asked to edit the next CHANGELOG, only include changes related to the package(s) you selected for release.
-* Push to the Transloadit repository using the command given by the tool. Do not open a PR yourself, the GitHub Actions will create one and assign you to it.
-* Wait for all the GitHub Actions checks to pass. If one fails, try to figure out why. Do not go ahead without consulting the rest of the team.
-* Review the PR thoroughly, and if everything looks good to you, approve the PR. Do not merge it manually!
-* After the PR is automatically merged, the demos on transloadit.com should also be updated. Check that some things work locally:
-  * the demos in the demo section work (try one that uses an import robot, and one that you need to upload to)
-  * the demos on the homepage work and can import from Google Drive, Instagram, Dropbox, etc.
-
-If you don’t have access to the transloadit.com source code ping @arturi or @goto-bus-stop and we’ll pick it up. :sparkles:
+* When asked to edit the next CHANGELOG, only include changes related to the
+  package(s) you selected for release.
+* Push to the Transloadit repository using the command given by the tool. Do not
+  open a PR yourself, the GitHub Actions will create one and assign you to it.
+* Wait for all the GitHub Actions checks to pass. If one fails, try to figure
+  out why. Do not go ahead without consulting the rest of the team.
+* Review the PR thoroughly, and if everything looks good to you, approve the PR.
+  Do not merge it manually!
+* After the PR is automatically merged, the demos on transloadit.com should also
+  be updated. Check that some things work locally:
+  * the demos in the demo section work (try one that uses an import robot, and
+    one that you need to upload to)
+  * the demos on the homepage work and can import from Google Drive, Instagram,
+    Dropbox, etc.
+
+If you don’t have access to the transloadit.com source code ping @arturi or
+@goto-bus-stop and we’ll pick it up. :sparkles:
 
 ### Releasing hotfix patch
 
@@ -241,13 +318,16 @@ git push && git push --tags
 
 #### Hotfix other packages
 
-For other Uppy packages, the process should be like Companion,
-but hasn’t been documented yet. Make sure to remember to run `yarn` as well as building the package first, then you can release it.
-If you do release any other packages, please update this doc.
+For other Uppy packages, the process should be like Companion, but hasn’t been
+documented yet. Make sure to remember to run `yarn` as well as building the
+package first, then you can release it. If you do release any other packages,
+please update this doc.
 
 ## CSS guidelines
 
-The CSS standards followed in this project closely resemble those from [Medium’s CSS Guidelines](https://gist.github.com/fat/a47b882eb5f84293c4ed). If something is not mentioned here, follow their guidelines.
+The CSS standards followed in this project closely resemble those from
+[Medium’s CSS Guidelines](https://gist.github.com/fat/a47b882eb5f84293c4ed). If
+something is not mentioned here, follow their guidelines.
 
 ### Naming conventions
 
@@ -286,7 +366,9 @@ Syntax: `[<namespace>-]<ComponentName>[-descendentName][--modifierName]`
 
 ### SASS
 
-This project uses SASS, with some limitations on nesting. One-level-deep nesting is allowed, but nesting may not extend a selector by using the `&` operator. For example:
+This project uses SASS, with some limitations on nesting. One-level-deep nesting
+is allowed, but nesting may not extend a selector by using the `&` operator. For
+example:
 
 ```sass
 /* BAD */
@@ -308,7 +390,8 @@ This project uses SASS, with some limitations on nesting. One-level-deep nesting
 
 ### Mobile-first responsive approach
 
-Style to the mobile breakpoint with your selectors, then use `min-width` media queries to add any styles to the tablet or desktop breakpoints.
+Style to the mobile breakpoint with your selectors, then use `min-width` media
+queries to add any styles to the tablet or desktop breakpoints.
 
 ### Selector, rule ordering
 
@@ -350,7 +433,10 @@ h1 {
 
 ## Adding a new integration
 
-Before opening a pull request for the new integration, open an issue to discuss said integration with the Uppy team. After discussing the integration, you can get started on it. First off, you need to construct the basic components for your integration. The following components are the current standard:
+Before opening a pull request for the new integration, open an issue to discuss
+said integration with the Uppy team. After discussing the integration, you can
+get started on it. First off, you need to construct the basic components for
+your integration. The following components are the current standard:
 
 * `Dashboard`: Inline Dashboard (`inline: true`)
 * `DashboardModal`: Dashboard as a modal
@@ -358,9 +444,18 @@ Before opening a pull request for the new integration, open an issue to discuss
 * `ProgressBar`
 * `StatusBar`
 
-All these components should function as references to the normal component. Depending on how the framework you’re using handles references to the DOM, your approach to creating these may be different. For example, in React, you can assign a property of the component to the reference of a component ([see here](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/packages/%40uppy/react/src/Dashboard.js#L47-L54)). This may differ in your framework, but from what we’ve found, the concepts are generally pretty similar.
+All these components should function as references to the normal component.
+Depending on how the framework you’re using handles references to the DOM, your
+approach to creating these may be different. For example, in React, you can
+assign a property of the component to the reference of a component
+([see here](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/packages/%40uppy/react/src/Dashboard.js#L47-L54)).
+This may differ in your framework, but from what we’ve found, the concepts are
+generally pretty similar.
 
-If you’re familiar with React, Vue or soon Svelte, it might be useful to read through the code of those integrations, as they lay out a pretty good structure. After the basic components have been built, here are a few more important tasks to get done:
+If you’re familiar with React, Vue or soon Svelte, it might be useful to read
+through the code of those integrations, as they lay out a pretty good structure.
+After the basic components have been built, here are a few more important tasks
+to get done:
 
 * Add TypeScript support in some capacity (if possible)
 * Write documentation
@@ -369,7 +464,8 @@ If you’re familiar with React, Vue or soon Svelte, it might be useful to read
 
 ### Common issues
 
-Before going into these tasks, here are a few common gotchas that you should be aware of.
+Before going into these tasks, here are a few common gotchas that you should be
+aware of.
 
 #### Dependencies
 
@@ -395,15 +491,23 @@ Your `package.json` should resemble something like this:
 }
 ```
 
-The most important part about this is that `@uppy/core` is a peer dependency. If your framework complains about `@uppy/core` not being resolved, you can also add it as a dev dependency
+The most important part about this is that `@uppy/core` is a peer dependency. If
+your framework complains about `@uppy/core` not being resolved, you can also add
+it as a dev dependency
 
 ### Adding TypeScript Support
 
-This section won’t be too in-depth, because TypeScript depends on your framework. As general advice, prefer using `d.ts` files and vanilla JavaScript over TypeScript files. This is circumstantial, but it makes handling the build system a lot easier when TypeScript doesn’t have to transpiled. The version of typescript in the monorepo is `4.1`.
+This section won’t be too in-depth, because TypeScript depends on your
+framework. As general advice, prefer using `d.ts` files and vanilla JavaScript
+over TypeScript files. This is circumstantial, but it makes handling the build
+system a lot easier when TypeScript doesn’t have to transpiled. The version of
+typescript in the monorepo is `4.1`.
 
 ### Writing docs
 
-Generally, documentation for integrations can be broken down into a few pieces that apply to every component, and then documentation for each component. The structure should look something like this:
+Generally, documentation for integrations can be broken down into a few pieces
+that apply to every component, and then documentation for each component. The
+structure should look something like this:
 
 * Installation
 * Initializing Uppy (may vary depending on how the framework handles reactivity)
@@ -412,29 +516,47 @@ Generally, documentation for integrations can be broken down into a few pieces t
   * Loading CSS
   * Props
 
-It may be easier to copy the documentation of earlier integrations and change the parts that need to be changed rather than writing this from scratch. Preferably, keep the documentation to one page. For the front-matter, write something like:
+It may be easier to copy the documentation of earlier integrations and change
+the parts that need to be changed rather than writing this from scratch.
+Preferably, keep the documentation to one page. For the front-matter, write
+something like:
 
 ```markdown
-title: Framework Name
-type: docs
-module: "@uppy/framework"
-order: 0
-category: "Other Integrations"
+title: Framework Name type: docs module: "@uppy/framework" order: 0 category:
+"Other Integrations"
 ```
 
 This data is used to generate Uppy’s website.
 
-Any change of the documentation that involves a security best practice must substantiated with an external reference. See [#3565](https://github.com/transloadit/uppy/issues/3565).
+Any change of the documentation that involves a security best practice must
+substantiated with an external reference. See
+[#3565](https://github.com/transloadit/uppy/issues/3565).
 
 ### Adding an example
 
-You can likely use whatever code generation tool for your framework (ex. `create-react-app`) to create this example. Make sure you add the same version of `@uppy/core` to this as your peer dependency required, or you may run into strange issues. Try to include all the components are some of their functionality. [The React example](https://github.com/transloadit/uppy/blob/main/examples/react-example/App.js) is a great... well example of how to do this well.
+You can likely use whatever code generation tool for your framework (ex.
+`create-react-app`) to create this example. Make sure you add the same version
+of `@uppy/core` to this as your peer dependency required, or you may run into
+strange issues. Try to include all the components are some of their
+functionality.
+[The React example](https://github.com/transloadit/uppy/blob/main/examples/react-example/App.js)
+is a great... well example of how to do this well.
 
 ### Integrating the build system
 
-The biggest part of this is understanding Uppy’s build system. The high level description is that `babel` goes through almost all the packages and transpiles all the Javascript files in the `src` directory to more compatible JavaScript in the `lib` folder. If you’re using vanilla JavaScript for your integration (like React and Vue do), then you can use this build system and use the files generated as your entry points.
+The biggest part of this is understanding Uppy’s build system. The high level
+description is that `babel` goes through almost all the packages and transpiles
+all the Javascript files in the `src` directory to more compatible JavaScript in
+the `lib` folder. If you’re using vanilla JavaScript for your integration (like
+React and Vue do), then you can use this build system and use the files
+generated as your entry points.
 
-If you’re using some kind of more abstract file format (like Svelte), then you probably want do to a few things: add the directory name to [this `IGNORE` regex](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/bin/build-lib.js#L15); add all your build dependencies to the root `package.json` (try to keep this small); add a new `build:framework` script to the root `package.json`. This script usually looks something like this:
+If you’re using some kind of more abstract file format (like Svelte), then you
+probably want do to a few things: add the directory name to
+[this `IGNORE` regex](https://github.com/transloadit/uppy/blob/425f9ecfbc8bc48ce6b734e4fc14fa60d25daa97/bin/build-lib.js#L15);
+add all your build dependencies to the root `package.json` (try to keep this
+small); add a new `build:framework` script to the root `package.json`. This
+script usually looks something like this:
 
 ```json
 {
@@ -444,8 +566,13 @@ If you’re using some kind of more abstract file format (like Svelte), then you
 }
 ```
 
-Then, add this script to the `build:js` script. Try running the `build:js` script and make sure it does not error. It may also be of use to make sure that global dependencies aren’t being used (ex. not having rollup locally and relying on a global install), as these dependencies won’t be present on the machine’s handling building.
+Then, add this script to the `build:js` script. Try running the `build:js`
+script and make sure it does not error. It may also be of use to make sure that
+global dependencies aren’t being used (ex. not having rollup locally and relying
+on a global install), as these dependencies won’t be present on the machine’s
+handling building.
 
 ## I18n and locales
 
-For more information about how to contribute to translations, see [the `@uppy/locales` contributing guide](https://uppy.io/docs/locales/#contributing-a-new-language).
+For more information about how to contribute to translations, see
+[the `@uppy/locales` contributing guide](https://uppy.io/docs/locales/#contributing-a-new-language).

+ 1 - 1
.prettierignore

@@ -4,5 +4,5 @@ node_modules/
 *.cjs
 *.mjs
 !private/js2ts/*
-*.md
 *.lock
+CHANGELOG.md

+ 94 - 36
BACKLOG.md

@@ -2,84 +2,142 @@
 
 <!--lint disable no-literal-urls no-undefined-references-->
 
-These are ideas that are planned for specific versions or act as a backlog without a clear date.
-PRs are welcome! Please do open an issue to discuss first if it's a big feature, priorities may have changed after something was added here.
+These are ideas that are planned for specific versions or act as a backlog
+without a clear date. PRs are welcome! Please do open an issue to discuss first
+if it's a big feature, priorities may have changed after something was added
+here.
 
 ## `3.0.0`
 
 - [x] Switch to ES Modules (ESM)
 - [x] @uppy/image-editor: Remove silly hack to work around non-ESM.
-- [ ] Some not too breaking breaking changes. Go through TODOs (@arturi, @aduh95, @Murderlon)
+- [ ] Some not too breaking breaking changes. Go through TODOs (@arturi,
+      @aduh95, @Murderlon)
 - [ ] Companion breaking changes, like S3 keys (@mifi)
 - [x] New remote-sources preset
 - [x] Deprecate Robodog
   - [x] Remove from 3.x branch (@aduh95)
   - [x] Update docs that refer to Robodog (@arturi)
-  - [ ] Update Transloadit.com examples and docs to use @uppy/transloadit + @uppy/remote-sources plugins instead of @uppy/robodog (@arturi)
+  - [ ] Update Transloadit.com examples and docs to use @uppy/transloadit +
+        @uppy/remote-sources plugins instead of @uppy/robodog (@arturi)
 
 ## `4.0.0`
 
-- [ ] core: change the preprocessing --> uploading flow to allow for files to start uploading right away after their preprocessing step has finished. See #1738 (@goto-but-stop)
-- [ ] companion: add more reliable tests to catch edge cases in companion. For example testing that oauth works for multiple companion instances that use a master Oauth domain.
-- [ ] Consider updating the name of @uppy/aws-s3 and @uppy/aws-s3-multipart to reflect it also supports Google Cloud Storage, Wasabi, and other cloud providers.
-- [ ] Consider fixing all locale files to follow the bcp-47 standard (nl_NL --> nl-NL)
+- [ ] core: change the preprocessing --> uploading flow to allow for files to
+      start uploading right away after their preprocessing step has finished.
+      See #1738 (@goto-but-stop)
+- [ ] companion: add more reliable tests to catch edge cases in companion. For
+      example testing that oauth works for multiple companion instances that use
+      a master Oauth domain.
+- [ ] Consider updating the name of @uppy/aws-s3 and @uppy/aws-s3-multipart to
+      reflect it also supports Google Cloud Storage, Wasabi, and other cloud
+      providers.
+- [ ] Consider fixing all locale files to follow the bcp-47 standard (nl_NL -->
+      nl-NL)
 
 ## Unplanned
 
 ### Core
 
 - [ ] Make sure Uppy works well in VR
-- [ ] normalize file names when uploading from iOS? Can we do it with meta data? date? `image-${index}`? #678
-- [ ] Can Uppy upload a lot of files at once? Seems to fail now: https://github.com/transloadit/uppy/issues/3313 (@aduh95, @Murderlon)
-- [ ] Consider how we can make Uppy smaller. Replace some packages with smaller alternatives. Talk about Socket.io again (@aduh95)
+- [ ] normalize file names when uploading from iOS? Can we do it with meta data?
+      date? `image-${index}`? #678
+- [ ] Can Uppy upload a lot of files at once? Seems to fail now:
+      https://github.com/transloadit/uppy/issues/3313 (@aduh95, @Murderlon)
+- [ ] Consider how we can make Uppy smaller. Replace some packages with smaller
+      alternatives. Talk about Socket.io again (@aduh95)
 - [ ] Better events — more data, consistency, naming (@Murderlon)
 
 ### Dashboard
 
 - [ ] Dashboard UI should support 20 providers (@arturi)
-- [ ] Allow minimizing the Dashboard during upload (Uppy then becomes just a tiny progress indicator) (@arturi)
-- [ ] Display data like image resolution on file cards. should be done by thumbnail generator maybe #783
-- [ ] Possibility to edit/delete more than one file at once. example: add copyrigh info to 1000 files #118, #97
-- [ ] Possibility to work on already uploaded / in progress files. We'll just provide the `fileId` to the `file-edit-complete` event so that folks can more easily roll out custom code for this themselves #112, #113, #2063
-- [ ] Focus jumps weirdly if you remove a file https://github.com/transloadit/uppy/pull/2161#issuecomment-613565486
-- [ ] A mini UI that features drop & progress (may involve a `mini: true` options for dashboard, may involve drop+progress or new plugin) (@arturi)
-- [ ] Add a Load More button so you don't have to TAB endlessly to get to the upload button (https://github.com/transloadit/uppy/issues/1419)
+- [ ] Allow minimizing the Dashboard during upload (Uppy then becomes just a
+      tiny progress indicator) (@arturi)
+- [ ] Display data like image resolution on file cards. should be done by
+      thumbnail generator maybe #783
+- [ ] Possibility to edit/delete more than one file at once. example: add
+      copyrigh info to 1000 files #118, #97
+- [ ] Possibility to work on already uploaded / in progress files. We'll just
+      provide the `fileId` to the `file-edit-complete` event so that folks can
+      more easily roll out custom code for this themselves #112, #113, #2063
+- [ ] Focus jumps weirdly if you remove a file
+      https://github.com/transloadit/uppy/pull/2161#issuecomment-613565486
+- [ ] A mini UI that features drop & progress (may involve a `mini: true`
+      options for dashboard, may involve drop+progress or new plugin) (@arturi)
+- [ ] Add a Load More button so you don't have to TAB endlessly to get to the
+      upload button (https://github.com/transloadit/uppy/issues/1419)
 
 ### New plugins
 
-- [ ] WordPress Back-end plugin. Should be another Transloadit Integration based on Robodog Dashboard(?) we should add a provider, and possibly offer already-uploaded content
-- [ ] WordPress Front-end Gravity Forms Uppy plugin so one form field could be an Uppy-powered file input
-- [ ] A WakeLock based plugin that keeps your phone from going to sleep while an upload is ongoing https://github.com/transloadit/uppy/issues/1725
+- [ ] WordPress Back-end plugin. Should be another Transloadit Integration based
+      on Robodog Dashboard(?) we should add a provider, and possibly offer
+      already-uploaded content
+- [ ] WordPress Front-end Gravity Forms Uppy plugin so one form field could be
+      an Uppy-powered file input
+- [ ] A WakeLock based plugin that keeps your phone from going to sleep while an
+      upload is ongoing https://github.com/transloadit/uppy/issues/1725
 - [ ] Improve image editor: filters for images, no crashes (@aduh95)
 
 ### New providers
 
 - [ ] Google Photos (#2163)
-- [ ] MediaLibrary provider which shows you files that have already been uploaded #450, #1121, #1112 #362
+- [ ] MediaLibrary provider which shows you files that have already been
+      uploaded #450, #1121, #1112 #362
 - [ ] Giphy image search (on top of Unsplash plugin) ()
-- [ ] Image search (via Google or Bing or DuckDuckGo): use duckduckgo-images-api or Google Search API (@arturi)
+- [ ] Image search (via Google or Bing or DuckDuckGo): use duckduckgo-images-api
+      or Google Search API (@arturi)
 - [ ] Vimeo #2872
 
 ### Miscellaneous
 
-- [ ] goldenretriever: make it work with aws multipart https://community.transloadit.com/t/resumable-aws-s3-multipart-integration/14888 (@goto-bus-stop)
+- [ ] goldenretriever: make it work with aws multipart
+      https://community.transloadit.com/t/resumable-aws-s3-multipart-integration/14888
+      (@goto-bus-stop)
 - [ ] provider: add sorting (by date) #254
-- [ ] qa: add one integration test (or add to existing test) that uses more exotic (tus) options such as `useFastRemoteRetry` or `removeFingerprintOnSuccess` https://github.com/transloadit/uppy/issues/1327 (@arturi, @ifedapoolarewaju)
-- [x] react: Add a React Hook to manage an Uppy instance https://github.com/transloadit/uppy/pull/1247#issuecomment-458063951 (@goto-bus-stop)
+- [ ] qa: add one integration test (or add to existing test) that uses more
+      exotic (tus) options such as `useFastRemoteRetry` or
+      `removeFingerprintOnSuccess`
+      https://github.com/transloadit/uppy/issues/1327 (@arturi,
+      @ifedapoolarewaju)
+- [x] react: Add a React Hook to manage an Uppy instance
+      https://github.com/transloadit/uppy/pull/1247#issuecomment-458063951
+      (@goto-bus-stop)
 - [ ] rn: Uppy React Native works with Expo, now let's make it work without
-- [ ] rn: Uppy React Native works with Url Plugin, now let's make it work with Instagram
-- [ ] security: consider iframe / more security for Transloadit/Uppy integration widget and Uppy itself. Page can’t get files from Google Drive if its an iframe
-- [ ] statusbar: Add a confirmation of the cancel action (https://github.com/transloadit/uppy/issues/1418) as well as ask the user if they really want to navigate away while an upload is in progress via `onbeforeunload` (@arturi)
-- [ ] uploaders: consider not showing progress updates from the server after an upload’s been paused. Perhaps the button can be disabled and say `Pausing..` until Companion has actually stopped transmitting updates (@arturi, @ifedapoolarewaju)
+- [ ] rn: Uppy React Native works with Url Plugin, now let's make it work with
+      Instagram
+- [ ] security: consider iframe / more security for Transloadit/Uppy integration
+      widget and Uppy itself. Page can’t get files from Google Drive if its an
+      iframe
+- [ ] statusbar: Add a confirmation of the cancel action
+      (https://github.com/transloadit/uppy/issues/1418) as well as ask the user
+      if they really want to navigate away while an upload is in progress via
+      `onbeforeunload` (@arturi)
+- [ ] uploaders: consider not showing progress updates from the server after an
+      upload’s been paused. Perhaps the button can be disabled and say
+      `Pausing..` until Companion has actually stopped transmitting updates
+      (@arturi, @ifedapoolarewaju)
 - [ ] xhr: allow sending custom headers per file (as proposed in #785)
-- [ ] website: It would be nice in the long run to have a dynamic package builder here right on the website where you can select the plugins you need/want and it builds and downloads a minified version of them? Sort of like jQuery UI: https://jqueryui.com/download/
-- [ ] webcam: Specify the resolution of the webcam images/video. We should add a way to specify any custom 'constraints' (aspect ratio, resolution, mimetype (`/video/mp4;codec=h264`), bits per second, etc) to the Webcam plugin #876
-- [ ] Constructor to build Uppy with what you need, “Dashboard example meets Transloadit Wizard”. Select language, modes, providers — get code ready to use. Maybe integrate Transloadit Wizard in there as well (@arturi, @Murderlon)
+- [ ] website: It would be nice in the long run to have a dynamic package
+      builder here right on the website where you can select the plugins you
+      need/want and it builds and downloads a minified version of them? Sort of
+      like jQuery UI: https://jqueryui.com/download/
+- [ ] webcam: Specify the resolution of the webcam images/video. We should add a
+      way to specify any custom 'constraints' (aspect ratio, resolution,
+      mimetype (`/video/mp4;codec=h264`), bits per second, etc) to the Webcam
+      plugin #876
+- [ ] Constructor to build Uppy with what you need, “Dashboard example meets
+      Transloadit Wizard”. Select language, modes, providers — get code ready to
+      use. Maybe integrate Transloadit Wizard in there as well (@arturi,
+      @Murderlon)
 
 ### Needs research
 
-- [ ] Add a prepublish test that checks if `npm pack` is not massive (@goto-bus-stop)
+- [ ] Add a prepublish test that checks if `npm pack` is not massive
+      (@goto-bus-stop)
 - [ ] Add https://github.com/pa11y/pa11y for automated accessibility testing?
 - [ ] Add lighthouse for automated performance testing?
-- [ ] Switch one existing e2e test to use Parcel (create-react-app already using webpack) (@arturi)
-- [ ] Add typescript with JSDoc for @uppy/core https://github.com/Microsoft/TypeScript/wiki/Type-Checking-JavaScript-Files (@arturi)
+- [ ] Switch one existing e2e test to use Parcel (create-react-app already using
+      webpack) (@arturi)
+- [ ] Add typescript with JSDoc for @uppy/core
+      https://github.com/Microsoft/TypeScript/wiki/Type-Checking-JavaScript-Files
+      (@arturi)

+ 70 - 50
BUNDLE-README.md

@@ -3,74 +3,94 @@
 Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can use
 this from a CDN (`<script src="https://releases.transloadit.com/uppy/v4.0.0-beta.4/uppy.min.js"></script>`) or bundle it with your webapp.
 
-Note that the recommended way to use Uppy is to install it with yarn/npm and use a
-bundler like Webpack so that you can create a smaller custom build with only the
-things that you need. More info on <https://uppy.io/docs/#With-a-module-bundler>.
+Note that the recommended way to use Uppy is to install it with yarn/npm and use
+a bundler like Webpack so that you can create a smaller custom build with only
+the things that you need. More info on
+<https://uppy.io/docs/#With-a-module-bundler>.
 
 ## How to use this bundle
 
 You can extract the contents of this zip to a directory, such as `./js/uppy`.
 
-Now you can create an HTML file, for example `./upload.html`, with the following contents:
+Now you can create an HTML file, for example `./upload.html`, with the following
+contents:
 
 ```html
 <html>
-<head>
-  <link rel="stylesheet" href="./js/uppy/uppy.min.css">
-</head>
-
-<body>
-  <div class="DashboardContainer"></div>
-  <button class="UppyModalOpenerBtn">Upload</button>
-  <div class="uploaded-files">
-    <h5>Uploaded files:</h5>
-    <ol></ol>
-  </div>
-</body>
-
-<script type="module">
-  import {Uppy, Dashboard, Tus} from "./js/uppy/uppy.min.mjs"
-  var uppy = new Uppy({
-    debug      : true,
-    autoProceed: false,
-  })
-    .use(Dashboard, {
-      browserBackButtonClose: false,
-      height                : 470,
-      inline                : false,
-      replaceTargetContent  : true,
-      showProgressDetails   : true,
-      target                : '.DashboardContainer',
-      trigger               : '.UppyModalOpenerBtn',
-      metaFields            : [
-        { id: 'name', name: 'Name', placeholder: 'file name' },
-        { id: 'caption', name: 'Caption', placeholder: 'describe what the image is about' }
-      ]
+  <head>
+    <link rel="stylesheet" href="./js/uppy/uppy.min.css" />
+  </head>
+
+  <body>
+    <div class="DashboardContainer"></div>
+    <button class="UppyModalOpenerBtn">Upload</button>
+    <div class="uploaded-files">
+      <h5>Uploaded files:</h5>
+      <ol></ol>
+    </div>
+  </body>
+
+  <script type="module">
+    import { Uppy, Dashboard, Tus } from './js/uppy/uppy.min.mjs'
+    var uppy = new Uppy({
+      debug: true,
+      autoProceed: false,
     })
-    .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
-    .on('upload-success', function (file, response) {
-      var url      = response.uploadURL
-      var fileName = file.name
-
-      document.querySelector('.uploaded-files ol').innerHTML +=
-        '<li><a href="' + url + '" target="_blank">' + fileName + '</a></li>'
-    })
-</script>
+      .use(Dashboard, {
+        browserBackButtonClose: false,
+        height: 470,
+        inline: false,
+        replaceTargetContent: true,
+        showProgressDetails: true,
+        target: '.DashboardContainer',
+        trigger: '.UppyModalOpenerBtn',
+        metaFields: [
+          { id: 'name', name: 'Name', placeholder: 'file name' },
+          {
+            id: 'caption',
+            name: 'Caption',
+            placeholder: 'describe what the image is about',
+          },
+        ],
+      })
+      .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
+      .on('upload-success', function (file, response) {
+        var url = response.uploadURL
+        var fileName = file.name
+
+        document.querySelector('.uploaded-files ol').innerHTML +=
+          '<li><a href="' + url + '" target="_blank">' + fileName + '</a></li>'
+      })
+  </script>
+</html>
 ```
 
 Now open `upload.html` in your browser, and the Uppy Dashboard will appear.
 
 ## Next steps
 
-In the example you built, Uppy uploads to a demo server where files will be deleted
-shortly after uploading. You’ll want to target your own tusd server, S3 bucket, or Nginx/Apache server. For the latter, use the Xhr plugin: <https://uppy.io/docs/xhr-upload/> which uploads using regular multipart form posts, that you’ll existing Ruby or PHP backend will be able to make sense of, as if a `<input type="file">` had been used.
+In the example you built, Uppy uploads to a demo server where files will be
+deleted shortly after uploading. You’ll want to target your own tusd server, S3
+bucket, or Nginx/Apache server. For the latter, use the Xhr plugin:
+<https://uppy.io/docs/xhr-upload/> which uploads using regular multipart form
+posts, that you’ll existing Ruby or PHP backend will be able to make sense of,
+as if a `<input type="file">` had been used.
 
-The Dashboard now opens when clicking the button, but you can also draw it inline into the page. This, and many more configuration options can be found here: <https://uppy.io/docs/dashboard/>.
+The Dashboard now opens when clicking the button, but you can also draw it
+inline into the page. This, and many more configuration options can be found
+here: <https://uppy.io/docs/dashboard/>.
 
-Uppy has many more Plugins besides Xhr and the Dashboard. For example, you can enable Webcam, Instagram, or video encoding support. For a full list of Plugins check here: <https://uppy.io/docs/plugins/>.
+Uppy has many more Plugins besides Xhr and the Dashboard. For example, you can
+enable Webcam, Instagram, or video encoding support. For a full list of Plugins
+check here: <https://uppy.io/docs/plugins/>.
 
-Note that for some Plugins, you will need to run a server side component called: Companion. Those plugins are marked with a (c) symbol. Alternatively, you can sign up for a free Transloadit account. Transloadit runs Companion for you, tusd servers to handle resumable file uploads, and can post-process files to scan for viruses, recognize faces, etc. Check: <https://transloadit.com>.
+Note that for some Plugins, you will need to run a server side component called:
+Companion. Those plugins are marked with a (c) symbol. Alternatively, you can
+sign up for a free Transloadit account. Transloadit runs Companion for you, tusd
+servers to handle resumable file uploads, and can post-process files to scan for
+viruses, recognize faces, etc. Check: <https://transloadit.com>.
 
 ## Getting help
 
-Stuck with anything? We’re welcoming all your questions and feedback over at <https://community.transloadit.com/c/uppy/5>.
+Stuck with anything? We’re welcoming all your questions and feedback over at
+<https://community.transloadit.com/c/uppy/5>.

+ 237 - 154
README.md

@@ -2,19 +2,24 @@
 
 <img src="https://uppy.io/img/logo.svg" width="120" alt="Uppy logo: a smiling puppy above a pink upwards arrow" align="right">
 
-Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly with any application. It’s fast, has a comprehensible API and lets you worry about more important problems than building a file uploader.
+Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly
+with any application. It’s fast, has a comprehensible API and lets you worry
+about more important problems than building a file uploader.
 
-* **Fetch** files from local disk, remote URLs, Google Drive, Dropbox, Box, Instagram or snap and record selfies with a camera
+* **Fetch** files from local disk, remote URLs, Google Drive, Dropbox, Box,
+  Instagram or snap and record selfies with a camera
 * **Preview** and edit metadata with a nice interface
 * **Upload** to the final destination, optionally process/encode
 
 <img src="https://github.com/transloadit/uppy/raw/main/assets/uppy-2-0-demo-aug-2021.gif">
 
-**[Read the docs](https://uppy.io/docs)** | **[Try Uppy](https://uppy.io/examples/dashboard/)**
+**[Read the docs](https://uppy.io/docs)** |
+**[Try Uppy](https://uppy.io/examples/dashboard/)**
 
 <a href="https://transloadit.com" target="_blank"><img width="185" src="https://github.com/transloadit/uppy/raw/main/assets/developed-by-transloadit.png"></a>
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile API to handle any file in your app.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile API to handle any file in your app.
 
 <table>
 <tr><th>Tests</th><td><img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"></td><td><img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"></td><td><img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests"></td></tr>
@@ -44,16 +49,24 @@ const uppy = new Uppy()
   })
 ```
 
-**[Try it online](https://uppy.io/examples/dashboard/)** or **[read the docs](https://uppy.io/docs)** for more details on how to use Uppy and its plugins.
+**[Try it online](https://uppy.io/examples/dashboard/)** or
+**[read the docs](https://uppy.io/docs)** for more details on how to use Uppy
+and its plugins.
 
 ## Features
 
 * Lightweight, modular plugin-based architecture, light on dependencies :zap:
-* Resumable file uploads via the open [tus](https://tus.io/) standard, so large uploads survive network hiccups
-* Supports picking files from: Webcam, Dropbox, Box, Google Drive, Instagram, bypassing the user’s device where possible, syncing between servers directly via [@uppy/companion](https://uppy.io/docs/companion)
-* Works great with file encoding and processing backends, such as [Transloadit](https://transloadit.com), works great without (all you need is to roll your own Apache/Nginx/Node/FFmpeg/etc backend)
+* Resumable file uploads via the open [tus](https://tus.io/) standard, so large
+  uploads survive network hiccups
+* Supports picking files from: Webcam, Dropbox, Box, Google Drive, Instagram,
+  bypassing the user’s device where possible, syncing between servers directly
+  via [@uppy/companion](https://uppy.io/docs/companion)
+* Works great with file encoding and processing backends, such as
+  [Transloadit](https://transloadit.com), works great without (all you need is
+  to roll your own Apache/Nginx/Node/FFmpeg/etc backend)
 * Sleek user interface :sparkles:
-* Optional file recovery (after a browser crash) with [Golden Retriever](https://uppy.io/docs/golden-retriever/)
+* Optional file recovery (after a browser crash) with
+  [Golden Retriever](https://uppy.io/docs/golden-retriever/)
 * Speaks several languages (i18n) :earth\_africa:
 * Built with accessibility in mind
 * Free for the world, forever (as in beer 🍺, pizza 🍕, and liberty 🗽)
@@ -67,9 +80,13 @@ npm install @uppy/core @uppy/dashboard @uppy/tus
 
 Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v4.0.0-beta.4/uppy.min.css), either to your HTML page’s `<head>` or include in JS, if your bundler of choice supports it.
 
-Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object.
+Alternatively, you can also use a pre-built bundle from Transloadit’s CDN:
+Edgly. In that case `Uppy` will attach itself to the global `window.Uppy`
+object.
 
-> ⚠️ The bundle consists of most Uppy plugins, so this method is not recommended for production, as your users will have to download all plugins when you are likely using only a few.
+> ⚠️ The bundle consists of most Uppy plugins, so this method is not recommended
+> for production, as your users will have to download all plugins when you are
+> likely using only a few.
 
 ```html
 <!-- 1. Add CSS to `<head>` -->
@@ -89,10 +106,15 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg
 ## Documentation
 
 * [Uppy](https://uppy.io/docs/uppy/) — full list of options, methods and events
-* [Plugins](https://uppy.io/docs/plugins/) — list of Uppy plugins and their options
-* [Companion](https://uppy.io/docs/companion/) — setting up and running a Companion instance, which adds support for Instagram, Dropbox, Box, Google Drive and remote URLs
-* [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins with React apps
-* [Architecture & Writing a Plugin](https://uppy.io/docs/writing-plugins/) — how to write a plugin for Uppy
+* [Plugins](https://uppy.io/docs/plugins/) — list of Uppy plugins and their
+  options
+* [Companion](https://uppy.io/docs/companion/) — setting up and running a
+  Companion instance, which adds support for Instagram, Dropbox, Box, Google
+  Drive and remote URLs
+* [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins
+  with React apps
+* [Architecture & Writing a Plugin](https://uppy.io/docs/writing-plugins/) — how
+  to write a plugin for Uppy
 
 ## Plugins
 
@@ -100,43 +122,67 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg
 
 ### UI Elements
 
-* [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews, progress bars, metadata editor and all the cool stuff. Required for most UI plugins like Webcam and Instagram
-* [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar that fills itself when upload progresses
-* [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress, pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included by default with `Dashboard`)
-* [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile” before taking a selfie or “upload failed” when all is lost (also included by default with `Dashboard`)
+* [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews,
+  progress bars, metadata editor and all the cool stuff. Required for most UI
+  plugins like Webcam and Instagram
+* [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar
+  that fills itself when upload progresses
+* [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress,
+  pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included
+  by default with `Dashboard`)
+* [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile”
+  before taking a selfie or “upload failed” when all is lost (also included by
+  default with `Dashboard`)
 
 ### Sources
 
 * [`Drag & Drop`](https://uppy.io/docs/drag-drop/) — plain drag and drop area
-* [`File Input`](https://uppy.io/docs/file-input/) — even plainer “select files” button
+* [`File Input`](https://uppy.io/docs/file-input/) — even plainer “select files”
+  button
 * [`Webcam`](https://uppy.io/docs/webcam/) — snap and record those selfies 📷
-* ⓒ [`Google Drive`](https://uppy.io/docs/google-drive/) — import files from Google Drive
+* ⓒ [`Google Drive`](https://uppy.io/docs/google-drive/) — import files from
+  Google Drive
 * ⓒ [`Dropbox`](https://uppy.io/docs/dropbox/) — import files from Dropbox
 * ⓒ [`Box`](https://uppy.io/docs/box/) — import files from Box
-* ⓒ [`Instagram`](https://uppy.io/docs/instagram/) — import images and videos from Instagram
-* ⓒ [`Facebook`](https://uppy.io/docs/facebook/) — import images and videos from Facebook
-* ⓒ [`OneDrive`](https://uppy.io/docs/onedrive/) — import files from Microsoft OneDrive
-* ⓒ [`Import From URL`](https://uppy.io/docs/url/) — import direct URLs from anywhere on the web
-
-The ⓒ mark means that [`@uppy/companion`](https://uppy.io/docs/companion), a server-side component, is needed for a plugin to work.
+* ⓒ [`Instagram`](https://uppy.io/docs/instagram/) — import images and videos
+  from Instagram
+* ⓒ [`Facebook`](https://uppy.io/docs/facebook/) — import images and videos from
+  Facebook
+* ⓒ [`OneDrive`](https://uppy.io/docs/onedrive/) — import files from Microsoft
+  OneDrive
+* ⓒ [`Import From URL`](https://uppy.io/docs/url/) — import direct URLs from
+  anywhere on the web
+
+The ⓒ mark means that [`@uppy/companion`](https://uppy.io/docs/companion), a
+server-side component, is needed for a plugin to work.
 
 ### Destinations
 
-* [`Tus`](https://uppy.io/docs/tus/) — resumable uploads via the open [tus](http://tus.io) standard
-* [`XHR Upload`](https://uppy.io/docs/xhr-upload/) — regular uploads for any backend out there (like Apache, Nginx)
-* [`AWS S3`](https://uppy.io/docs/aws-s3/) — plain upload to AWS S3 or compatible services
-* [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — S3-style “Multipart” upload to AWS or compatible services
+* [`Tus`](https://uppy.io/docs/tus/) — resumable uploads via the open
+  [tus](http://tus.io) standard
+* [`XHR Upload`](https://uppy.io/docs/xhr-upload/) — regular uploads for any
+  backend out there (like Apache, Nginx)
+* [`AWS S3`](https://uppy.io/docs/aws-s3/) — plain upload to AWS S3 or
+  compatible services
+* [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — S3-style
+  “Multipart” upload to AWS or compatible services
 
 ### File Processing
 
-* [`Transloadit`](https://uppy.io/docs/transloadit/) — support for [Transloadit](http://transloadit.com)’s robust file uploading and encoding backend
+* [`Transloadit`](https://uppy.io/docs/transloadit/) — support for
+  [Transloadit](http://transloadit.com)’s robust file uploading and encoding
+  backend
 
 ### Miscellaneous
 
-* [`Golden Retriever`](https://uppy.io/docs/golden-retriever/) — restores files after a browser crash, like it’s nothing
-* [`Thumbnail Generator`](https://uppy.io/docs/thumbnail-generator/) — generates image previews (included by default with `Dashboard`)
-* [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right before an Uppy upload, then optionally appends results back to the form
-* [`Redux`](https://uppy.io/docs/redux/) — for your emerging [time traveling](https://github.com/gaearon/redux-devtools) needs
+* [`Golden Retriever`](https://uppy.io/docs/golden-retriever/) — restores files
+  after a browser crash, like it’s nothing
+* [`Thumbnail Generator`](https://uppy.io/docs/thumbnail-generator/) — generates
+  image previews (included by default with `Dashboard`)
+* [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right
+  before an Uppy upload, then optionally appends results back to the form
+* [`Redux`](https://uppy.io/docs/redux/) — for your emerging
+  [time traveling](https://github.com/gaearon/redux-devtools) needs
 
 ## React
 
@@ -151,101 +197,138 @@ We aim to support recent versions of Chrome, Firefox, and Safari.
 
 ### Why not use `<input type="file">`?
 
-Having no JavaScript beats having a lot of it, so that’s a fair question! Running an uploading & encoding business for ten years though we found that in cases, the file input leaves some to be desired:
+Having no JavaScript beats having a lot of it, so that’s a fair question!
+Running an uploading & encoding business for ten years though we found that in
+cases, the file input leaves some to be desired:
 
-* We received complaints about broken uploads and found that resumable uploads are important, especially for big files and to be inclusive towards people on poorer connections (we also launched [tus.io](https://tus.io) to attack that problem). Uppy uploads can survive network outages and browser crashes or accidental navigate-aways.
+* We received complaints about broken uploads and found that resumable uploads
+  are important, especially for big files and to be inclusive towards people on
+  poorer connections (we also launched [tus.io](https://tus.io) to attack that
+  problem). Uppy uploads can survive network outages and browser crashes or
+  accidental navigate-aways.
 * Uppy supports editing meta information before uploading.
 * Uppy allows cropping images before uploading.
-* There’s the situation where people are using their mobile devices and want to upload on the go, but they have their picture on Instagram, files in Dropbox or a plain file URL from anywhere on the open web. Uppy allows to pick files from those and push it to the destination without downloading it to your mobile device first.
+* There’s the situation where people are using their mobile devices and want to
+  upload on the go, but they have their picture on Instagram, files in Dropbox
+  or a plain file URL from anywhere on the open web. Uppy allows to pick files
+  from those and push it to the destination without downloading it to your
+  mobile device first.
 * Accurate upload progress reporting is an issue on many platforms.
-* Some file validation — size, type, number of files — can be done on the client with Uppy.
-* Uppy integrates webcam support, in case your users want to upload a picture/video/audio that does not exist yet :)
-* A larger drag and drop surface can be pleasant to work with. Some people also like that you can control the styling, language, etc.
-* Uppy is aware of encoding backends. Often after an upload, the server needs to rotate, detect faces, optimize for iPad, or what have you. Uppy can track progress of this and report back to the user in different ways.
-* Sometimes you might want your uploads to happen while you continue to interact on the same single page.
-
-Not all apps need all these features. An `<input type="file">` is fine in many situations. But these were a few things that our customers hit / asked about enough to spark us to develop Uppy.
+* Some file validation — size, type, number of files — can be done on the client
+  with Uppy.
+* Uppy integrates webcam support, in case your users want to upload a
+  picture/video/audio that does not exist yet :)
+* A larger drag and drop surface can be pleasant to work with. Some people also
+  like that you can control the styling, language, etc.
+* Uppy is aware of encoding backends. Often after an upload, the server needs to
+  rotate, detect faces, optimize for iPad, or what have you. Uppy can track
+  progress of this and report back to the user in different ways.
+* Sometimes you might want your uploads to happen while you continue to interact
+  on the same single page.
+
+Not all apps need all these features. An `<input type="file">` is fine in many
+situations. But these were a few things that our customers hit / asked about
+enough to spark us to develop Uppy.
 
 ### Why is all this goodness free?
 
-Transloadit’s team is small and we have a shared ambition to make a living from open source. By giving away projects like [tus.io](https://tus.io) and [Uppy](https://uppy.io), we’re hoping to advance the state of the art, make life a tiny little bit better for everyone and in doing so have rewarding jobs and get some eyes on our commercial service: [a content ingestion & processing platform](https://transloadit.com).
+Transloadit’s team is small and we have a shared ambition to make a living from
+open source. By giving away projects like [tus.io](https://tus.io) and
+[Uppy](https://uppy.io), we’re hoping to advance the state of the art, make life
+a tiny little bit better for everyone and in doing so have rewarding jobs and
+get some eyes on our commercial service:
+[a content ingestion & processing platform](https://transloadit.com).
 
-Our thinking is that if only a fraction of our open source userbase can see the appeal of hosted versions straight from the source, that could already be enough to sustain our work. So far this is working out! We’re able to dedicate 80% of our time to open source and haven’t gone bankrupt yet. :D
+Our thinking is that if only a fraction of our open source userbase can see the
+appeal of hosted versions straight from the source, that could already be enough
+to sustain our work. So far this is working out! We’re able to dedicate 80% of
+our time to open source and haven’t gone bankrupt yet. :D
 
 ### Does Uppy support S3 uploads?
 
-Yes, please check out the [docs](https://uppy.io/docs/aws-s3/) for more information.
+Yes, please check out the [docs](https://uppy.io/docs/aws-s3/) for more
+information.
 
 ### Can I use Uppy with Rails/Node.js/Go/PHP?
 
-Yes, whatever you want on the backend will work with `@uppy/xhr-upload` plugin, since it only does a `POST` or `PUT` request. Here’s a [PHP backend example](https://uppy.io/docs/xhr-upload/#Uploading-to-a-PHP-Server).
+Yes, whatever you want on the backend will work with `@uppy/xhr-upload` plugin,
+since it only does a `POST` or `PUT` request. Here’s a
+[PHP backend example](https://uppy.io/docs/xhr-upload/#Uploading-to-a-PHP-Server).
 
-If you want resumability with the Tus plugin, use [one of the tus server implementations](https://tus.io/implementations.html) 👌🏼
+If you want resumability with the Tus plugin, use
+[one of the tus server implementations](https://tus.io/implementations.html) 👌🏼
 
-And you’ll need [`@uppy/companion`](https://uppy.io/docs/companion) if you’d like your users to be able to pick files from Instagram, Google Drive, Dropbox or via direct URLs (with more services coming).
+And you’ll need [`@uppy/companion`](https://uppy.io/docs/companion) if you’d
+like your users to be able to pick files from Instagram, Google Drive, Dropbox
+or via direct URLs (with more services coming).
 
 ## Contributions are welcome
 
 * Contributor’s guide in [`.github/CONTRIBUTING.md`](.github/CONTRIBUTING.md)
-* Changelog to track our release progress (we aim to roll out a release every month): [`CHANGELOG.md`](CHANGELOG.md)
+* Changelog to track our release progress (we aim to roll out a release every
+  month): [`CHANGELOG.md`](CHANGELOG.md)
 
 ## Used by
 
-Uppy is used by: [Photobox](http://photobox.com), [Issuu](https://issuu.com/), [Law Insider](https://lawinsider.com), [Cool Tabs](https://cool-tabs.com), [Soundoff](https://soundoff.io), [Scrumi](https://www.scrumi.io/), [Crive](https://crive.co/) and others.
+Uppy is used by: [Photobox](http://photobox.com), [Issuu](https://issuu.com/),
+[Law Insider](https://lawinsider.com), [Cool Tabs](https://cool-tabs.com),
+[Soundoff](https://soundoff.io), [Scrumi](https://www.scrumi.io/),
+[Crive](https://crive.co/) and others.
 
-Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issues/769)!
+Use Uppy in your project?
+[Let us know](https://github.com/transloadit/uppy/issues/769)!
 
 ## Contributors
 
 <!--contributors-->
 
-[<img alt="arturi" src="https://avatars.githubusercontent.com/u/1199054?v=4&s=117" width="117">](https://github.com/arturi) |[<img alt="goto-bus-stop" src="https://avatars.githubusercontent.com/u/1006268?v=4&s=117" width="117">](https://github.com/goto-bus-stop) |[<img alt="kvz" src="https://avatars.githubusercontent.com/u/26752?v=4&s=117" width="117">](https://github.com/kvz) |[<img alt="aduh95" src="https://avatars.githubusercontent.com/u/14309773?v=4&s=117" width="117">](https://github.com/aduh95) |[<img alt="ifedapoolarewaju" src="https://avatars.githubusercontent.com/u/8383781?v=4&s=117" width="117">](https://github.com/ifedapoolarewaju) |[<img alt="hedgerh" src="https://avatars.githubusercontent.com/u/2524280?v=4&s=117" width="117">](https://github.com/hedgerh) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[aduh95](https://github.com/aduh95) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |
+| [<img alt="arturi" src="https://avatars.githubusercontent.com/u/1199054?v=4&s=117" width="117">](https://github.com/arturi) | [<img alt="goto-bus-stop" src="https://avatars.githubusercontent.com/u/1006268?v=4&s=117" width="117">](https://github.com/goto-bus-stop) | [<img alt="kvz" src="https://avatars.githubusercontent.com/u/26752?v=4&s=117" width="117">](https://github.com/kvz) | [<img alt="aduh95" src="https://avatars.githubusercontent.com/u/14309773?v=4&s=117" width="117">](https://github.com/aduh95) | [<img alt="ifedapoolarewaju" src="https://avatars.githubusercontent.com/u/8383781?v=4&s=117" width="117">](https://github.com/ifedapoolarewaju) | [<img alt="hedgerh" src="https://avatars.githubusercontent.com/u/2524280?v=4&s=117" width="117">](https://github.com/hedgerh) |
+| :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: |
+|                                             [arturi](https://github.com/arturi)                                             |                                             [goto-bus-stop](https://github.com/goto-bus-stop)                                             |                                            [kvz](https://github.com/kvz)                                            |                                             [aduh95](https://github.com/aduh95)                                              |                                             [ifedapoolarewaju](https://github.com/ifedapoolarewaju)                                             |                                             [hedgerh](https://github.com/hedgerh)                                             |
 
-[<img alt="Murderlon" src="https://avatars.githubusercontent.com/u/9060226?v=4&s=117" width="117">](https://github.com/Murderlon) |[<img alt="AJvanLoon" src="https://avatars.githubusercontent.com/u/15716628?v=4&s=117" width="117">](https://github.com/AJvanLoon) |[<img alt="nqst" src="https://avatars.githubusercontent.com/u/375537?v=4&s=117" width="117">](https://github.com/nqst) |[<img alt="mifi" src="https://avatars.githubusercontent.com/u/402547?v=4&s=117" width="117">](https://github.com/mifi) |[<img alt="github-actions[bot]" src="https://avatars.githubusercontent.com/in/15368?v=4&s=117" width="117">](https://github.com/apps/github-actions) |[<img alt="lakesare" src="https://avatars.githubusercontent.com/u/7578559?v=4&s=117" width="117">](https://github.com/lakesare) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[Murderlon](https://github.com/Murderlon) |[AJvanLoon](https://github.com/AJvanLoon) |[nqst](https://github.com/nqst) |[mifi](https://github.com/mifi) |[github-actions\[bot\]](https://github.com/apps/github-actions) |[lakesare](https://github.com/lakesare) |
+| [<img alt="Murderlon" src="https://avatars.githubusercontent.com/u/9060226?v=4&s=117" width="117">](https://github.com/Murderlon) | [<img alt="AJvanLoon" src="https://avatars.githubusercontent.com/u/15716628?v=4&s=117" width="117">](https://github.com/AJvanLoon) | [<img alt="nqst" src="https://avatars.githubusercontent.com/u/375537?v=4&s=117" width="117">](https://github.com/nqst) | [<img alt="mifi" src="https://avatars.githubusercontent.com/u/402547?v=4&s=117" width="117">](https://github.com/mifi) | [<img alt="github-actions[bot]" src="https://avatars.githubusercontent.com/in/15368?v=4&s=117" width="117">](https://github.com/apps/github-actions) | [<img alt="lakesare" src="https://avatars.githubusercontent.com/u/7578559?v=4&s=117" width="117">](https://github.com/lakesare) |
+| :-------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: |
+|                                             [Murderlon](https://github.com/Murderlon)                                             |                                             [AJvanLoon](https://github.com/AJvanLoon)                                              |                                            [nqst](https://github.com/nqst)                                             |                                            [mifi](https://github.com/mifi)                                             |                                           [github-actions\[bot\]](https://github.com/apps/github-actions)                                            |                                             [lakesare](https://github.com/lakesare)                                             |
 
-[<img alt="dependabot[bot]" src="https://avatars.githubusercontent.com/in/29110?v=4&s=117" width="117">](https://github.com/apps/dependabot) |[<img alt="kiloreux" src="https://avatars.githubusercontent.com/u/6282557?v=4&s=117" width="117">](https://github.com/kiloreux) |[<img alt="samuelayo" src="https://avatars.githubusercontent.com/u/14964486?v=4&s=117" width="117">](https://github.com/samuelayo) |[<img alt="sadovnychyi" src="https://avatars.githubusercontent.com/u/193864?v=4&s=117" width="117">](https://github.com/sadovnychyi) |[<img alt="richardwillars" src="https://avatars.githubusercontent.com/u/291004?v=4&s=117" width="117">](https://github.com/richardwillars) |[<img alt="ajkachnic" src="https://avatars.githubusercontent.com/u/44317699?v=4&s=117" width="117">](https://github.com/ajkachnic) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[dependabot\[bot\]](https://github.com/apps/dependabot) |[kiloreux](https://github.com/kiloreux) |[samuelayo](https://github.com/samuelayo) |[sadovnychyi](https://github.com/sadovnychyi) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |
+| [<img alt="dependabot[bot]" src="https://avatars.githubusercontent.com/in/29110?v=4&s=117" width="117">](https://github.com/apps/dependabot) | [<img alt="kiloreux" src="https://avatars.githubusercontent.com/u/6282557?v=4&s=117" width="117">](https://github.com/kiloreux) | [<img alt="samuelayo" src="https://avatars.githubusercontent.com/u/14964486?v=4&s=117" width="117">](https://github.com/samuelayo) | [<img alt="sadovnychyi" src="https://avatars.githubusercontent.com/u/193864?v=4&s=117" width="117">](https://github.com/sadovnychyi) | [<img alt="richardwillars" src="https://avatars.githubusercontent.com/u/291004?v=4&s=117" width="117">](https://github.com/richardwillars) | [<img alt="ajkachnic" src="https://avatars.githubusercontent.com/u/44317699?v=4&s=117" width="117">](https://github.com/ajkachnic) |
+| :------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: |
+|                                           [dependabot\[bot\]](https://github.com/apps/dependabot)                                            |                                             [kiloreux](https://github.com/kiloreux)                                             |                                             [samuelayo](https://github.com/samuelayo)                                              |                                            [sadovnychyi](https://github.com/sadovnychyi)                                             |                                            [richardwillars](https://github.com/richardwillars)                                             |                                             [ajkachnic](https://github.com/ajkachnic)                                              |
 
-[<img alt="zcallan" src="https://avatars.githubusercontent.com/u/13760738?v=4&s=117" width="117">](https://github.com/zcallan) |[<img alt="YukeshShr" src="https://avatars.githubusercontent.com/u/71844521?v=4&s=117" width="117">](https://github.com/YukeshShr) |[<img alt="janko" src="https://avatars.githubusercontent.com/u/795488?v=4&s=117" width="117">](https://github.com/janko) |[<img alt="oliverpool" src="https://avatars.githubusercontent.com/u/3864879?v=4&s=117" width="117">](https://github.com/oliverpool) |[<img alt="Botz" src="https://avatars.githubusercontent.com/u/2706678?v=4&s=117" width="117">](https://github.com/Botz) |[<img alt="mcallistertyler" src="https://avatars.githubusercontent.com/u/14939210?v=4&s=117" width="117">](https://github.com/mcallistertyler) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[zcallan](https://github.com/zcallan) |[YukeshShr](https://github.com/YukeshShr) |[janko](https://github.com/janko) |[oliverpool](https://github.com/oliverpool) |[Botz](https://github.com/Botz) |[mcallistertyler](https://github.com/mcallistertyler) |
+| [<img alt="zcallan" src="https://avatars.githubusercontent.com/u/13760738?v=4&s=117" width="117">](https://github.com/zcallan) | [<img alt="YukeshShr" src="https://avatars.githubusercontent.com/u/71844521?v=4&s=117" width="117">](https://github.com/YukeshShr) | [<img alt="janko" src="https://avatars.githubusercontent.com/u/795488?v=4&s=117" width="117">](https://github.com/janko) | [<img alt="oliverpool" src="https://avatars.githubusercontent.com/u/3864879?v=4&s=117" width="117">](https://github.com/oliverpool) | [<img alt="Botz" src="https://avatars.githubusercontent.com/u/2706678?v=4&s=117" width="117">](https://github.com/Botz) | [<img alt="mcallistertyler" src="https://avatars.githubusercontent.com/u/14939210?v=4&s=117" width="117">](https://github.com/mcallistertyler) |
+| :----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [zcallan](https://github.com/zcallan)                                              |                                             [YukeshShr](https://github.com/YukeshShr)                                              |                                            [janko](https://github.com/janko)                                             |                                             [oliverpool](https://github.com/oliverpool)                                             |                                             [Botz](https://github.com/Botz)                                             |                                             [mcallistertyler](https://github.com/mcallistertyler)                                              |
 
-[<img alt="mokutsu-coursera" src="https://avatars.githubusercontent.com/u/65177495?v=4&s=117" width="117">](https://github.com/mokutsu-coursera) |[<img alt="dschmidt" src="https://avatars.githubusercontent.com/u/448487?v=4&s=117" width="117">](https://github.com/dschmidt) |[<img alt="DJWassink" src="https://avatars.githubusercontent.com/u/1822404?v=4&s=117" width="117">](https://github.com/DJWassink) |[<img alt="mrbatista" src="https://avatars.githubusercontent.com/u/6544817?v=4&s=117" width="117">](https://github.com/mrbatista) |[<img alt="taoqf" src="https://avatars.githubusercontent.com/u/15901911?v=4&s=117" width="117">](https://github.com/taoqf) |[<img alt="timodwhit" src="https://avatars.githubusercontent.com/u/2761203?v=4&s=117" width="117">](https://github.com/timodwhit) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[mokutsu-coursera](https://github.com/mokutsu-coursera) |[dschmidt](https://github.com/dschmidt) |[DJWassink](https://github.com/DJWassink) |[mrbatista](https://github.com/mrbatista) |[taoqf](https://github.com/taoqf) |[timodwhit](https://github.com/timodwhit) |
+| [<img alt="mokutsu-coursera" src="https://avatars.githubusercontent.com/u/65177495?v=4&s=117" width="117">](https://github.com/mokutsu-coursera) | [<img alt="dschmidt" src="https://avatars.githubusercontent.com/u/448487?v=4&s=117" width="117">](https://github.com/dschmidt) | [<img alt="DJWassink" src="https://avatars.githubusercontent.com/u/1822404?v=4&s=117" width="117">](https://github.com/DJWassink) | [<img alt="mrbatista" src="https://avatars.githubusercontent.com/u/6544817?v=4&s=117" width="117">](https://github.com/mrbatista) | [<img alt="taoqf" src="https://avatars.githubusercontent.com/u/15901911?v=4&s=117" width="117">](https://github.com/taoqf) | [<img alt="timodwhit" src="https://avatars.githubusercontent.com/u/2761203?v=4&s=117" width="117">](https://github.com/timodwhit) |
+| :----------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [mokutsu-coursera](https://github.com/mokutsu-coursera)                                              |                                            [dschmidt](https://github.com/dschmidt)                                             |                                             [DJWassink](https://github.com/DJWassink)                                             |                                             [mrbatista](https://github.com/mrbatista)                                             |                                             [taoqf](https://github.com/taoqf)                                              |                                             [timodwhit](https://github.com/timodwhit)                                             |
 
-[<img alt="tim-kos" src="https://avatars.githubusercontent.com/u/15005?v=4&s=117" width="117">](https://github.com/tim-kos) |[<img alt="eltociear" src="https://avatars.githubusercontent.com/u/22633385?v=4&s=117" width="117">](https://github.com/eltociear) |[<img alt="tuoxiansp" src="https://avatars.githubusercontent.com/u/3960056?v=4&s=117" width="117">](https://github.com/tuoxiansp) |[<img alt="pauln" src="https://avatars.githubusercontent.com/u/574359?v=4&s=117" width="117">](https://github.com/pauln) |[<img alt="MikeKovarik" src="https://avatars.githubusercontent.com/u/3995401?v=4&s=117" width="117">](https://github.com/MikeKovarik) |[<img alt="toadkicker" src="https://avatars.githubusercontent.com/u/523330?v=4&s=117" width="117">](https://github.com/toadkicker) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[tim-kos](https://github.com/tim-kos) |[eltociear](https://github.com/eltociear) |[tuoxiansp](https://github.com/tuoxiansp) |[pauln](https://github.com/pauln) |[MikeKovarik](https://github.com/MikeKovarik) |[toadkicker](https://github.com/toadkicker) |
+| [<img alt="tim-kos" src="https://avatars.githubusercontent.com/u/15005?v=4&s=117" width="117">](https://github.com/tim-kos) | [<img alt="eltociear" src="https://avatars.githubusercontent.com/u/22633385?v=4&s=117" width="117">](https://github.com/eltociear) | [<img alt="tuoxiansp" src="https://avatars.githubusercontent.com/u/3960056?v=4&s=117" width="117">](https://github.com/tuoxiansp) | [<img alt="pauln" src="https://avatars.githubusercontent.com/u/574359?v=4&s=117" width="117">](https://github.com/pauln) | [<img alt="MikeKovarik" src="https://avatars.githubusercontent.com/u/3995401?v=4&s=117" width="117">](https://github.com/MikeKovarik) | [<img alt="toadkicker" src="https://avatars.githubusercontent.com/u/523330?v=4&s=117" width="117">](https://github.com/toadkicker) |
+| :-------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: |
+|                                            [tim-kos](https://github.com/tim-kos)                                            |                                             [eltociear](https://github.com/eltociear)                                              |                                             [tuoxiansp](https://github.com/tuoxiansp)                                             |                                            [pauln](https://github.com/pauln)                                             |                                             [MikeKovarik](https://github.com/MikeKovarik)                                             |                                            [toadkicker](https://github.com/toadkicker)                                             |
 
-[<img alt="ap--" src="https://avatars.githubusercontent.com/u/1463443?v=4&s=117" width="117">](https://github.com/ap--) |[<img alt="tranvansang" src="https://avatars.githubusercontent.com/u/13043196?v=4&s=117" width="117">](https://github.com/tranvansang) |[<img alt="LiviaMedeiros" src="https://avatars.githubusercontent.com/u/74449973?v=4&s=117" width="117">](https://github.com/LiviaMedeiros) |[<img alt="bertho-zero" src="https://avatars.githubusercontent.com/u/8525267?v=4&s=117" width="117">](https://github.com/bertho-zero) |[<img alt="juliangruber" src="https://avatars.githubusercontent.com/u/10247?v=4&s=117" width="117">](https://github.com/juliangruber) |[<img alt="Hawxy" src="https://avatars.githubusercontent.com/u/975824?v=4&s=117" width="117">](https://github.com/Hawxy) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[ap--](https://github.com/ap--) |[tranvansang](https://github.com/tranvansang) |[LiviaMedeiros](https://github.com/LiviaMedeiros) |[bertho-zero](https://github.com/bertho-zero) |[juliangruber](https://github.com/juliangruber) |[Hawxy](https://github.com/Hawxy) |
+| [<img alt="ap--" src="https://avatars.githubusercontent.com/u/1463443?v=4&s=117" width="117">](https://github.com/ap--) | [<img alt="tranvansang" src="https://avatars.githubusercontent.com/u/13043196?v=4&s=117" width="117">](https://github.com/tranvansang) | [<img alt="LiviaMedeiros" src="https://avatars.githubusercontent.com/u/74449973?v=4&s=117" width="117">](https://github.com/LiviaMedeiros) | [<img alt="bertho-zero" src="https://avatars.githubusercontent.com/u/8525267?v=4&s=117" width="117">](https://github.com/bertho-zero) | [<img alt="juliangruber" src="https://avatars.githubusercontent.com/u/10247?v=4&s=117" width="117">](https://github.com/juliangruber) | [<img alt="Hawxy" src="https://avatars.githubusercontent.com/u/975824?v=4&s=117" width="117">](https://github.com/Hawxy) |
+| :---------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: |
+|                                             [ap--](https://github.com/ap--)                                             |                                             [tranvansang](https://github.com/tranvansang)                                              |                                             [LiviaMedeiros](https://github.com/LiviaMedeiros)                                              |                                             [bertho-zero](https://github.com/bertho-zero)                                             |                                            [juliangruber](https://github.com/juliangruber)                                            |                                            [Hawxy](https://github.com/Hawxy)                                             |
 
-[<img alt="gavboulton" src="https://avatars.githubusercontent.com/u/3900826?v=4&s=117" width="117">](https://github.com/gavboulton) |[<img alt="mejiaej" src="https://avatars.githubusercontent.com/u/4699893?v=4&s=117" width="117">](https://github.com/mejiaej) |[<img alt="elenalape" src="https://avatars.githubusercontent.com/u/22844059?v=4&s=117" width="117">](https://github.com/elenalape) |[<img alt="dominiceden" src="https://avatars.githubusercontent.com/u/6367692?v=4&s=117" width="117">](https://github.com/dominiceden) |[<img alt="Acconut" src="https://avatars.githubusercontent.com/u/1375043?v=4&s=117" width="117">](https://github.com/Acconut) |[<img alt="jhen0409" src="https://avatars.githubusercontent.com/u/3001525?v=4&s=117" width="117">](https://github.com/jhen0409) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[gavboulton](https://github.com/gavboulton) |[mejiaej](https://github.com/mejiaej) |[elenalape](https://github.com/elenalape) |[dominiceden](https://github.com/dominiceden) |[Acconut](https://github.com/Acconut) |[jhen0409](https://github.com/jhen0409) |
+| [<img alt="gavboulton" src="https://avatars.githubusercontent.com/u/3900826?v=4&s=117" width="117">](https://github.com/gavboulton) | [<img alt="mejiaej" src="https://avatars.githubusercontent.com/u/4699893?v=4&s=117" width="117">](https://github.com/mejiaej) | [<img alt="elenalape" src="https://avatars.githubusercontent.com/u/22844059?v=4&s=117" width="117">](https://github.com/elenalape) | [<img alt="dominiceden" src="https://avatars.githubusercontent.com/u/6367692?v=4&s=117" width="117">](https://github.com/dominiceden) | [<img alt="Acconut" src="https://avatars.githubusercontent.com/u/1375043?v=4&s=117" width="117">](https://github.com/Acconut) | [<img alt="jhen0409" src="https://avatars.githubusercontent.com/u/3001525?v=4&s=117" width="117">](https://github.com/jhen0409) |
+| :---------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: |
+|                                             [gavboulton](https://github.com/gavboulton)                                             |                                             [mejiaej](https://github.com/mejiaej)                                             |                                             [elenalape](https://github.com/elenalape)                                              |                                             [dominiceden](https://github.com/dominiceden)                                             |                                             [Acconut](https://github.com/Acconut)                                             |                                             [jhen0409](https://github.com/jhen0409)                                             |
 
-[<img alt="stephentuso" src="https://avatars.githubusercontent.com/u/11889560?v=4&s=117" width="117">](https://github.com/stephentuso) |[<img alt="bencergazda" src="https://avatars.githubusercontent.com/u/5767697?v=4&s=117" width="117">](https://github.com/bencergazda) |[<img alt="a-kriya" src="https://avatars.githubusercontent.com/u/26761352?v=4&s=117" width="117">](https://github.com/a-kriya) |[<img alt="yonahforst" src="https://avatars.githubusercontent.com/u/1440796?v=4&s=117" width="117">](https://github.com/yonahforst) |[<img alt="suchoproduction" src="https://avatars.githubusercontent.com/u/6931349?v=4&s=117" width="117">](https://github.com/suchoproduction) |[<img alt="sksavant" src="https://avatars.githubusercontent.com/u/1040701?v=4&s=117" width="117">](https://github.com/sksavant) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[stephentuso](https://github.com/stephentuso) |[bencergazda](https://github.com/bencergazda) |[a-kriya](https://github.com/a-kriya) |[yonahforst](https://github.com/yonahforst) |[suchoproduction](https://github.com/suchoproduction) |[sksavant](https://github.com/sksavant) |
+| [<img alt="stephentuso" src="https://avatars.githubusercontent.com/u/11889560?v=4&s=117" width="117">](https://github.com/stephentuso) | [<img alt="bencergazda" src="https://avatars.githubusercontent.com/u/5767697?v=4&s=117" width="117">](https://github.com/bencergazda) | [<img alt="a-kriya" src="https://avatars.githubusercontent.com/u/26761352?v=4&s=117" width="117">](https://github.com/a-kriya) | [<img alt="yonahforst" src="https://avatars.githubusercontent.com/u/1440796?v=4&s=117" width="117">](https://github.com/yonahforst) | [<img alt="suchoproduction" src="https://avatars.githubusercontent.com/u/6931349?v=4&s=117" width="117">](https://github.com/suchoproduction) | [<img alt="sksavant" src="https://avatars.githubusercontent.com/u/1040701?v=4&s=117" width="117">](https://github.com/sksavant) |
+| :------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: |
+|                                             [stephentuso](https://github.com/stephentuso)                                              |                                             [bencergazda](https://github.com/bencergazda)                                             |                                             [a-kriya](https://github.com/a-kriya)                                              |                                             [yonahforst](https://github.com/yonahforst)                                             |                                             [suchoproduction](https://github.com/suchoproduction)                                             |                                             [sksavant](https://github.com/sksavant)                                             |
 
-[<img alt="ogtfaber" src="https://avatars.githubusercontent.com/u/320955?v=4&s=117" width="117">](https://github.com/ogtfaber) |[<img alt="nndevstudio" src="https://avatars.githubusercontent.com/u/22050968?v=4&s=117" width="117">](https://github.com/nndevstudio) |[<img alt="MatthiasKunnen" src="https://avatars.githubusercontent.com/u/16807587?v=4&s=117" width="117">](https://github.com/MatthiasKunnen) |[<img alt="manuelkiessling" src="https://avatars.githubusercontent.com/u/206592?v=4&s=117" width="117">](https://github.com/manuelkiessling) |[<img alt="dargmuesli" src="https://avatars.githubusercontent.com/u/4778485?v=4&s=117" width="117">](https://github.com/dargmuesli) |[<img alt="johnnyperkins" src="https://avatars.githubusercontent.com/u/16482282?v=4&s=117" width="117">](https://github.com/johnnyperkins) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[ogtfaber](https://github.com/ogtfaber) |[nndevstudio](https://github.com/nndevstudio) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[manuelkiessling](https://github.com/manuelkiessling) |[dargmuesli](https://github.com/dargmuesli) |[johnnyperkins](https://github.com/johnnyperkins) |
+| [<img alt="ogtfaber" src="https://avatars.githubusercontent.com/u/320955?v=4&s=117" width="117">](https://github.com/ogtfaber) | [<img alt="nndevstudio" src="https://avatars.githubusercontent.com/u/22050968?v=4&s=117" width="117">](https://github.com/nndevstudio) | [<img alt="MatthiasKunnen" src="https://avatars.githubusercontent.com/u/16807587?v=4&s=117" width="117">](https://github.com/MatthiasKunnen) | [<img alt="manuelkiessling" src="https://avatars.githubusercontent.com/u/206592?v=4&s=117" width="117">](https://github.com/manuelkiessling) | [<img alt="dargmuesli" src="https://avatars.githubusercontent.com/u/4778485?v=4&s=117" width="117">](https://github.com/dargmuesli) | [<img alt="johnnyperkins" src="https://avatars.githubusercontent.com/u/16482282?v=4&s=117" width="117">](https://github.com/johnnyperkins) |
+| :----------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: |
+|                                            [ogtfaber](https://github.com/ogtfaber)                                             |                                             [nndevstudio](https://github.com/nndevstudio)                                              |                                             [MatthiasKunnen](https://github.com/MatthiasKunnen)                                              |                                            [manuelkiessling](https://github.com/manuelkiessling)                                             |                                             [dargmuesli](https://github.com/dargmuesli)                                             |                                             [johnnyperkins](https://github.com/johnnyperkins)                                              |
 
-[<img alt="ofhope" src="https://avatars.githubusercontent.com/u/1826459?v=4&s=117" width="117">](https://github.com/ofhope) |[<img alt="yaegor" src="https://avatars.githubusercontent.com/u/3315?v=4&s=117" width="117">](https://github.com/yaegor) |[<img alt="zhuangya" src="https://avatars.githubusercontent.com/u/499038?v=4&s=117" width="117">](https://github.com/zhuangya) |[<img alt="sparanoid" src="https://avatars.githubusercontent.com/u/96356?v=4&s=117" width="117">](https://github.com/sparanoid) |[<img alt="ThomasG77" src="https://avatars.githubusercontent.com/u/642120?v=4&s=117" width="117">](https://github.com/ThomasG77) |[<img alt="subha1206" src="https://avatars.githubusercontent.com/u/36275153?v=4&s=117" width="117">](https://github.com/subha1206) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[ofhope](https://github.com/ofhope) |[yaegor](https://github.com/yaegor) |[zhuangya](https://github.com/zhuangya) |[sparanoid](https://github.com/sparanoid) |[ThomasG77](https://github.com/ThomasG77) |[subha1206](https://github.com/subha1206) |
+| [<img alt="ofhope" src="https://avatars.githubusercontent.com/u/1826459?v=4&s=117" width="117">](https://github.com/ofhope) | [<img alt="yaegor" src="https://avatars.githubusercontent.com/u/3315?v=4&s=117" width="117">](https://github.com/yaegor) | [<img alt="zhuangya" src="https://avatars.githubusercontent.com/u/499038?v=4&s=117" width="117">](https://github.com/zhuangya) | [<img alt="sparanoid" src="https://avatars.githubusercontent.com/u/96356?v=4&s=117" width="117">](https://github.com/sparanoid) | [<img alt="ThomasG77" src="https://avatars.githubusercontent.com/u/642120?v=4&s=117" width="117">](https://github.com/ThomasG77) | [<img alt="subha1206" src="https://avatars.githubusercontent.com/u/36275153?v=4&s=117" width="117">](https://github.com/subha1206) |
+| :-------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [ofhope](https://github.com/ofhope)                                             |                                           [yaegor](https://github.com/yaegor)                                            |                                            [zhuangya](https://github.com/zhuangya)                                             |                                            [sparanoid](https://github.com/sparanoid)                                            |                                            [ThomasG77](https://github.com/ThomasG77)                                             |                                             [subha1206](https://github.com/subha1206)                                              |
 
-[<img alt="schonert" src="https://avatars.githubusercontent.com/u/2185697?v=4&s=117" width="117">](https://github.com/schonert) |[<img alt="SlavikTraktor" src="https://avatars.githubusercontent.com/u/11923751?v=4&s=117" width="117">](https://github.com/SlavikTraktor) |[<img alt="scottbessler" src="https://avatars.githubusercontent.com/u/293802?v=4&s=117" width="117">](https://github.com/scottbessler) |[<img alt="jrschumacher" src="https://avatars.githubusercontent.com/u/46549?v=4&s=117" width="117">](https://github.com/jrschumacher) |[<img alt="rosenfeld" src="https://avatars.githubusercontent.com/u/32246?v=4&s=117" width="117">](https://github.com/rosenfeld) |[<img alt="rdimartino" src="https://avatars.githubusercontent.com/u/11539300?v=4&s=117" width="117">](https://github.com/rdimartino) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[schonert](https://github.com/schonert) |[SlavikTraktor](https://github.com/SlavikTraktor) |[scottbessler](https://github.com/scottbessler) |[jrschumacher](https://github.com/jrschumacher) |[rosenfeld](https://github.com/rosenfeld) |[rdimartino](https://github.com/rdimartino) |
+| [<img alt="schonert" src="https://avatars.githubusercontent.com/u/2185697?v=4&s=117" width="117">](https://github.com/schonert) | [<img alt="SlavikTraktor" src="https://avatars.githubusercontent.com/u/11923751?v=4&s=117" width="117">](https://github.com/SlavikTraktor) | [<img alt="scottbessler" src="https://avatars.githubusercontent.com/u/293802?v=4&s=117" width="117">](https://github.com/scottbessler) | [<img alt="jrschumacher" src="https://avatars.githubusercontent.com/u/46549?v=4&s=117" width="117">](https://github.com/jrschumacher) | [<img alt="rosenfeld" src="https://avatars.githubusercontent.com/u/32246?v=4&s=117" width="117">](https://github.com/rosenfeld) | [<img alt="rdimartino" src="https://avatars.githubusercontent.com/u/11539300?v=4&s=117" width="117">](https://github.com/rdimartino) |
+| :-----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [schonert](https://github.com/schonert)                                             |                                             [SlavikTraktor](https://github.com/SlavikTraktor)                                              |                                            [scottbessler](https://github.com/scottbessler)                                             |                                            [jrschumacher](https://github.com/jrschumacher)                                            |                                            [rosenfeld](https://github.com/rosenfeld)                                            |                                             [rdimartino](https://github.com/rdimartino)                                              |
 
 [<img alt="ahmedkandel" src="https://avatars.githubusercontent.com/u/28398523?v=4&s=117" width="117">](https://github.com/ahmedkandel) |[<img alt="Youssef1313" src="https://avatars.githubusercontent.com/u/31348972?v=4&s=117" width="117">](https://github.com/Youssef1313) |[<img alt="allenfantasy" src="https://avatars.githubusercontent.com/u/1009294?v=4&s=117" width="117">](https://github.com/allenfantasy) |[<img alt="Zyclotrop-j" src="https://avatars.githubusercontent.com/u/4939546?v=4&s=117" width="117">](https://github.com/Zyclotrop-j) |[<img alt="anark" src="https://avatars.githubusercontent.com/u/101184?v=4&s=117" width="117">](https://github.com/anark) |[<img alt="bdirito" src="https://avatars.githubusercontent.com/u/8117238?v=4&s=117" width="117">](https://github.com/bdirito) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -259,9 +342,9 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[btrice](https://github.com/btrice) |[5idereal](https://github.com/5idereal) |
 
-[<img alt="AndrwM" src="https://avatars.githubusercontent.com/u/565743?v=4&s=117" width="117">](https://github.com/AndrwM) |[<img alt="behnammodi" src="https://avatars.githubusercontent.com/u/1549069?v=4&s=117" width="117">](https://github.com/behnammodi) |[<img alt="BePo65" src="https://avatars.githubusercontent.com/u/6582465?v=4&s=117" width="117">](https://github.com/BePo65) |[<img alt="bradedelman" src="https://avatars.githubusercontent.com/u/124367?v=4&s=117" width="117">](https://github.com/bradedelman) |[<img alt="camiloforero" src="https://avatars.githubusercontent.com/u/6606686?v=4&s=117" width="117">](https://github.com/camiloforero) |[<img alt="command-tab" src="https://avatars.githubusercontent.com/u/3069?v=4&s=117" width="117">](https://github.com/command-tab) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[AndrwM](https://github.com/AndrwM) |[behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[bradedelman](https://github.com/bradedelman) |[camiloforero](https://github.com/camiloforero) |[command-tab](https://github.com/command-tab) |
+| [<img alt="AndrwM" src="https://avatars.githubusercontent.com/u/565743?v=4&s=117" width="117">](https://github.com/AndrwM) | [<img alt="behnammodi" src="https://avatars.githubusercontent.com/u/1549069?v=4&s=117" width="117">](https://github.com/behnammodi) | [<img alt="BePo65" src="https://avatars.githubusercontent.com/u/6582465?v=4&s=117" width="117">](https://github.com/BePo65) | [<img alt="bradedelman" src="https://avatars.githubusercontent.com/u/124367?v=4&s=117" width="117">](https://github.com/bradedelman) | [<img alt="camiloforero" src="https://avatars.githubusercontent.com/u/6606686?v=4&s=117" width="117">](https://github.com/camiloforero) | [<img alt="command-tab" src="https://avatars.githubusercontent.com/u/3069?v=4&s=117" width="117">](https://github.com/command-tab) |
+| :------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: |
+|                                            [AndrwM](https://github.com/AndrwM)                                             |                                             [behnammodi](https://github.com/behnammodi)                                             |                                             [BePo65](https://github.com/BePo65)                                             |                                            [bradedelman](https://github.com/bradedelman)                                             |                                             [camiloforero](https://github.com/camiloforero)                                             |                                           [command-tab](https://github.com/command-tab)                                            |
 
 [<img alt="craig-jennings" src="https://avatars.githubusercontent.com/u/1683368?v=4&s=117" width="117">](https://github.com/craig-jennings) |[<img alt="davekiss" src="https://avatars.githubusercontent.com/u/1256071?v=4&s=117" width="117">](https://github.com/davekiss) |[<img alt="denysdesign" src="https://avatars.githubusercontent.com/u/1041797?v=4&s=117" width="117">](https://github.com/denysdesign) |[<img alt="ethanwillis" src="https://avatars.githubusercontent.com/u/182492?v=4&s=117" width="117">](https://github.com/ethanwillis) |[<img alt="paescuj" src="https://avatars.githubusercontent.com/u/5363448?v=4&s=117" width="117">](https://github.com/paescuj) |[<img alt="msand" src="https://avatars.githubusercontent.com/u/1131362?v=4&s=117" width="117">](https://github.com/msand) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -287,37 +370,37 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [pmusaraj](https://github.com/pmusaraj) |[pedrofs](https://github.com/pedrofs) |[plneto](https://github.com/plneto) |[patricklindsay](https://github.com/patricklindsay) |[pascalwengerter](https://github.com/pascalwengerter) |[ParsaArvanehPA](https://github.com/ParsaArvanehPA) |
 
-[<img alt="taj" src="https://avatars.githubusercontent.com/u/16062635?v=4&s=117" width="117">](https://github.com/taj) |[<img alt="strayer" src="https://avatars.githubusercontent.com/u/310624?v=4&s=117" width="117">](https://github.com/strayer) |[<img alt="sjauld" src="https://avatars.githubusercontent.com/u/8232503?v=4&s=117" width="117">](https://github.com/sjauld) |[<img alt="steverob" src="https://avatars.githubusercontent.com/u/1220480?v=4&s=117" width="117">](https://github.com/steverob) |[<img alt="amaitu" src="https://avatars.githubusercontent.com/u/15688439?v=4&s=117" width="117">](https://github.com/amaitu) |[<img alt="quigebo" src="https://avatars.githubusercontent.com/u/741?v=4&s=117" width="117">](https://github.com/quigebo) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[taj](https://github.com/taj) |[strayer](https://github.com/strayer) |[sjauld](https://github.com/sjauld) |[steverob](https://github.com/steverob) |[amaitu](https://github.com/amaitu) |[quigebo](https://github.com/quigebo) |
+| [<img alt="taj" src="https://avatars.githubusercontent.com/u/16062635?v=4&s=117" width="117">](https://github.com/taj) | [<img alt="strayer" src="https://avatars.githubusercontent.com/u/310624?v=4&s=117" width="117">](https://github.com/strayer) | [<img alt="sjauld" src="https://avatars.githubusercontent.com/u/8232503?v=4&s=117" width="117">](https://github.com/sjauld) | [<img alt="steverob" src="https://avatars.githubusercontent.com/u/1220480?v=4&s=117" width="117">](https://github.com/steverob) | [<img alt="amaitu" src="https://avatars.githubusercontent.com/u/15688439?v=4&s=117" width="117">](https://github.com/amaitu) | [<img alt="quigebo" src="https://avatars.githubusercontent.com/u/741?v=4&s=117" width="117">](https://github.com/quigebo) |
+| :--------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: |
+|                                             [taj](https://github.com/taj)                                              |                                            [strayer](https://github.com/strayer)                                             |                                             [sjauld](https://github.com/sjauld)                                             |                                             [steverob](https://github.com/steverob)                                             |                                             [amaitu](https://github.com/amaitu)                                              |                                           [quigebo](https://github.com/quigebo)                                           |
 
-[<img alt="waptik" src="https://avatars.githubusercontent.com/u/1687551?v=4&s=117" width="117">](https://github.com/waptik) |[<img alt="SpazzMarticus" src="https://avatars.githubusercontent.com/u/5716457?v=4&s=117" width="117">](https://github.com/SpazzMarticus) |[<img alt="szh" src="https://avatars.githubusercontent.com/u/546965?v=4&s=117" width="117">](https://github.com/szh) |[<img alt="sergei-zelinsky" src="https://avatars.githubusercontent.com/u/19428086?v=4&s=117" width="117">](https://github.com/sergei-zelinsky) |[<img alt="sebasegovia01" src="https://avatars.githubusercontent.com/u/35777287?v=4&s=117" width="117">](https://github.com/sebasegovia01) |[<img alt="sdebacker" src="https://avatars.githubusercontent.com/u/134503?v=4&s=117" width="117">](https://github.com/sdebacker) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[waptik](https://github.com/waptik) |[SpazzMarticus](https://github.com/SpazzMarticus) |[szh](https://github.com/szh) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[sebasegovia01](https://github.com/sebasegovia01) |[sdebacker](https://github.com/sdebacker) |
+| [<img alt="waptik" src="https://avatars.githubusercontent.com/u/1687551?v=4&s=117" width="117">](https://github.com/waptik) | [<img alt="SpazzMarticus" src="https://avatars.githubusercontent.com/u/5716457?v=4&s=117" width="117">](https://github.com/SpazzMarticus) | [<img alt="szh" src="https://avatars.githubusercontent.com/u/546965?v=4&s=117" width="117">](https://github.com/szh) | [<img alt="sergei-zelinsky" src="https://avatars.githubusercontent.com/u/19428086?v=4&s=117" width="117">](https://github.com/sergei-zelinsky) | [<img alt="sebasegovia01" src="https://avatars.githubusercontent.com/u/35777287?v=4&s=117" width="117">](https://github.com/sebasegovia01) | [<img alt="sdebacker" src="https://avatars.githubusercontent.com/u/134503?v=4&s=117" width="117">](https://github.com/sdebacker) |
+| :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [waptik](https://github.com/waptik)                                             |                                             [SpazzMarticus](https://github.com/SpazzMarticus)                                             |                                            [szh](https://github.com/szh)                                             |                                             [sergei-zelinsky](https://github.com/sergei-zelinsky)                                              |                                             [sebasegovia01](https://github.com/sebasegovia01)                                              |                                            [sdebacker](https://github.com/sdebacker)                                             |
 
 [<img alt="samuelcolburn" src="https://avatars.githubusercontent.com/u/9741902?v=4&s=117" width="117">](https://github.com/samuelcolburn) |[<img alt="fortunto2" src="https://avatars.githubusercontent.com/u/1236751?v=4&s=117" width="117">](https://github.com/fortunto2) |[<img alt="GNURub" src="https://avatars.githubusercontent.com/u/1318648?v=4&s=117" width="117">](https://github.com/GNURub) |[<img alt="rart" src="https://avatars.githubusercontent.com/u/3928341?v=4&s=117" width="117">](https://github.com/rart) |[<img alt="rossng" src="https://avatars.githubusercontent.com/u/565371?v=4&s=117" width="117">](https://github.com/rossng) |[<img alt="mkopinsky" src="https://avatars.githubusercontent.com/u/591435?v=4&s=117" width="117">](https://github.com/mkopinsky) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [samuelcolburn](https://github.com/samuelcolburn) |[fortunto2](https://github.com/fortunto2) |[GNURub](https://github.com/GNURub) |[rart](https://github.com/rart) |[rossng](https://github.com/rossng) |[mkopinsky](https://github.com/mkopinsky) |
 
-[<img alt="mhulet" src="https://avatars.githubusercontent.com/u/293355?v=4&s=117" width="117">](https://github.com/mhulet) |[<img alt="hrsh" src="https://avatars.githubusercontent.com/u/1929359?v=4&s=117" width="117">](https://github.com/hrsh) |[<img alt="mauricioribeiro" src="https://avatars.githubusercontent.com/u/2589856?v=4&s=117" width="117">](https://github.com/mauricioribeiro) |[<img alt="matthewhartstonge" src="https://avatars.githubusercontent.com/u/6119549?v=4&s=117" width="117">](https://github.com/matthewhartstonge) |[<img alt="mjesuele" src="https://avatars.githubusercontent.com/u/871117?v=4&s=117" width="117">](https://github.com/mjesuele) |[<img alt="mattfik" src="https://avatars.githubusercontent.com/u/1638028?v=4&s=117" width="117">](https://github.com/mattfik) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[mhulet](https://github.com/mhulet) |[hrsh](https://github.com/hrsh) |[mauricioribeiro](https://github.com/mauricioribeiro) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mjesuele](https://github.com/mjesuele) |[mattfik](https://github.com/mattfik) |
+| [<img alt="mhulet" src="https://avatars.githubusercontent.com/u/293355?v=4&s=117" width="117">](https://github.com/mhulet) | [<img alt="hrsh" src="https://avatars.githubusercontent.com/u/1929359?v=4&s=117" width="117">](https://github.com/hrsh) | [<img alt="mauricioribeiro" src="https://avatars.githubusercontent.com/u/2589856?v=4&s=117" width="117">](https://github.com/mauricioribeiro) | [<img alt="matthewhartstonge" src="https://avatars.githubusercontent.com/u/6119549?v=4&s=117" width="117">](https://github.com/matthewhartstonge) | [<img alt="mjesuele" src="https://avatars.githubusercontent.com/u/871117?v=4&s=117" width="117">](https://github.com/mjesuele) | [<img alt="mattfik" src="https://avatars.githubusercontent.com/u/1638028?v=4&s=117" width="117">](https://github.com/mattfik) |
+| :------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: |
+|                                            [mhulet](https://github.com/mhulet)                                             |                                             [hrsh](https://github.com/hrsh)                                             |                                             [mauricioribeiro](https://github.com/mauricioribeiro)                                             |                                             [matthewhartstonge](https://github.com/matthewhartstonge)                                             |                                            [mjesuele](https://github.com/mjesuele)                                             |                                             [mattfik](https://github.com/mattfik)                                             |
 
-[<img alt="mateuscruz" src="https://avatars.githubusercontent.com/u/8962842?v=4&s=117" width="117">](https://github.com/mateuscruz) |[<img alt="masumulu28" src="https://avatars.githubusercontent.com/u/49063256?v=4&s=117" width="117">](https://github.com/masumulu28) |[<img alt="masaok" src="https://avatars.githubusercontent.com/u/1320083?v=4&s=117" width="117">](https://github.com/masaok) |[<img alt="martin-brennan" src="https://avatars.githubusercontent.com/u/920448?v=4&s=117" width="117">](https://github.com/martin-brennan) |[<img alt="marcusforsberg" src="https://avatars.githubusercontent.com/u/1009069?v=4&s=117" width="117">](https://github.com/marcusforsberg) |[<img alt="marcosthejew" src="https://avatars.githubusercontent.com/u/1500967?v=4&s=117" width="117">](https://github.com/marcosthejew) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[mateuscruz](https://github.com/mateuscruz) |[masumulu28](https://github.com/masumulu28) |[masaok](https://github.com/masaok) |[martin-brennan](https://github.com/martin-brennan) |[marcusforsberg](https://github.com/marcusforsberg) |[marcosthejew](https://github.com/marcosthejew) |
+| [<img alt="mateuscruz" src="https://avatars.githubusercontent.com/u/8962842?v=4&s=117" width="117">](https://github.com/mateuscruz) | [<img alt="masumulu28" src="https://avatars.githubusercontent.com/u/49063256?v=4&s=117" width="117">](https://github.com/masumulu28) | [<img alt="masaok" src="https://avatars.githubusercontent.com/u/1320083?v=4&s=117" width="117">](https://github.com/masaok) | [<img alt="martin-brennan" src="https://avatars.githubusercontent.com/u/920448?v=4&s=117" width="117">](https://github.com/martin-brennan) | [<img alt="marcusforsberg" src="https://avatars.githubusercontent.com/u/1009069?v=4&s=117" width="117">](https://github.com/marcusforsberg) | [<img alt="marcosthejew" src="https://avatars.githubusercontent.com/u/1500967?v=4&s=117" width="117">](https://github.com/marcosthejew) |
+| :---------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [mateuscruz](https://github.com/mateuscruz)                                             |                                             [masumulu28](https://github.com/masumulu28)                                              |                                             [masaok](https://github.com/masaok)                                             |                                            [martin-brennan](https://github.com/martin-brennan)                                             |                                             [marcusforsberg](https://github.com/marcusforsberg)                                             |                                             [marcosthejew](https://github.com/marcosthejew)                                             |
 
 [<img alt="mperrando" src="https://avatars.githubusercontent.com/u/525572?v=4&s=117" width="117">](https://github.com/mperrando) |[<img alt="onhate" src="https://avatars.githubusercontent.com/u/980905?v=4&s=117" width="117">](https://github.com/onhate) |[<img alt="marc-mabe" src="https://avatars.githubusercontent.com/u/302689?v=4&s=117" width="117">](https://github.com/marc-mabe) |[<img alt="Lucklj521" src="https://avatars.githubusercontent.com/u/93632042?v=4&s=117" width="117">](https://github.com/Lucklj521) |[<img alt="cryptic022" src="https://avatars.githubusercontent.com/u/18145703?v=4&s=117" width="117">](https://github.com/cryptic022) |[<img alt="Ozodbek1405" src="https://avatars.githubusercontent.com/u/86141593?v=4&s=117" width="117">](https://github.com/Ozodbek1405) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [mperrando](https://github.com/mperrando) |[onhate](https://github.com/onhate) |[marc-mabe](https://github.com/marc-mabe) |[Lucklj521](https://github.com/Lucklj521) |[cryptic022](https://github.com/cryptic022) |[Ozodbek1405](https://github.com/Ozodbek1405) |
 
-[<img alt="leftdevel" src="https://avatars.githubusercontent.com/u/843337?v=4&s=117" width="117">](https://github.com/leftdevel) |[<img alt="nil1511" src="https://avatars.githubusercontent.com/u/2058170?v=4&s=117" width="117">](https://github.com/nil1511) |[<img alt="coreprocess" src="https://avatars.githubusercontent.com/u/1226918?v=4&s=117" width="117">](https://github.com/coreprocess) |[<img alt="nicojones" src="https://avatars.githubusercontent.com/u/6078915?v=4&s=117" width="117">](https://github.com/nicojones) |[<img alt="trungcva10a6tn" src="https://avatars.githubusercontent.com/u/18293783?v=4&s=117" width="117">](https://github.com/trungcva10a6tn) |[<img alt="naveed-ahmad" src="https://avatars.githubusercontent.com/u/701567?v=4&s=117" width="117">](https://github.com/naveed-ahmad) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[leftdevel](https://github.com/leftdevel) |[nil1511](https://github.com/nil1511) |[coreprocess](https://github.com/coreprocess) |[nicojones](https://github.com/nicojones) |[trungcva10a6tn](https://github.com/trungcva10a6tn) |[naveed-ahmad](https://github.com/naveed-ahmad) |
+| [<img alt="leftdevel" src="https://avatars.githubusercontent.com/u/843337?v=4&s=117" width="117">](https://github.com/leftdevel) | [<img alt="nil1511" src="https://avatars.githubusercontent.com/u/2058170?v=4&s=117" width="117">](https://github.com/nil1511) | [<img alt="coreprocess" src="https://avatars.githubusercontent.com/u/1226918?v=4&s=117" width="117">](https://github.com/coreprocess) | [<img alt="nicojones" src="https://avatars.githubusercontent.com/u/6078915?v=4&s=117" width="117">](https://github.com/nicojones) | [<img alt="trungcva10a6tn" src="https://avatars.githubusercontent.com/u/18293783?v=4&s=117" width="117">](https://github.com/trungcva10a6tn) | [<img alt="naveed-ahmad" src="https://avatars.githubusercontent.com/u/701567?v=4&s=117" width="117">](https://github.com/naveed-ahmad) |
+| :------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: |
+|                                            [leftdevel](https://github.com/leftdevel)                                             |                                             [nil1511](https://github.com/nil1511)                                             |                                             [coreprocess](https://github.com/coreprocess)                                             |                                             [nicojones](https://github.com/nicojones)                                             |                                             [trungcva10a6tn](https://github.com/trungcva10a6tn)                                              |                                            [naveed-ahmad](https://github.com/naveed-ahmad)                                             |
 
-[<img alt="pleasespammelater" src="https://avatars.githubusercontent.com/u/11870394?v=4&s=117" width="117">](https://github.com/pleasespammelater) |[<img alt="marton-laszlo-attila" src="https://avatars.githubusercontent.com/u/73295321?v=4&s=117" width="117">](https://github.com/marton-laszlo-attila) |[<img alt="navruzm" src="https://avatars.githubusercontent.com/u/168341?v=4&s=117" width="117">](https://github.com/navruzm) |[<img alt="mogzol" src="https://avatars.githubusercontent.com/u/11789801?v=4&s=117" width="117">](https://github.com/mogzol) |[<img alt="shahimclt" src="https://avatars.githubusercontent.com/u/8318002?v=4&s=117" width="117">](https://github.com/shahimclt) |[<img alt="mnafees" src="https://avatars.githubusercontent.com/u/1763885?v=4&s=117" width="117">](https://github.com/mnafees) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[pleasespammelater](https://github.com/pleasespammelater) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) |[navruzm](https://github.com/navruzm) |[mogzol](https://github.com/mogzol) |[shahimclt](https://github.com/shahimclt) |[mnafees](https://github.com/mnafees) |
+| [<img alt="pleasespammelater" src="https://avatars.githubusercontent.com/u/11870394?v=4&s=117" width="117">](https://github.com/pleasespammelater) | [<img alt="marton-laszlo-attila" src="https://avatars.githubusercontent.com/u/73295321?v=4&s=117" width="117">](https://github.com/marton-laszlo-attila) | [<img alt="navruzm" src="https://avatars.githubusercontent.com/u/168341?v=4&s=117" width="117">](https://github.com/navruzm) | [<img alt="mogzol" src="https://avatars.githubusercontent.com/u/11789801?v=4&s=117" width="117">](https://github.com/mogzol) | [<img alt="shahimclt" src="https://avatars.githubusercontent.com/u/8318002?v=4&s=117" width="117">](https://github.com/shahimclt) | [<img alt="mnafees" src="https://avatars.githubusercontent.com/u/1763885?v=4&s=117" width="117">](https://github.com/mnafees) |
+| :------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: |
+|                                             [pleasespammelater](https://github.com/pleasespammelater)                                              |                                             [marton-laszlo-attila](https://github.com/marton-laszlo-attila)                                              |                                            [navruzm](https://github.com/navruzm)                                             |                                             [mogzol](https://github.com/mogzol)                                              |                                             [shahimclt](https://github.com/shahimclt)                                             |                                             [mnafees](https://github.com/mnafees)                                             |
 
 [<img alt="boudra" src="https://avatars.githubusercontent.com/u/711886?v=4&s=117" width="117">](https://github.com/boudra) |[<img alt="achmiral" src="https://avatars.githubusercontent.com/u/10906059?v=4&s=117" width="117">](https://github.com/achmiral) |[<img alt="ken-kuro" src="https://avatars.githubusercontent.com/u/47441476?v=4&s=117" width="117">](https://github.com/ken-kuro) |[<img alt="mosi-kha" src="https://avatars.githubusercontent.com/u/35611016?v=4&s=117" width="117">](https://github.com/mosi-kha) |[<img alt="maddy-jo" src="https://avatars.githubusercontent.com/u/3241493?v=4&s=117" width="117">](https://github.com/maddy-jo) |[<img alt="mdxiaohu" src="https://avatars.githubusercontent.com/u/42248614?v=4&s=117" width="117">](https://github.com/mdxiaohu) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -359,21 +442,21 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [Tashows](https://github.com/Tashows) |[dkisic](https://github.com/dkisic) |[craigcbrunner](https://github.com/craigcbrunner) |[codehero7386](https://github.com/codehero7386) |[christianwengert](https://github.com/christianwengert) |[cgoinglove](https://github.com/cgoinglove) |
 
-[<img alt="canvasbh" src="https://avatars.githubusercontent.com/u/44477734?v=4&s=117" width="117">](https://github.com/canvasbh) |[<img alt="c0b41" src="https://avatars.githubusercontent.com/u/2834954?v=4&s=117" width="117">](https://github.com/c0b41) |[<img alt="avalla" src="https://avatars.githubusercontent.com/u/986614?v=4&s=117" width="117">](https://github.com/avalla) |[<img alt="arggh" src="https://avatars.githubusercontent.com/u/17210302?v=4&s=117" width="117">](https://github.com/arggh) |[<img alt="alfatv" src="https://avatars.githubusercontent.com/u/62238673?v=4&s=117" width="117">](https://github.com/alfatv) |[<img alt="agreene-coursera" src="https://avatars.githubusercontent.com/u/30501355?v=4&s=117" width="117">](https://github.com/agreene-coursera) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[canvasbh](https://github.com/canvasbh) |[c0b41](https://github.com/c0b41) |[avalla](https://github.com/avalla) |[arggh](https://github.com/arggh) |[alfatv](https://github.com/alfatv) |[agreene-coursera](https://github.com/agreene-coursera) |
+| [<img alt="canvasbh" src="https://avatars.githubusercontent.com/u/44477734?v=4&s=117" width="117">](https://github.com/canvasbh) | [<img alt="c0b41" src="https://avatars.githubusercontent.com/u/2834954?v=4&s=117" width="117">](https://github.com/c0b41) | [<img alt="avalla" src="https://avatars.githubusercontent.com/u/986614?v=4&s=117" width="117">](https://github.com/avalla) | [<img alt="arggh" src="https://avatars.githubusercontent.com/u/17210302?v=4&s=117" width="117">](https://github.com/arggh) | [<img alt="alfatv" src="https://avatars.githubusercontent.com/u/62238673?v=4&s=117" width="117">](https://github.com/alfatv) | [<img alt="agreene-coursera" src="https://avatars.githubusercontent.com/u/30501355?v=4&s=117" width="117">](https://github.com/agreene-coursera) |
+| :------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [canvasbh](https://github.com/canvasbh)                                              |                                             [c0b41](https://github.com/c0b41)                                             |                                            [avalla](https://github.com/avalla)                                             |                                             [arggh](https://github.com/arggh)                                              |                                             [alfatv](https://github.com/alfatv)                                              |                                             [agreene-coursera](https://github.com/agreene-coursera)                                              |
 
-[<img alt="aduh95-test-account" src="https://avatars.githubusercontent.com/u/93441190?v=4&s=117" width="117">](https://github.com/aduh95-test-account) |[<img alt="sartoshi-foot-dao" src="https://avatars.githubusercontent.com/u/99770068?v=4&s=117" width="117">](https://github.com/sartoshi-foot-dao) |[<img alt="zackbloom" src="https://avatars.githubusercontent.com/u/55347?v=4&s=117" width="117">](https://github.com/zackbloom) |[<img alt="zlawson-ut" src="https://avatars.githubusercontent.com/u/7375444?v=4&s=117" width="117">](https://github.com/zlawson-ut) |[<img alt="zachconner" src="https://avatars.githubusercontent.com/u/11339326?v=4&s=117" width="117">](https://github.com/zachconner) |[<img alt="yafkari" src="https://avatars.githubusercontent.com/u/41365655?v=4&s=117" width="117">](https://github.com/yafkari) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[aduh95-test-account](https://github.com/aduh95-test-account) |[sartoshi-foot-dao](https://github.com/sartoshi-foot-dao) |[zackbloom](https://github.com/zackbloom) |[zlawson-ut](https://github.com/zlawson-ut) |[zachconner](https://github.com/zachconner) |[yafkari](https://github.com/yafkari) |
+| [<img alt="aduh95-test-account" src="https://avatars.githubusercontent.com/u/93441190?v=4&s=117" width="117">](https://github.com/aduh95-test-account) | [<img alt="sartoshi-foot-dao" src="https://avatars.githubusercontent.com/u/99770068?v=4&s=117" width="117">](https://github.com/sartoshi-foot-dao) | [<img alt="zackbloom" src="https://avatars.githubusercontent.com/u/55347?v=4&s=117" width="117">](https://github.com/zackbloom) | [<img alt="zlawson-ut" src="https://avatars.githubusercontent.com/u/7375444?v=4&s=117" width="117">](https://github.com/zlawson-ut) | [<img alt="zachconner" src="https://avatars.githubusercontent.com/u/11339326?v=4&s=117" width="117">](https://github.com/zachconner) | [<img alt="yafkari" src="https://avatars.githubusercontent.com/u/41365655?v=4&s=117" width="117">](https://github.com/yafkari) |
+| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: |
+|                                             [aduh95-test-account](https://github.com/aduh95-test-account)                                              |                                             [sartoshi-foot-dao](https://github.com/sartoshi-foot-dao)                                              |                                            [zackbloom](https://github.com/zackbloom)                                            |                                             [zlawson-ut](https://github.com/zlawson-ut)                                             |                                             [zachconner](https://github.com/zachconner)                                              |                                             [yafkari](https://github.com/yafkari)                                              |
 
 [<img alt="YehudaKremer" src="https://avatars.githubusercontent.com/u/946652?v=4&s=117" width="117">](https://github.com/YehudaKremer) |[<img alt="sercraig" src="https://avatars.githubusercontent.com/u/24261518?v=4&s=117" width="117">](https://github.com/sercraig) |[<img alt="ardeois" src="https://avatars.githubusercontent.com/u/1867939?v=4&s=117" width="117">](https://github.com/ardeois) |[<img alt="CommanderRoot" src="https://avatars.githubusercontent.com/u/4395417?v=4&s=117" width="117">](https://github.com/CommanderRoot) |[<img alt="czj" src="https://avatars.githubusercontent.com/u/14306?v=4&s=117" width="117">](https://github.com/czj) |[<img alt="cbush06" src="https://avatars.githubusercontent.com/u/15720146?v=4&s=117" width="117">](https://github.com/cbush06) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [YehudaKremer](https://github.com/YehudaKremer) |[sercraig](https://github.com/sercraig) |[ardeois](https://github.com/ardeois) |[CommanderRoot](https://github.com/CommanderRoot) |[czj](https://github.com/czj) |[cbush06](https://github.com/cbush06) |
 
-[<img alt="Aarbel" src="https://avatars.githubusercontent.com/u/25119847?v=4&s=117" width="117">](https://github.com/Aarbel) |[<img alt="cfra" src="https://avatars.githubusercontent.com/u/1347051?v=4&s=117" width="117">](https://github.com/cfra) |[<img alt="csprance" src="https://avatars.githubusercontent.com/u/7902617?v=4&s=117" width="117">](https://github.com/csprance) |[<img alt="prattcmp" src="https://avatars.githubusercontent.com/u/1497950?v=4&s=117" width="117">](https://github.com/prattcmp) |[<img alt="subvertallchris" src="https://avatars.githubusercontent.com/u/4097271?v=4&s=117" width="117">](https://github.com/subvertallchris) |[<img alt="charlybillaud" src="https://avatars.githubusercontent.com/u/31970410?v=4&s=117" width="117">](https://github.com/charlybillaud) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[Aarbel](https://github.com/Aarbel) |[cfra](https://github.com/cfra) |[csprance](https://github.com/csprance) |[prattcmp](https://github.com/prattcmp) |[subvertallchris](https://github.com/subvertallchris) |[charlybillaud](https://github.com/charlybillaud) |
+| [<img alt="Aarbel" src="https://avatars.githubusercontent.com/u/25119847?v=4&s=117" width="117">](https://github.com/Aarbel) | [<img alt="cfra" src="https://avatars.githubusercontent.com/u/1347051?v=4&s=117" width="117">](https://github.com/cfra) | [<img alt="csprance" src="https://avatars.githubusercontent.com/u/7902617?v=4&s=117" width="117">](https://github.com/csprance) | [<img alt="prattcmp" src="https://avatars.githubusercontent.com/u/1497950?v=4&s=117" width="117">](https://github.com/prattcmp) | [<img alt="subvertallchris" src="https://avatars.githubusercontent.com/u/4097271?v=4&s=117" width="117">](https://github.com/subvertallchris) | [<img alt="charlybillaud" src="https://avatars.githubusercontent.com/u/31970410?v=4&s=117" width="117">](https://github.com/charlybillaud) |
+| :--------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [Aarbel](https://github.com/Aarbel)                                              |                                             [cfra](https://github.com/cfra)                                             |                                             [csprance](https://github.com/csprance)                                             |                                             [prattcmp](https://github.com/prattcmp)                                             |                                             [subvertallchris](https://github.com/subvertallchris)                                             |                                             [charlybillaud](https://github.com/charlybillaud)                                              |
 
 [<img alt="Cretezy" src="https://avatars.githubusercontent.com/u/2672503?v=4&s=117" width="117">](https://github.com/Cretezy) |[<img alt="chao" src="https://avatars.githubusercontent.com/u/55872?v=4&s=117" width="117">](https://github.com/chao) |[<img alt="cellvinchung" src="https://avatars.githubusercontent.com/u/5347394?v=4&s=117" width="117">](https://github.com/cellvinchung) |[<img alt="cartfisk" src="https://avatars.githubusercontent.com/u/8764375?v=4&s=117" width="117">](https://github.com/cartfisk) |[<img alt="cyu" src="https://avatars.githubusercontent.com/u/2431?v=4&s=117" width="117">](https://github.com/cyu) |[<img alt="bryanjswift" src="https://avatars.githubusercontent.com/u/9911?v=4&s=117" width="117">](https://github.com/bryanjswift) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -383,13 +466,13 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [functino](https://github.com/functino) |[firesharkstudios](https://github.com/firesharkstudios) |[yoldar](https://github.com/yoldar) |[efbautista](https://github.com/efbautista) |[emuell](https://github.com/emuell) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |
 
-[<img alt="sweetro" src="https://avatars.githubusercontent.com/u/6228717?v=4&s=117" width="117">](https://github.com/sweetro) |[<img alt="jeetiss" src="https://avatars.githubusercontent.com/u/6726016?v=4&s=117" width="117">](https://github.com/jeetiss) |[<img alt="DennisKofflard" src="https://avatars.githubusercontent.com/u/8669129?v=4&s=117" width="117">](https://github.com/DennisKofflard) |[<img alt="hoangsvit" src="https://avatars.githubusercontent.com/u/11882322?v=4&s=117" width="117">](https://github.com/hoangsvit) |[<img alt="davilima6" src="https://avatars.githubusercontent.com/u/422130?v=4&s=117" width="117">](https://github.com/davilima6) |[<img alt="akizor" src="https://avatars.githubusercontent.com/u/1052439?v=4&s=117" width="117">](https://github.com/akizor) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[sweetro](https://github.com/sweetro) |[jeetiss](https://github.com/jeetiss) |[DennisKofflard](https://github.com/DennisKofflard) |[hoangsvit](https://github.com/hoangsvit) |[davilima6](https://github.com/davilima6) |[akizor](https://github.com/akizor) |
+| [<img alt="sweetro" src="https://avatars.githubusercontent.com/u/6228717?v=4&s=117" width="117">](https://github.com/sweetro) | [<img alt="jeetiss" src="https://avatars.githubusercontent.com/u/6726016?v=4&s=117" width="117">](https://github.com/jeetiss) | [<img alt="DennisKofflard" src="https://avatars.githubusercontent.com/u/8669129?v=4&s=117" width="117">](https://github.com/DennisKofflard) | [<img alt="hoangsvit" src="https://avatars.githubusercontent.com/u/11882322?v=4&s=117" width="117">](https://github.com/hoangsvit) | [<img alt="davilima6" src="https://avatars.githubusercontent.com/u/422130?v=4&s=117" width="117">](https://github.com/davilima6) | [<img alt="akizor" src="https://avatars.githubusercontent.com/u/1052439?v=4&s=117" width="117">](https://github.com/akizor) |
+| :---------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: |
+|                                             [sweetro](https://github.com/sweetro)                                             |                                             [jeetiss](https://github.com/jeetiss)                                             |                                             [DennisKofflard](https://github.com/DennisKofflard)                                             |                                             [hoangsvit](https://github.com/hoangsvit)                                              |                                            [davilima6](https://github.com/davilima6)                                             |                                             [akizor](https://github.com/akizor)                                             |
 
-[<img alt="KaminskiDaniell" src="https://avatars.githubusercontent.com/u/27357868?v=4&s=117" width="117">](https://github.com/KaminskiDaniell) |[<img alt="Cantabar" src="https://avatars.githubusercontent.com/u/6812207?v=4&s=117" width="117">](https://github.com/Cantabar) |[<img alt="mrboomer" src="https://avatars.githubusercontent.com/u/5942912?v=4&s=117" width="117">](https://github.com/mrboomer) |[<img alt="danilat" src="https://avatars.githubusercontent.com/u/22763?v=4&s=117" width="117">](https://github.com/danilat) |[<img alt="danschalow" src="https://avatars.githubusercontent.com/u/3527437?v=4&s=117" width="117">](https://github.com/danschalow) |[<img alt="danmichaelo" src="https://avatars.githubusercontent.com/u/434495?v=4&s=117" width="117">](https://github.com/danmichaelo) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[KaminskiDaniell](https://github.com/KaminskiDaniell) |[Cantabar](https://github.com/Cantabar) |[mrboomer](https://github.com/mrboomer) |[danilat](https://github.com/danilat) |[danschalow](https://github.com/danschalow) |[danmichaelo](https://github.com/danmichaelo) |
+| [<img alt="KaminskiDaniell" src="https://avatars.githubusercontent.com/u/27357868?v=4&s=117" width="117">](https://github.com/KaminskiDaniell) | [<img alt="Cantabar" src="https://avatars.githubusercontent.com/u/6812207?v=4&s=117" width="117">](https://github.com/Cantabar) | [<img alt="mrboomer" src="https://avatars.githubusercontent.com/u/5942912?v=4&s=117" width="117">](https://github.com/mrboomer) | [<img alt="danilat" src="https://avatars.githubusercontent.com/u/22763?v=4&s=117" width="117">](https://github.com/danilat) | [<img alt="danschalow" src="https://avatars.githubusercontent.com/u/3527437?v=4&s=117" width="117">](https://github.com/danschalow) | [<img alt="danmichaelo" src="https://avatars.githubusercontent.com/u/434495?v=4&s=117" width="117">](https://github.com/danmichaelo) |
+| :--------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [KaminskiDaniell](https://github.com/KaminskiDaniell)                                              |                                             [Cantabar](https://github.com/Cantabar)                                             |                                             [mrboomer](https://github.com/mrboomer)                                             |                                            [danilat](https://github.com/danilat)                                            |                                             [danschalow](https://github.com/danschalow)                                             |                                            [danmichaelo](https://github.com/danmichaelo)                                             |
 
 [<img alt="Cruaier" src="https://avatars.githubusercontent.com/u/5204940?v=4&s=117" width="117">](https://github.com/Cruaier) |[<img alt="amitport" src="https://avatars.githubusercontent.com/u/1131991?v=4&s=117" width="117">](https://github.com/amitport) |[<img alt="tekacs" src="https://avatars.githubusercontent.com/u/63247?v=4&s=117" width="117">](https://github.com/tekacs) |[<img alt="Dogfalo" src="https://avatars.githubusercontent.com/u/2775751?v=4&s=117" width="117">](https://github.com/Dogfalo) |[<img alt="alirezahi" src="https://avatars.githubusercontent.com/u/16666064?v=4&s=117" width="117">](https://github.com/alirezahi) |[<img alt="aalepis" src="https://avatars.githubusercontent.com/u/35684834?v=4&s=117" width="117">](https://github.com/aalepis) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -403,13 +486,13 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [adamvigneault](https://github.com/adamvigneault) |[ajh-sr](https://github.com/ajh-sr) |[adamdottv](https://github.com/adamdottv) |[abannach](https://github.com/abannach) |[superhawk610](https://github.com/superhawk610) |[ajschmidt8](https://github.com/ajschmidt8) |
 
-[<img alt="bedgerotto" src="https://avatars.githubusercontent.com/u/4459657?v=4&s=117" width="117">](https://github.com/bedgerotto) |[<img alt="wbaaron" src="https://avatars.githubusercontent.com/u/1048988?v=4&s=117" width="117">](https://github.com/wbaaron) |[<img alt="Quorafind" src="https://avatars.githubusercontent.com/u/13215013?v=4&s=117" width="117">](https://github.com/Quorafind) |[<img alt="bducharme" src="https://avatars.githubusercontent.com/u/4173569?v=4&s=117" width="117">](https://github.com/bducharme) |[<img alt="azizk" src="https://avatars.githubusercontent.com/u/37282?v=4&s=117" width="117">](https://github.com/azizk) |[<img alt="azeemba" src="https://avatars.githubusercontent.com/u/2160795?v=4&s=117" width="117">](https://github.com/azeemba) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[bedgerotto](https://github.com/bedgerotto) |[wbaaron](https://github.com/wbaaron) |[Quorafind](https://github.com/Quorafind) |[bducharme](https://github.com/bducharme) |[azizk](https://github.com/azizk) |[azeemba](https://github.com/azeemba) |
+| [<img alt="bedgerotto" src="https://avatars.githubusercontent.com/u/4459657?v=4&s=117" width="117">](https://github.com/bedgerotto) | [<img alt="wbaaron" src="https://avatars.githubusercontent.com/u/1048988?v=4&s=117" width="117">](https://github.com/wbaaron) | [<img alt="Quorafind" src="https://avatars.githubusercontent.com/u/13215013?v=4&s=117" width="117">](https://github.com/Quorafind) | [<img alt="bducharme" src="https://avatars.githubusercontent.com/u/4173569?v=4&s=117" width="117">](https://github.com/bducharme) | [<img alt="azizk" src="https://avatars.githubusercontent.com/u/37282?v=4&s=117" width="117">](https://github.com/azizk) | [<img alt="azeemba" src="https://avatars.githubusercontent.com/u/2160795?v=4&s=117" width="117">](https://github.com/azeemba) |
+| :---------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: |
+|                                             [bedgerotto](https://github.com/bedgerotto)                                             |                                             [wbaaron](https://github.com/wbaaron)                                             |                                             [Quorafind](https://github.com/Quorafind)                                              |                                             [bducharme](https://github.com/bducharme)                                             |                                            [azizk](https://github.com/azizk)                                            |                                             [azeemba](https://github.com/azeemba)                                             |
 
-[<img alt="ayhankesicioglu" src="https://avatars.githubusercontent.com/u/36304312?v=4&s=117" width="117">](https://github.com/ayhankesicioglu) |[<img alt="atsawin" src="https://avatars.githubusercontent.com/u/666663?v=4&s=117" width="117">](https://github.com/atsawin) |[<img alt="ash-jc-allen" src="https://avatars.githubusercontent.com/u/39652331?v=4&s=117" width="117">](https://github.com/ash-jc-allen) |[<img alt="apuyou" src="https://avatars.githubusercontent.com/u/520053?v=4&s=117" width="117">](https://github.com/apuyou) |[<img alt="arthurdenner" src="https://avatars.githubusercontent.com/u/13774309?v=4&s=117" width="117">](https://github.com/arthurdenner) |[<img alt="Abourass" src="https://avatars.githubusercontent.com/u/39917231?v=4&s=117" width="117">](https://github.com/Abourass) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[ayhankesicioglu](https://github.com/ayhankesicioglu) |[atsawin](https://github.com/atsawin) |[ash-jc-allen](https://github.com/ash-jc-allen) |[apuyou](https://github.com/apuyou) |[arthurdenner](https://github.com/arthurdenner) |[Abourass](https://github.com/Abourass) |
+| [<img alt="ayhankesicioglu" src="https://avatars.githubusercontent.com/u/36304312?v=4&s=117" width="117">](https://github.com/ayhankesicioglu) | [<img alt="atsawin" src="https://avatars.githubusercontent.com/u/666663?v=4&s=117" width="117">](https://github.com/atsawin) | [<img alt="ash-jc-allen" src="https://avatars.githubusercontent.com/u/39652331?v=4&s=117" width="117">](https://github.com/ash-jc-allen) | [<img alt="apuyou" src="https://avatars.githubusercontent.com/u/520053?v=4&s=117" width="117">](https://github.com/apuyou) | [<img alt="arthurdenner" src="https://avatars.githubusercontent.com/u/13774309?v=4&s=117" width="117">](https://github.com/arthurdenner) | [<img alt="Abourass" src="https://avatars.githubusercontent.com/u/39917231?v=4&s=117" width="117">](https://github.com/Abourass) |
+| :--------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [ayhankesicioglu](https://github.com/ayhankesicioglu)                                              |                                            [atsawin](https://github.com/atsawin)                                             |                                             [ash-jc-allen](https://github.com/ash-jc-allen)                                              |                                            [apuyou](https://github.com/apuyou)                                             |                                             [arthurdenner](https://github.com/arthurdenner)                                              |                                             [Abourass](https://github.com/Abourass)                                              |
 
 [<img alt="tyndria" src="https://avatars.githubusercontent.com/u/17138916?v=4&s=117" width="117">](https://github.com/tyndria) |[<img alt="anthony0030" src="https://avatars.githubusercontent.com/u/13033263?v=4&s=117" width="117">](https://github.com/anthony0030) |[<img alt="andychongyz" src="https://avatars.githubusercontent.com/u/12697240?v=4&s=117" width="117">](https://github.com/andychongyz) |[<img alt="andrii-bodnar" src="https://avatars.githubusercontent.com/u/29282228?v=4&s=117" width="117">](https://github.com/andrii-bodnar) |[<img alt="superandrew213" src="https://avatars.githubusercontent.com/u/13059204?v=4&s=117" width="117">](https://github.com/superandrew213) |[<img alt="radarhere" src="https://avatars.githubusercontent.com/u/3112309?v=4&s=117" width="117">](https://github.com/radarhere) |
 :---: |:---: |:---: |:---: |:---: |:---: |
@@ -419,45 +502,45 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 :---: |:---: |:---: |:---: |:---: |:---: |
 [tykarol](https://github.com/tykarol) |[jvelten](https://github.com/jvelten) |[mellow-fellow](https://github.com/mellow-fellow) |[jmontoyaa](https://github.com/jmontoyaa) |[jcalonso](https://github.com/jcalonso) |[jbelej](https://github.com/jbelej) |
 
-[<img alt="jbelej" src="https://avatars.githubusercontent.com/u/2229202?v=4&s=117" width="117">](https://github.com/jbelej) |[<img alt="jszobody" src="https://avatars.githubusercontent.com/u/203749?v=4&s=117" width="117">](https://github.com/jszobody) |[<img alt="jorgeepc" src="https://avatars.githubusercontent.com/u/3879892?v=4&s=117" width="117">](https://github.com/jorgeepc) |[<img alt="jondewoo" src="https://avatars.githubusercontent.com/u/1108358?v=4&s=117" width="117">](https://github.com/jondewoo) |[<img alt="jonathanarbely" src="https://avatars.githubusercontent.com/u/18177203?v=4&s=117" width="117">](https://github.com/jonathanarbely) |[<img alt="jsanchez034" src="https://avatars.githubusercontent.com/u/761087?v=4&s=117" width="117">](https://github.com/jsanchez034) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[jbelej](https://github.com/jbelej) |[jszobody](https://github.com/jszobody) |[jorgeepc](https://github.com/jorgeepc) |[jondewoo](https://github.com/jondewoo) |[jonathanarbely](https://github.com/jonathanarbely) |[jsanchez034](https://github.com/jsanchez034) |
+| [<img alt="jbelej" src="https://avatars.githubusercontent.com/u/2229202?v=4&s=117" width="117">](https://github.com/jbelej) | [<img alt="jszobody" src="https://avatars.githubusercontent.com/u/203749?v=4&s=117" width="117">](https://github.com/jszobody) | [<img alt="jorgeepc" src="https://avatars.githubusercontent.com/u/3879892?v=4&s=117" width="117">](https://github.com/jorgeepc) | [<img alt="jondewoo" src="https://avatars.githubusercontent.com/u/1108358?v=4&s=117" width="117">](https://github.com/jondewoo) | [<img alt="jonathanarbely" src="https://avatars.githubusercontent.com/u/18177203?v=4&s=117" width="117">](https://github.com/jonathanarbely) | [<img alt="jsanchez034" src="https://avatars.githubusercontent.com/u/761087?v=4&s=117" width="117">](https://github.com/jsanchez034) |
+| :-------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [jbelej](https://github.com/jbelej)                                             |                                            [jszobody](https://github.com/jszobody)                                             |                                             [jorgeepc](https://github.com/jorgeepc)                                             |                                             [jondewoo](https://github.com/jondewoo)                                             |                                             [jonathanarbely](https://github.com/jonathanarbely)                                              |                                            [jsanchez034](https://github.com/jsanchez034)                                             |
 
 [<img alt="Jokcy" src="https://avatars.githubusercontent.com/u/2088642?v=4&s=117" width="117">](https://github.com/Jokcy) |[<img alt="chromacoma" src="https://avatars.githubusercontent.com/u/1535623?v=4&s=117" width="117">](https://github.com/chromacoma) |[<img alt="profsmallpine" src="https://avatars.githubusercontent.com/u/7328006?v=4&s=117" width="117">](https://github.com/profsmallpine) |[<img alt="theJoeBiz" src="https://avatars.githubusercontent.com/u/189589?v=4&s=117" width="117">](https://github.com/theJoeBiz) |[<img alt="huydod" src="https://avatars.githubusercontent.com/u/37580530?v=4&s=117" width="117">](https://github.com/huydod) |[<img alt="lucax88x" src="https://avatars.githubusercontent.com/u/6294464?v=4&s=117" width="117">](https://github.com/lucax88x) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [Jokcy](https://github.com/Jokcy) |[chromacoma](https://github.com/chromacoma) |[profsmallpine](https://github.com/profsmallpine) |[theJoeBiz](https://github.com/theJoeBiz) |[huydod](https://github.com/huydod) |[lucax88x](https://github.com/lucax88x) |
 
-[<img alt="lucaperret" src="https://avatars.githubusercontent.com/u/1887122?v=4&s=117" width="117">](https://github.com/lucaperret) |[<img alt="ombr" src="https://avatars.githubusercontent.com/u/857339?v=4&s=117" width="117">](https://github.com/ombr) |[<img alt="louim" src="https://avatars.githubusercontent.com/u/923718?v=4&s=117" width="117">](https://github.com/louim) |[<img alt="dolphinigle" src="https://avatars.githubusercontent.com/u/7020472?v=4&s=117" width="117">](https://github.com/dolphinigle) |[<img alt="leomelzer" src="https://avatars.githubusercontent.com/u/23313?v=4&s=117" width="117">](https://github.com/leomelzer) |[<img alt="leods92" src="https://avatars.githubusercontent.com/u/879395?v=4&s=117" width="117">](https://github.com/leods92) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[lucaperret](https://github.com/lucaperret) |[ombr](https://github.com/ombr) |[louim](https://github.com/louim) |[dolphinigle](https://github.com/dolphinigle) |[leomelzer](https://github.com/leomelzer) |[leods92](https://github.com/leods92) |
+| [<img alt="lucaperret" src="https://avatars.githubusercontent.com/u/1887122?v=4&s=117" width="117">](https://github.com/lucaperret) | [<img alt="ombr" src="https://avatars.githubusercontent.com/u/857339?v=4&s=117" width="117">](https://github.com/ombr) | [<img alt="louim" src="https://avatars.githubusercontent.com/u/923718?v=4&s=117" width="117">](https://github.com/louim) | [<img alt="dolphinigle" src="https://avatars.githubusercontent.com/u/7020472?v=4&s=117" width="117">](https://github.com/dolphinigle) | [<img alt="leomelzer" src="https://avatars.githubusercontent.com/u/23313?v=4&s=117" width="117">](https://github.com/leomelzer) | [<img alt="leods92" src="https://avatars.githubusercontent.com/u/879395?v=4&s=117" width="117">](https://github.com/leods92) |
+| :---------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: |
+|                                             [lucaperret](https://github.com/lucaperret)                                             |                                            [ombr](https://github.com/ombr)                                             |                                            [louim](https://github.com/louim)                                             |                                             [dolphinigle](https://github.com/dolphinigle)                                             |                                            [leomelzer](https://github.com/leomelzer)                                            |                                            [leods92](https://github.com/leods92)                                             |
 
-[<img alt="galli-leo" src="https://avatars.githubusercontent.com/u/5339762?v=4&s=117" width="117">](https://github.com/galli-leo) |[<img alt="dviry" src="https://avatars.githubusercontent.com/u/1230260?v=4&s=117" width="117">](https://github.com/dviry) |[<img alt="larowlan" src="https://avatars.githubusercontent.com/u/555254?v=4&s=117" width="117">](https://github.com/larowlan) |[<img alt="leaanthony" src="https://avatars.githubusercontent.com/u/1943904?v=4&s=117" width="117">](https://github.com/leaanthony) |[<img alt="hoangbits" src="https://avatars.githubusercontent.com/u/7990827?v=4&s=117" width="117">](https://github.com/hoangbits) |[<img alt="labohkip81" src="https://avatars.githubusercontent.com/u/36964869?v=4&s=117" width="117">](https://github.com/labohkip81) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[galli-leo](https://github.com/galli-leo) |[dviry](https://github.com/dviry) |[larowlan](https://github.com/larowlan) |[leaanthony](https://github.com/leaanthony) |[hoangbits](https://github.com/hoangbits) |[labohkip81](https://github.com/labohkip81) |
+| [<img alt="galli-leo" src="https://avatars.githubusercontent.com/u/5339762?v=4&s=117" width="117">](https://github.com/galli-leo) | [<img alt="dviry" src="https://avatars.githubusercontent.com/u/1230260?v=4&s=117" width="117">](https://github.com/dviry) | [<img alt="larowlan" src="https://avatars.githubusercontent.com/u/555254?v=4&s=117" width="117">](https://github.com/larowlan) | [<img alt="leaanthony" src="https://avatars.githubusercontent.com/u/1943904?v=4&s=117" width="117">](https://github.com/leaanthony) | [<img alt="hoangbits" src="https://avatars.githubusercontent.com/u/7990827?v=4&s=117" width="117">](https://github.com/hoangbits) | [<img alt="labohkip81" src="https://avatars.githubusercontent.com/u/36964869?v=4&s=117" width="117">](https://github.com/labohkip81) |
+| :-------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [galli-leo](https://github.com/galli-leo)                                             |                                             [dviry](https://github.com/dviry)                                             |                                            [larowlan](https://github.com/larowlan)                                             |                                             [leaanthony](https://github.com/leaanthony)                                             |                                             [hoangbits](https://github.com/hoangbits)                                             |                                             [labohkip81](https://github.com/labohkip81)                                              |
 
 [<img alt="kyleparisi" src="https://avatars.githubusercontent.com/u/1286753?v=4&s=117" width="117">](https://github.com/kyleparisi) |[<img alt="elkebab" src="https://avatars.githubusercontent.com/u/6313468?v=4&s=117" width="117">](https://github.com/elkebab) |[<img alt="kidonng" src="https://avatars.githubusercontent.com/u/44045911?v=4&s=117" width="117">](https://github.com/kidonng) |[<img alt="kevin-west-10x" src="https://avatars.githubusercontent.com/u/65194914?v=4&s=117" width="117">](https://github.com/kevin-west-10x) |[<img alt="kergekacsa" src="https://avatars.githubusercontent.com/u/16637320?v=4&s=117" width="117">](https://github.com/kergekacsa) |[<img alt="HussainAlkhalifah" src="https://avatars.githubusercontent.com/u/43642162?v=4&s=117" width="117">](https://github.com/HussainAlkhalifah) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [kyleparisi](https://github.com/kyleparisi) |[elkebab](https://github.com/elkebab) |[kidonng](https://github.com/kidonng) |[kevin-west-10x](https://github.com/kevin-west-10x) |[kergekacsa](https://github.com/kergekacsa) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |
 
-[<img alt="HughbertD" src="https://avatars.githubusercontent.com/u/1580021?v=4&s=117" width="117">](https://github.com/HughbertD) |[<img alt="hiromi2424" src="https://avatars.githubusercontent.com/u/191297?v=4&s=117" width="117">](https://github.com/hiromi2424) |[<img alt="giacomocerquone" src="https://avatars.githubusercontent.com/u/9303791?v=4&s=117" width="117">](https://github.com/giacomocerquone) |[<img alt="roenschg" src="https://avatars.githubusercontent.com/u/9590236?v=4&s=117" width="117">](https://github.com/roenschg) |[<img alt="gjungb" src="https://avatars.githubusercontent.com/u/3391068?v=4&s=117" width="117">](https://github.com/gjungb) |[<img alt="geoffappleford" src="https://avatars.githubusercontent.com/u/731678?v=4&s=117" width="117">](https://github.com/geoffappleford) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[HughbertD](https://github.com/HughbertD) |[hiromi2424](https://github.com/hiromi2424) |[giacomocerquone](https://github.com/giacomocerquone) |[roenschg](https://github.com/roenschg) |[gjungb](https://github.com/gjungb) |[geoffappleford](https://github.com/geoffappleford) |
+| [<img alt="HughbertD" src="https://avatars.githubusercontent.com/u/1580021?v=4&s=117" width="117">](https://github.com/HughbertD) | [<img alt="hiromi2424" src="https://avatars.githubusercontent.com/u/191297?v=4&s=117" width="117">](https://github.com/hiromi2424) | [<img alt="giacomocerquone" src="https://avatars.githubusercontent.com/u/9303791?v=4&s=117" width="117">](https://github.com/giacomocerquone) | [<img alt="roenschg" src="https://avatars.githubusercontent.com/u/9590236?v=4&s=117" width="117">](https://github.com/roenschg) | [<img alt="gjungb" src="https://avatars.githubusercontent.com/u/3391068?v=4&s=117" width="117">](https://github.com/gjungb) | [<img alt="geoffappleford" src="https://avatars.githubusercontent.com/u/731678?v=4&s=117" width="117">](https://github.com/geoffappleford) |
+| :-------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [HughbertD](https://github.com/HughbertD)                                             |                                            [hiromi2424](https://github.com/hiromi2424)                                             |                                             [giacomocerquone](https://github.com/giacomocerquone)                                             |                                             [roenschg](https://github.com/roenschg)                                             |                                             [gjungb](https://github.com/gjungb)                                             |                                            [geoffappleford](https://github.com/geoffappleford)                                             |
 
-[<img alt="gabiganam" src="https://avatars.githubusercontent.com/u/28859646?v=4&s=117" width="117">](https://github.com/gabiganam) |[<img alt="fuadscodes" src="https://avatars.githubusercontent.com/u/60370584?v=4&s=117" width="117">](https://github.com/fuadscodes) |[<img alt="dtrucs" src="https://avatars.githubusercontent.com/u/1926041?v=4&s=117" width="117">](https://github.com/dtrucs) |[<img alt="ferdiusa" src="https://avatars.githubusercontent.com/u/1997982?v=4&s=117" width="117">](https://github.com/ferdiusa) |[<img alt="fgallinari" src="https://avatars.githubusercontent.com/u/6473638?v=4&s=117" width="117">](https://github.com/fgallinari) |[<img alt="Gkleinereva" src="https://avatars.githubusercontent.com/u/23621633?v=4&s=117" width="117">](https://github.com/Gkleinereva) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[gabiganam](https://github.com/gabiganam) |[fuadscodes](https://github.com/fuadscodes) |[dtrucs](https://github.com/dtrucs) |[ferdiusa](https://github.com/ferdiusa) |[fgallinari](https://github.com/fgallinari) |[Gkleinereva](https://github.com/Gkleinereva) |
+| [<img alt="gabiganam" src="https://avatars.githubusercontent.com/u/28859646?v=4&s=117" width="117">](https://github.com/gabiganam) | [<img alt="fuadscodes" src="https://avatars.githubusercontent.com/u/60370584?v=4&s=117" width="117">](https://github.com/fuadscodes) | [<img alt="dtrucs" src="https://avatars.githubusercontent.com/u/1926041?v=4&s=117" width="117">](https://github.com/dtrucs) | [<img alt="ferdiusa" src="https://avatars.githubusercontent.com/u/1997982?v=4&s=117" width="117">](https://github.com/ferdiusa) | [<img alt="fgallinari" src="https://avatars.githubusercontent.com/u/6473638?v=4&s=117" width="117">](https://github.com/fgallinari) | [<img alt="Gkleinereva" src="https://avatars.githubusercontent.com/u/23621633?v=4&s=117" width="117">](https://github.com/Gkleinereva) |
+| :--------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [gabiganam](https://github.com/gabiganam)                                              |                                             [fuadscodes](https://github.com/fuadscodes)                                              |                                             [dtrucs](https://github.com/dtrucs)                                             |                                             [ferdiusa](https://github.com/ferdiusa)                                             |                                             [fgallinari](https://github.com/fgallinari)                                             |                                             [Gkleinereva](https://github.com/Gkleinereva)                                              |
 
 [<img alt="epexa" src="https://avatars.githubusercontent.com/u/2198826?v=4&s=117" width="117">](https://github.com/epexa) |[<img alt="EnricoSottile" src="https://avatars.githubusercontent.com/u/10349653?v=4&s=117" width="117">](https://github.com/EnricoSottile) |[<img alt="elliotdickison" src="https://avatars.githubusercontent.com/u/2523678?v=4&s=117" width="117">](https://github.com/elliotdickison) |[<img alt="eliOcs" src="https://avatars.githubusercontent.com/u/1283954?v=4&s=117" width="117">](https://github.com/eliOcs) |[<img alt="Jmales" src="https://avatars.githubusercontent.com/u/22914881?v=4&s=117" width="117">](https://github.com/Jmales) |[<img alt="jessica-coursera" src="https://avatars.githubusercontent.com/u/35155465?v=4&s=117" width="117">](https://github.com/jessica-coursera) |
 :---: |:---: |:---: |:---: |:---: |:---: |
 [epexa](https://github.com/epexa) |[EnricoSottile](https://github.com/EnricoSottile) |[elliotdickison](https://github.com/elliotdickison) |[eliOcs](https://github.com/eliOcs) |[Jmales](https://github.com/Jmales) |[jessica-coursera](https://github.com/jessica-coursera) |
 
-[<img alt="vith" src="https://avatars.githubusercontent.com/u/3265539?v=4&s=117" width="117">](https://github.com/vith) |[<img alt="janwilts" src="https://avatars.githubusercontent.com/u/16721581?v=4&s=117" width="117">](https://github.com/janwilts) |[<img alt="janklimo" src="https://avatars.githubusercontent.com/u/7811733?v=4&s=117" width="117">](https://github.com/janklimo) |[<img alt="jamestiotio" src="https://avatars.githubusercontent.com/u/18364745?v=4&s=117" width="117">](https://github.com/jamestiotio) |[<img alt="jcjmcclean" src="https://avatars.githubusercontent.com/u/1822574?v=4&s=117" width="117">](https://github.com/jcjmcclean) |[<img alt="Jbithell" src="https://avatars.githubusercontent.com/u/8408967?v=4&s=117" width="117">](https://github.com/Jbithell) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[vith](https://github.com/vith) |[janwilts](https://github.com/janwilts) |[janklimo](https://github.com/janklimo) |[jamestiotio](https://github.com/jamestiotio) |[jcjmcclean](https://github.com/jcjmcclean) |[Jbithell](https://github.com/Jbithell) |
+| [<img alt="vith" src="https://avatars.githubusercontent.com/u/3265539?v=4&s=117" width="117">](https://github.com/vith) | [<img alt="janwilts" src="https://avatars.githubusercontent.com/u/16721581?v=4&s=117" width="117">](https://github.com/janwilts) | [<img alt="janklimo" src="https://avatars.githubusercontent.com/u/7811733?v=4&s=117" width="117">](https://github.com/janklimo) | [<img alt="jamestiotio" src="https://avatars.githubusercontent.com/u/18364745?v=4&s=117" width="117">](https://github.com/jamestiotio) | [<img alt="jcjmcclean" src="https://avatars.githubusercontent.com/u/1822574?v=4&s=117" width="117">](https://github.com/jcjmcclean) | [<img alt="Jbithell" src="https://avatars.githubusercontent.com/u/8408967?v=4&s=117" width="117">](https://github.com/Jbithell) |
+| :---------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: |
+|                                             [vith](https://github.com/vith)                                             |                                             [janwilts](https://github.com/janwilts)                                              |                                             [janklimo](https://github.com/janklimo)                                             |                                             [jamestiotio](https://github.com/jamestiotio)                                              |                                             [jcjmcclean](https://github.com/jcjmcclean)                                             |                                             [Jbithell](https://github.com/Jbithell)                                             |
 
-[<img alt="JakubHaladej" src="https://avatars.githubusercontent.com/u/77832677?v=4&s=117" width="117">](https://github.com/JakubHaladej) |[<img alt="jakemcallister" src="https://avatars.githubusercontent.com/u/1185699?v=4&s=117" width="117">](https://github.com/jakemcallister) |[<img alt="gaejabong" src="https://avatars.githubusercontent.com/u/978944?v=4&s=117" width="117">](https://github.com/gaejabong) |[<img alt="JacobMGEvans" src="https://avatars.githubusercontent.com/u/27247160?v=4&s=117" width="117">](https://github.com/JacobMGEvans) |[<img alt="mazoruss" src="https://avatars.githubusercontent.com/u/17625190?v=4&s=117" width="117">](https://github.com/mazoruss) |[<img alt="GreenJimmy" src="https://avatars.githubusercontent.com/u/39386?v=4&s=117" width="117">](https://github.com/GreenJimmy) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[JakubHaladej](https://github.com/JakubHaladej) |[jakemcallister](https://github.com/jakemcallister) |[gaejabong](https://github.com/gaejabong) |[JacobMGEvans](https://github.com/JacobMGEvans) |[mazoruss](https://github.com/mazoruss) |[GreenJimmy](https://github.com/GreenJimmy) |
+| [<img alt="JakubHaladej" src="https://avatars.githubusercontent.com/u/77832677?v=4&s=117" width="117">](https://github.com/JakubHaladej) | [<img alt="jakemcallister" src="https://avatars.githubusercontent.com/u/1185699?v=4&s=117" width="117">](https://github.com/jakemcallister) | [<img alt="gaejabong" src="https://avatars.githubusercontent.com/u/978944?v=4&s=117" width="117">](https://github.com/gaejabong) | [<img alt="JacobMGEvans" src="https://avatars.githubusercontent.com/u/27247160?v=4&s=117" width="117">](https://github.com/JacobMGEvans) | [<img alt="mazoruss" src="https://avatars.githubusercontent.com/u/17625190?v=4&s=117" width="117">](https://github.com/mazoruss) | [<img alt="GreenJimmy" src="https://avatars.githubusercontent.com/u/39386?v=4&s=117" width="117">](https://github.com/GreenJimmy) |
+| :--------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |
+|                                             [JakubHaladej](https://github.com/JakubHaladej)                                              |                                             [jakemcallister](https://github.com/jakemcallister)                                             |                                            [gaejabong](https://github.com/gaejabong)                                             |                                             [JacobMGEvans](https://github.com/JacobMGEvans)                                              |                                             [mazoruss](https://github.com/mazoruss)                                              |                                            [GreenJimmy](https://github.com/GreenJimmy)                                            |
 
 [<img alt="intenzive" src="https://avatars.githubusercontent.com/u/11055931?v=4&s=117" width="117">](https://github.com/intenzive) |[<img alt="NaxYo" src="https://avatars.githubusercontent.com/u/1963876?v=4&s=117" width="117">](https://github.com/NaxYo) |[<img alt="ishendyweb" src="https://avatars.githubusercontent.com/u/10582418?v=4&s=117" width="117">](https://github.com/ishendyweb) |[<img alt="IanVS" src="https://avatars.githubusercontent.com/u/4616705?v=4&s=117" width="117">](https://github.com/IanVS) |
 :---: |:---: |:---: |:---: |

+ 6 - 2
SECURITY.md

@@ -2,6 +2,10 @@
 
 ## Reporting a Vulnerability
 
-General security issues and concerns are we welcome in the public Github issue tracker: https://github.com/transloadit/uppy/issues.
+General security issues and concerns are we welcome in the public Github issue
+tracker: https://github.com/transloadit/uppy/issues.
 
-In case of a high risk of the shared vulnerability being exploited, please report it to support@transloadit.com instead, and visit https://transloadit.com/security/ to read about Transloadit’s security policy, and how we generally handle these cases.
+In case of a high risk of the shared vulnerability being exploited, please
+report it to support@transloadit.com instead, and visit
+https://transloadit.com/security/ to read about Transloadit’s security policy,
+and how we generally handle these cases.

+ 3 - 3
examples/aws-companion/README.md

@@ -1,8 +1,8 @@
 # Uppy + AWS S3 Example
 
-This example uses @uppy/companion with a custom AWS S3 configuration.
-Files are uploaded to a randomly named directory inside the `whatever/`
-directory in a bucket.
+This example uses @uppy/companion with a custom AWS S3 configuration. Files are
+uploaded to a randomly named directory inside the `whatever/` directory in a
+bucket.
 
 ## Run it
 

+ 12 - 5
examples/aws-php/readme.md

@@ -4,7 +4,8 @@ This example uses a server-side PHP endpoint to sign uploads to S3.
 
 ## Running It
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```bash
 yarn || corepack yarn install
@@ -13,14 +14,18 @@ yarn build || corepack yarn build
 
 That will also install the npm dependencies for this example.
 
-This example also uses the AWS PHP SDK.
-To install it, [get composer](https://getcomposer.org) and run `composer update` in this folder.
+This example also uses the AWS PHP SDK. To install it,
+[get composer](https://getcomposer.org) and run `composer update` in this
+folder.
 
 ```bash
 corepack yarn workspace @uppy-example/aws-php exec "composer update"
 ```
 
-Configure AWS S3 credentials using [environment variables](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#environment-credentials) or a [credentials file in `~/.aws/credentials`](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#credential-profiles).
+Configure AWS S3 credentials using
+[environment variables](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#environment-credentials)
+or a
+[credentials file in `~/.aws/credentials`](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#credential-profiles).
 Configure a bucket name and region in the `s3-sign.php` file.
 
 Then, again in the **repository root**, start this example by doing:
@@ -31,7 +36,9 @@ corepack yarn workspace @uppy-example/aws-php start
 
 The demo should now be available at http://localhost:8080.
 
-You can use a different S3-compatible service like GCS by configuring that service in `~/.aws/config` and `~/.aws/credentials`, and then providing appropriate environment variables:
+You can use a different S3-compatible service like GCS by configuring that
+service in `~/.aws/config` and `~/.aws/credentials`, and then providing
+appropriate environment variables:
 
 ```bash
 AWS_PROFILE="gcs" \

+ 6 - 5
examples/custom-provider/README.md

@@ -1,7 +1,7 @@
 # Uppy + Companion + Custom Provider Example
 
-This example uses @uppy/companion with a dummy custom provider.
-This serves as an illustration on how integrating custom providers would work
+This example uses @uppy/companion with a dummy custom provider. This serves as
+an illustration on how integrating custom providers would work
 
 ## Run it
 
@@ -9,14 +9,15 @@ This serves as an illustration on how integrating custom providers would work
 
 First, you want to set up your environment variable. You can copy the content of
 `.env.example` and save it in a file named `.env`. You can modify in there all
-the information needed for the app to work that should not be committed
-(Google keys, Unsplash keys, etc.).
+the information needed for the app to work that should not be committed (Google
+keys, Unsplash keys, etc.).
 
 ```sh
 [ -f .env ] || cp .env.example .env
 ```
 
-To run the example, from the root directory of this repo, run the following commands:
+To run the example, from the root directory of this repo, run the following
+commands:
 
 ```sh
 corepack yarn install

+ 12 - 9
examples/digitalocean-spaces/README.md

@@ -1,13 +1,16 @@
 # Uploading to DigitalOcean Spaces
 
-This example uses Uppy to upload files to a [DigitalOcean Space](https://digitaloceanspaces.com/).
-DigitalOcean Spaces has an identical API to S3, so we can use the
-[AwsS3](https://uppy.io/docs/aws-s3-multipart) plugin. We use @uppy/companion with a
-[custom `endpoint` configuration](./server.cjs#L39) that points to DigitalOcean.
+This example uses Uppy to upload files to a
+[DigitalOcean Space](https://digitaloceanspaces.com/). DigitalOcean Spaces has
+an identical API to S3, so we can use the
+[AwsS3](https://uppy.io/docs/aws-s3-multipart) plugin. We use @uppy/companion
+with a [custom `endpoint` configuration](./server.cjs#L39) that points to
+DigitalOcean.
 
 ## Running it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```bash
 corepack yarn install
@@ -17,10 +20,10 @@ corepack yarn build
 That will also install the dependencies for this example.
 
 First, set up the `COMPANION_AWS_KEY`, `COMPANION_AWS_SECRET`,
-`COMPANION_AWS_REGION` (use a DigitalOcean region name for `COMPANION_AWS_REGION`,
-e.g. `nyc3`), and `COMPANION_AWS_BUCKET` environment variables for
-`@uppy/companion` in a `.env` file. You may find useful to first copy the
-`.env.example` file:
+`COMPANION_AWS_REGION` (use a DigitalOcean region name for
+`COMPANION_AWS_REGION`, e.g. `nyc3`), and `COMPANION_AWS_BUCKET` environment
+variables for `@uppy/companion` in a `.env` file. You may find useful to first
+copy the `.env.example` file:
 
 ```sh
 [ -f .env ] || cp .env.example .env

+ 5 - 3
examples/multiple-instances/README.md

@@ -1,11 +1,13 @@
 # Multiple Instances
 
-This example uses Uppy with the `@uppy/golden-retriever` plugin.
-It has two instances on the same page, side-by-side, but with different `id`s so their stored files don't interfere with each other.
+This example uses Uppy with the `@uppy/golden-retriever` plugin. It has two
+instances on the same page, side-by-side, but with different `id`s so their
+stored files don't interfere with each other.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```bash
 corepack yarn install

+ 4 - 2
examples/node-xhr/README.md

@@ -1,10 +1,12 @@
 # Uppy + Node Example
 
-This example uses Node server and `@uppy/xhr-upload` to upload files to the local file system.
+This example uses Node server and `@uppy/xhr-upload` to upload files to the
+local file system.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 4 - 2
examples/php-xhr/README.md

@@ -1,10 +1,12 @@
 # Uppy + PHP Example
 
-This example uses PHP server and `@uppy/xhr-upload` to upload files to the local file system.
+This example uses PHP server and `@uppy/xhr-upload` to upload files to the local
+file system.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 6 - 3
examples/python-xhr/README.md

@@ -1,10 +1,12 @@
 # Uppy + Python Example
 
-This example uses a Python Flask server and `@uppy/xhr-upload` to upload files to the local file system.
+This example uses a Python Flask server and `@uppy/xhr-upload` to upload files
+to the local file system.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install
@@ -13,7 +15,8 @@ corepack yarn build
 
 That will also install the npm dependencies for this example.
 
-Additionally, this example uses python dependencies. Move into this directory, and install them using pip:
+Additionally, this example uses python dependencies. Move into this directory,
+and install them using pip:
 
 ```sh
 corepack yarn workspace @uppy-example/python-xhr installPythonDeps

+ 1 - 1
examples/react-example/README.md

@@ -11,7 +11,7 @@ corepack yarn build
 corepack yarn workspace @uppy-example/react dev
 ```
 
-If you'd like to use a different package manager than Yarn  (e.g. npm) to work
+If you'd like to use a different package manager than Yarn (e.g. npm) to work
 with this example, you can extract it from the workspace like this:
 
 ```sh

+ 7 - 3
examples/react-native-expo/readme.md

@@ -2,11 +2,14 @@
 
 ⚠️ In Beta
 
-`@uppy/react-native` is a basic Uppy component for React Native with Expo. It is in Beta, and is not full-featured. You can select local images or videos, take a picture with a camera or add any file from a remote url with Uppy Companion.
+`@uppy/react-native` is a basic Uppy component for React Native with Expo. It is
+in Beta, and is not full-featured. You can select local images or videos, take a
+picture with a camera or add any file from a remote url with Uppy Companion.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```bash
 yarn install
@@ -22,4 +25,5 @@ cd examples/react-native-expo
 yarn start
 ```
 
-Then you'll see a menu within your terminal where you can chose where to open the app (Android, iOS, device etc.)
+Then you'll see a menu within your terminal where you can chose where to open
+the app (Android, iOS, device etc.)

+ 9 - 5
examples/redux/README.md

@@ -1,14 +1,18 @@
 # Redux
 
-This example uses Uppy with a Redux store.
-The same Redux store is also used for other parts of the application, namely the counter example.
-Each action is logged to the console using [redux-logger](https://github.com/theaqua/redux-logger).
+This example uses Uppy with a Redux store. The same Redux store is also used for
+other parts of the application, namely the counter example. Each action is
+logged to the console using
+[redux-logger](https://github.com/theaqua/redux-logger).
 
-This example supports the [Redux Devtools extension](https://github.com/zalmoxisus/redux-devtools-extension), including time travel.
+This example supports the
+[Redux Devtools extension](https://github.com/zalmoxisus/redux-devtools-extension),
+including time travel.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 2 - 1
examples/svelte-example/README.md

@@ -2,7 +2,8 @@
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 3 - 2
examples/transloadit-markdown-bin/README.md

@@ -4,7 +4,8 @@ This example uses Uppy to handle images in a markdown editor.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install
@@ -17,4 +18,4 @@ Then, again in the **repository root**, start this example by doing:
 
 ```sh
 corepack yarn workspace @uppy-example/transloadit-markdown-bin start
-```
+```

+ 2 - 1
examples/transloadit/README.md

@@ -5,7 +5,8 @@ This example shows how to make advantage of Uppy API to upload files to
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 4 - 2
examples/uppy-with-companion/README.md

@@ -1,10 +1,12 @@
 # @uppy/companion example
 
-This is a simple, lean example that combines the usage of @uppy/companion and uppy client.
+This is a simple, lean example that combines the usage of @uppy/companion and
+uppy client.
 
 ## Test it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```bash
 corepack yarn install

+ 2 - 1
examples/vue3/README.md

@@ -1,6 +1,7 @@
 # Vue 3 example
 
-To run the example, from the root directory of this repo, run the following commands:
+To run the example, from the root directory of this repo, run the following
+commands:
 
 ```sh
 cp .env.example .env

+ 10 - 3
examples/xhr-bundle/README.md

@@ -1,12 +1,19 @@
 # XHR Bundle Upload
 
-This example uses Uppy with XHRUpload plugin in `bundle` mode. Bundle mode uploads all files to the endpoint in a single request, instead of firing off a new request for each file. This makes uploading a bit slower, but it may be easier to handle on the server side, depending on your setup.
+This example uses Uppy with XHRUpload plugin in `bundle` mode. Bundle mode
+uploads all files to the endpoint in a single request, instead of firing off a
+new request for each file. This makes uploading a bit slower, but it may be
+easier to handle on the server side, depending on your setup.
 
-[`server.cjs`](./server.cjs) contains an example express.js server that receives a multipart form-data upload and responds with some information about the files that were received (name, size) as JSON. It uses [multer](https://npmjs.com/package/multer) to parse the upload stream.
+[`server.cjs`](./server.cjs) contains an example express.js server that receives
+a multipart form-data upload and responds with some information about the files
+that were received (name, size) as JSON. It uses
+[multer](https://npmjs.com/package/multer) to parse the upload stream.
 
 ## Run it
 
-To run this example, make sure you've correctly installed the **repository root**:
+To run this example, make sure you've correctly installed the **repository
+root**:
 
 ```sh
 corepack yarn install

+ 10 - 4
packages/@uppy/audio/README.md

@@ -4,9 +4,11 @@
 
 <a href="https://www.npmjs.com/package/@uppy/audio"><img src="https://img.shields.io/npm/v/@uppy/webcam.svg?style=flat-square"></a> <img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"> <img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"> <img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
 
-The Audio plugin for Uppy lets you record audio using a built-in or external microphone, or any other audio device, on desktop and mobile.
+The Audio plugin for Uppy lets you record audio using a built-in or external
+microphone, or any other audio device, on desktop and mobile.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -24,11 +26,15 @@ uppy.use(Audio)
 $ npm install @uppy/audio
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/webcam).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/webcam).
 
 ## License
 

+ 10 - 4
packages/@uppy/aws-s3/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The AwsS3 plugin can be used to upload files directly to an S3 bucket. Uploads can be signed using Companion or a custom signing function.
+The AwsS3 plugin can be used to upload files directly to an S3 bucket. Uploads
+can be signed using Companion or a custom signing function.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +33,15 @@ uppy.use(AwsS3, {
 $ npm install @uppy/aws-s3
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/aws-s3).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/aws-s3).
 
 ## License
 

+ 12 - 4
packages/@uppy/box/README.md

@@ -9,9 +9,13 @@
 
 The Box plugin for Uppy lets users import files from their Box account.
 
-A Companion instance is required for the Box plugin to work. Companion handles authentication with Box, downloads files from Box and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance is required for the Box plugin to work. Companion handles
+authentication with Box, downloads files from Box and uploads them to the
+destination. This saves the user bandwidth, especially helpful if they are on a
+mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +35,15 @@ uppy.use(Box, {
 $ npm install @uppy/box
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/box).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/box).
 
 ## License
 

+ 9 - 4
packages/@uppy/companion-client/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-Client library for communication with Companion. Intended for use in Uppy plugins.
+Client library for communication with Companion. Intended for use in Uppy
+plugins.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -19,7 +21,9 @@ import { Provider, RequestClient, Socket } from '@uppy/companion-client'
 
 const uppy = new Uppy()
 
-const client = new RequestClient(uppy, { companionUrl: 'https://uppy.mywebsite.com/' })
+const client = new RequestClient(uppy, {
+  companionUrl: 'https://uppy.mywebsite.com/',
+})
 client.get('/drive/list').then(() => {})
 
 const provider = new Provider(uppy, {
@@ -34,7 +38,8 @@ socket.on('progress', () => {})
 
 ## Installation
 
-> Unless you are writing a custom provider plugin, you do not need to install this.
+> Unless you are writing a custom provider plugin, you do not need to install
+> this.
 
 ```bash
 $ npm install @uppy/companion-client

+ 75 - 32
packages/@uppy/companion/ARCHITECTURE.md

@@ -1,13 +1,15 @@
-Companion is the server side component for Uppy. It’s built with Express.js.
-The purpose of Companion is to interface with third party APIs and handle remote file uploading from them.
+Companion is the server side component for Uppy. It’s built with Express.js. The
+purpose of Companion is to interface with third party APIs and handle remote
+file uploading from them.
 
 # How it works
 
 ## oAuth with Grant, Sessions
 
-Companion uses an oAuth middleware library called `Grant` to simplify oAuth authentication.
-Inside of `config/grant.js`, you configure the oAuth providers you wish to use, providing things like client key,
-client secret, scopes, and the callback URL you wish to use. For example:
+Companion uses an oAuth middleware library called `Grant` to simplify oAuth
+authentication. Inside of `config/grant.js`, you configure the oAuth providers
+you wish to use, providing things like client key, client secret, scopes, and
+the callback URL you wish to use. For example:
 
 ```js
 const config = {
@@ -23,13 +25,20 @@ const config = {
 }
 ```
 
-Once this `google` config is added to `config/grant.js`, Grant automatically creates a route `/connect/google` that
-redirects to Google’s oAuth page. So on the client side, you need to link the user to `https://your-server/connect/google`.
-
-After the user completes the oAuth flow, they should always be redirected to `https://your-server/:provider/redirect`. This endpoint will in turn redirect to `https://your-server/:provider/callback`.
-The `/:provider/callback` routes are handled by the `callback` controller at `server/controllers/callback.js`.
-This controller receives the oAuth token, generates a json web token with it, and sends the generated json web token to the client by adding it to the cookies. This way companion doesn’t have to save users’ oAuth tokens (which is good from the security perspective).
-This json web token would be sent to companion in later requests and the oAuth token can be read from it.
+Once this `google` config is added to `config/grant.js`, Grant automatically
+creates a route `/connect/google` that redirects to Google’s oAuth page. So on
+the client side, you need to link the user to
+`https://your-server/connect/google`.
+
+After the user completes the oAuth flow, they should always be redirected to
+`https://your-server/:provider/redirect`. This endpoint will in turn redirect to
+`https://your-server/:provider/callback`. The `/:provider/callback` routes are
+handled by the `callback` controller at `server/controllers/callback.js`. This
+controller receives the oAuth token, generates a json web token with it, and
+sends the generated json web token to the client by adding it to the cookies.
+This way companion doesn’t have to save users’ oAuth tokens (which is good from
+the security perspective). This json web token would be sent to companion in
+later requests and the oAuth token can be read from it.
 
 ## Routing And Controllers
 
@@ -42,37 +51,61 @@ router.post('/:provider/:action', dispatcher)
 router.post('/:provider/:action/:id', dispatcher)
 ```
 
-Each route is handled by the `dispatcher` controller in `server/controllers/dispatcher.js`, which calls the correct controller based on `:action`.
+Each route is handled by the `dispatcher` controller in
+`server/controllers/dispatcher.js`, which calls the correct controller based on
+`:action`.
 
 Here’s the list of provided controllers:
 
-| controller | description |
-| ---------- | ----------- |
-| `authorized` | checks if the current user is authorized |
-| `callback` | handles redirect from oAuth. Stores oAuth token in user session and redirects user |
-| `get` | downloads files from third party APIs, writes them to disk, and uploads them to the target server |
-| `list` | fetches a list of files, usually from a specified directory |
-| `logout` | removes all token info from the user session |
+| controller   | description                                                                                       |
+| ------------ | ------------------------------------------------------------------------------------------------- |
+| `authorized` | checks if the current user is authorized                                                          |
+| `callback`   | handles redirect from oAuth. Stores oAuth token in user session and redirects user                |
+| `get`        | downloads files from third party APIs, writes them to disk, and uploads them to the target server |
+| `list`       | fetches a list of files, usually from a specified directory                                       |
+| `logout`     | removes all token info from the user session                                                      |
 
-These controllers are generalized to work for any provider. The provider specific implementation code for each provider can be found under `server/providers`.
+These controllers are generalized to work for any provider. The provider
+specific implementation code for each provider can be found under
+`server/providers`.
 
 ## Adding new providers
 
-To add a new provider to Companion, you need to do two things: add the provider config to `config/grant.js`, and then create a new file in `server/providers` that describes how to interface with the provider’s API.
+To add a new provider to Companion, you need to do two things: add the provider
+config to `config/grant.js`, and then create a new file in `server/providers`
+that describes how to interface with the provider’s API.
 
-We are using a library called [got](https://github.com/sindresorhus/got) to make it easier to interface with third party APIs.
+We are using a library called [got](https://github.com/sindresorhus/got) to make
+it easier to interface with third party APIs.
 
-Since each API works differently, we need to describe how to `download` and `list` files from the provider in a file within `server/providers`. The name of the file should be the same as what endpoint it will use. For example, `server/providers/foobar.js` if the client requests a list of files from `https://our-server/foobar/list`.
+Since each API works differently, we need to describe how to `download` and
+`list` files from the provider in a file within `server/providers`. The name of
+the file should be the same as what endpoint it will use. For example,
+`server/providers/foobar.js` if the client requests a list of files from
+`https://our-server/foobar/list`.
 
-**Note:** As of right now, you only need to implement `YourProvider.prototype.list` and `YourProvider.prototype.download` for each provider, I believe. `stats` seems to be used by Dropbox to get a list of files, so that’s required there, but `upload` is optional unless you all decide to allow uploading to third parties. I got that code from an example.
+**Note:** As of right now, you only need to implement
+`YourProvider.prototype.list` and `YourProvider.prototype.download` for each
+provider, I believe. `stats` seems to be used by Dropbox to get a list of files,
+so that’s required there, but `upload` is optional unless you all decide to
+allow uploading to third parties. I got that code from an example.
 
 ## WebSockets
 
-Companion uses WebSockets to transfer `progress` events to the client during file transfers. It’s only set up to transfer progress during Tus uploads to the target server.
+Companion uses WebSockets to transfer `progress` events to the client during
+file transfers. It’s only set up to transfer progress during Tus uploads to the
+target server.
 
-When a request is made to `/:provider/get` to start a transfer, a token is generated and sent back to the client in response. The client then connects to `wss://your-server/whatever-their-token-is`. Any events that are emitted using the token as the name (as in `emitter.emit('whatever-their-token-is', progressData)`) are sent back to the client.
+When a request is made to `/:provider/get` to start a transfer, a token is
+generated and sent back to the client in response. The client then connects to
+`wss://your-server/whatever-their-token-is`. Any events that are emitted using
+the token as the name (as in
+`emitter.emit('whatever-their-token-is', progressData)`) are sent back to the
+client.
 
-WebSockets aren’t particularly secure, but we feel this is safe because the token is only usable during the corresponding file transfer, and no sensitive information is being sent, only a file id and the progress.
+WebSockets aren’t particularly secure, but we feel this is safe because the
+token is only usable during the corresponding file transfer, and no sensitive
+information is being sent, only a file id and the progress.
 
 # Design Goals
 
@@ -80,12 +113,22 @@ These are the goals I had in mind while designing and building Companion.
 
 ## Standalone Server / Pluggable Module
 
-Companion works as a standalone server. It should also work as a module that can be incorporated into an existing server, so people don’t have to manage another server to use Uppy.
+Companion works as a standalone server. It should also work as a module that can
+be incorporated into an existing server, so people don’t have to manage another
+server to use Uppy.
 
-One issue here is that `Grant` has different versions for Koa, Express, and Hapi. We’re using `grant-express` right now, and also use all express modules. This becomes a problem if someone is using Koa, or Hapi, or something else. I don’t think we can make Companion completely framework agnostic, so best case scenario would be to follow Grant and make versions for Koa, Hapi, and Express.
+One issue here is that `Grant` has different versions for Koa, Express, and
+Hapi. We’re using `grant-express` right now, and also use all express modules.
+This becomes a problem if someone is using Koa, or Hapi, or something else. I
+don’t think we can make Companion completely framework agnostic, so best case
+scenario would be to follow Grant and make versions for Koa, Hapi, and Express.
 
-All this may be more trouble than it’s worth if no one needs it, so I’d get some community feedback beforehand.
+All this may be more trouble than it’s worth if no one needs it, so I’d get some
+community feedback beforehand.
 
 ## Allow users to add new providers
 
-Suppose a developer wants to use Uppy with a third party API provider that we don’t support. There needs to be some way for them to be able to add their own custom providers, hopefully without having to edit `companion`’s source (adding files to `server/providers`).
+Suppose a developer wants to use Uppy with a third party API provider that we
+don’t support. There needs to be some way for them to be able to add their own
+custom providers, hopefully without having to edit `companion`’s source (adding
+files to `server/providers`).

+ 47 - 45
packages/@uppy/companion/KUBERNETES.md

@@ -1,12 +1,14 @@
 ### Run companion on kubernetes
 
-You can use our docker container to run companion on kubernetes with the following configuration.
+You can use our docker container to run companion on kubernetes with the
+following configuration.
 
 ```bash
 kubectl create ns uppy
 ```
 
-We will need a Redis container that we can get through [helm](https://github.com/kubernetes/helm):
+We will need a Redis container that we can get through
+[helm](https://github.com/kubernetes/helm):
 
 ```bash
  helm install --name redis \
@@ -20,30 +22,30 @@ We will need a Redis container that we can get through [helm](https://github.com
 ```yaml
 apiVersion: v1
 data:
-  COMPANION_CLIENT_ORIGINS: "localhost:3452,uppy.io"
-  COMPANION_DATADIR: "PATH/TO/DOWNLOAD/DIRECTORY"
-  COMPANION_DOMAIN: "YOUR SERVER DOMAIN"
-  COMPANION_DOMAINS: "sub1.domain.com,sub2.domain.com,sub3.domain.com"
-  COMPANION_PROTOCOL: "YOUR SERVER PROTOCOL"
+  COMPANION_CLIENT_ORIGINS: 'localhost:3452,uppy.io'
+  COMPANION_DATADIR: 'PATH/TO/DOWNLOAD/DIRECTORY'
+  COMPANION_DOMAIN: 'YOUR SERVER DOMAIN'
+  COMPANION_DOMAINS: 'sub1.domain.com,sub2.domain.com,sub3.domain.com'
+  COMPANION_PROTOCOL: 'YOUR SERVER PROTOCOL'
   COMPANION_STREAMING_UPLOAD: true
   COMPANION_REDIS_URL: redis://:superSecretPassword@uppy-redis.uppy.svc.cluster.local:6379
-  COMPANION_SECRET: "shh!Issa Secret!"
-  COMPANION_PREAUTH_SECRET: "another secret"
-  COMPANION_DROPBOX_KEY: "YOUR DROPBOX KEY"
-  COMPANION_DROPBOX_SECRET: "YOUR DROPBOX SECRET"
-  COMPANION_BOX_KEY: "YOUR BOX KEY"
-  COMPANION_BOX_SECRET: "YOUR BOX SECRET"
-  COMPANION_GOOGLE_KEY: "YOUR GOOGLE KEY"
-  COMPANION_GOOGLE_SECRET: "YOUR GOOGLE SECRET"
-  COMPANION_INSTAGRAM_KEY: "YOUR INSTAGRAM KEY"
-  COMPANION_INSTAGRAM_SECRET: "YOUR INSTAGRAM SECRET"
-  COMPANION_AWS_KEY: "YOUR AWS KEY"
-  COMPANION_AWS_SECRET: "YOUR AWS SECRET"
-  COMPANION_AWS_BUCKET: "YOUR AWS S3 BUCKET"
-  COMPANION_AWS_REGION: "AWS REGION"
-  COMPANION_AWS_PREFIX: "AWS PREFIX"
-  COMPANION_OAUTH_DOMAIN: "sub.domain.com"
-  COMPANION_UPLOAD_URLS: "http://tusd.tusdemo.net/files/,https://tusd.tusdemo.net/files/"
+  COMPANION_SECRET: 'shh!Issa Secret!'
+  COMPANION_PREAUTH_SECRET: 'another secret'
+  COMPANION_DROPBOX_KEY: 'YOUR DROPBOX KEY'
+  COMPANION_DROPBOX_SECRET: 'YOUR DROPBOX SECRET'
+  COMPANION_BOX_KEY: 'YOUR BOX KEY'
+  COMPANION_BOX_SECRET: 'YOUR BOX SECRET'
+  COMPANION_GOOGLE_KEY: 'YOUR GOOGLE KEY'
+  COMPANION_GOOGLE_SECRET: 'YOUR GOOGLE SECRET'
+  COMPANION_INSTAGRAM_KEY: 'YOUR INSTAGRAM KEY'
+  COMPANION_INSTAGRAM_SECRET: 'YOUR INSTAGRAM SECRET'
+  COMPANION_AWS_KEY: 'YOUR AWS KEY'
+  COMPANION_AWS_SECRET: 'YOUR AWS SECRET'
+  COMPANION_AWS_BUCKET: 'YOUR AWS S3 BUCKET'
+  COMPANION_AWS_REGION: 'AWS REGION'
+  COMPANION_AWS_PREFIX: 'AWS PREFIX'
+  COMPANION_OAUTH_DOMAIN: 'sub.domain.com'
+  COMPANION_UPLOAD_URLS: 'http://tusd.tusdemo.net/files/,https://tusd.tusdemo.net/files/'
 kind: Secret
 metadata:
   name: companion-env
@@ -73,25 +75,25 @@ spec:
         app: companion
     spec:
       containers:
-      - image: docker.io/transloadit/companion:latest
-        imagePullPolicy: ifNotPresent
-        name: companion
-        resources:
-          limits:
-            memory: 150Mi
-          requests:
-            memory: 100Mi
-        envFrom:
-        - secretRef:
-            name: companion-env
-        ports:
-        - containerPort: 3020
-        volumeMounts:
-        - name: companion-data
-          mountPath: /mnt/companion-data
+        - image: docker.io/transloadit/companion:latest
+          imagePullPolicy: ifNotPresent
+          name: companion
+          resources:
+            limits:
+              memory: 150Mi
+            requests:
+              memory: 100Mi
+          envFrom:
+            - secretRef:
+                name: companion-env
+          ports:
+            - containerPort: 3020
+          volumeMounts:
+            - name: companion-data
+              mountPath: /mnt/companion-data
       volumes:
-      - name: companion-data
-        emptyDir: {}
+        - name: companion-data
+          emptyDir: {}
 ```
 
 ```bash
@@ -108,9 +110,9 @@ metadata:
   namespace: uppy
 spec:
   ports:
-  - port: 80
-    targetPort: 3020
-    protocol: TCP
+    - port: 80
+      targetPort: 3020
+      protocol: TCP
   selector:
     app: companion
 ```

+ 23 - 10
packages/@uppy/companion/README.md

@@ -4,10 +4,14 @@
 
 [![Build Status](https://travis-ci.org/transloadit/uppy.svg?branch=main)](https://travis-ci.org/transloadit/uppy)
 
-Companion is a server integration for [Uppy](https://github.com/transloadit/uppy) file uploader.
+Companion is a server integration for
+[Uppy](https://github.com/transloadit/uppy) file uploader.
 
-It handles the server-to-server communication between your server and file storage providers such as Google Drive, Dropbox,
-Instagram, etc. **Companion is not a target to upload files to**. For this, use a <https://tus.io> server (if you want resumable) or your existing Apache/Nginx server (if you don’t). [See here for full documentation](https://uppy.io/docs/companion/)
+It handles the server-to-server communication between your server and file
+storage providers such as Google Drive, Dropbox, Instagram, etc. **Companion is
+not a target to upload files to**. For this, use a <https://tus.io> server (if
+you want resumable) or your existing Apache/Nginx server (if you don’t).
+[See here for full documentation](https://uppy.io/docs/companion/)
 
 ## Install
 
@@ -15,11 +19,16 @@ Instagram, etc. **Companion is not a target to upload files to**. For this, use
 npm install @uppy/companion
 ```
 
-If you don’t have a Node.js project with a `package.json` you might want to install/run Companion globally like so: `[sudo] npm install -g @uppy/companion@1.x` (best check the actual latest version, and use that, so (re)installs are reproducible, and upgrades intentional).
+If you don’t have a Node.js project with a `package.json` you might want to
+install/run Companion globally like so:
+`[sudo] npm install -g @uppy/companion@1.x` (best check the actual latest
+version, and use that, so (re)installs are reproducible, and upgrades
+intentional).
 
 ## Usage
 
-companion may either be used as pluggable express app, which you plug to your existing server, or it may also be run as a standalone server:
+companion may either be used as pluggable express app, which you plug to your
+existing server, or it may also be run as a standalone server:
 
 ### Plug to an existing server
 
@@ -52,7 +61,8 @@ const { app: companionApp } = companion.app(options)
 app.use(companionApp)
 ```
 
-To enable companion socket for realtime feed to the client while upload is going on, you call the `socket` method like so.
+To enable companion socket for realtime feed to the client while upload is going
+on, you call the `socket` method like so.
 
 ```javascript
 // ...
@@ -63,14 +73,16 @@ companion.socket(server)
 
 ### Run as standalone server
 
-Please make sure that the required env variables are set before runnning/using companion as a standalone server. [See](https://uppy.io/docs/companion/#Configure-Standalone).
+Please make sure that the required env variables are set before runnning/using
+companion as a standalone server.
+[See](https://uppy.io/docs/companion/#Configure-Standalone).
 
 ```bash
 $ companion
 ```
 
-If you cloned the repo from GitHub and want to run it as a standalone server, you may also run the following command from within its
-directory
+If you cloned the repo from GitHub and want to run it as a standalone server,
+you may also run the following command from within its directory
 
 ```bash
 npm start
@@ -107,6 +119,7 @@ heroku create
 git push heroku master
 ```
 
-Make sure you set the required [environment variables](https://uppy.io/docs/companion/#Configure-Standalone).
+Make sure you set the required
+[environment variables](https://uppy.io/docs/companion/#Configure-Standalone).
 
 See [full documentation](https://uppy.io/docs/companion/)

+ 14 - 5
packages/@uppy/compressor/README.md

@@ -4,9 +4,12 @@
 
 <a href="https://www.npmjs.com/package/@uppy/compressor"><img src="https://img.shields.io/npm/v/@uppy/compressor.svg?style=flat-square"></a> <img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"> <img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"> <img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
 
-The Compressor plugin for Uppy optimizes images (JPEG, PNG, WEBP), saving on average up to 60% in size (roughly 18 MB for 10 images). It uses [Compressor.js](https://github.com/fengyuanchen/compressorjs).
+The Compressor plugin for Uppy optimizes images (JPEG, PNG, WEBP), saving on
+average up to 60% in size (roughly 18 MB for 10 images). It uses
+[Compressor.js](https://github.com/fengyuanchen/compressorjs).
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -24,13 +27,19 @@ uppy.use(Compressor)
 npm install @uppy/compressor
 ```
 
-We recommend installing from yarn or npm, and then using a module bundler such as [Parcel](https://parceljs.org/), [Vite](https://vitejs.dev/) or [Webpack](https://webpack.js.org/).
+We recommend installing from yarn or npm, and then using a module bundler such
+as [Parcel](https://parceljs.org/), [Vite](https://vitejs.dev/) or
+[Webpack](https://webpack.js.org/).
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/compressor).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/compressor).
 
 ## License
 

+ 15 - 6
packages/@uppy/core/README.md

@@ -7,15 +7,20 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly with any application. It’s fast, provides a comprehensible API and lets you worry about more important problems than building a file uploader.
+Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly
+with any application. It’s fast, provides a comprehensible API and lets you
+worry about more important problems than building a file uploader.
 
-* **Fetch** files from local disk, remote urls, Google Drive, Dropbox, Instagram, or snap and record selfies with a camera;
+* **Fetch** files from local disk, remote urls, Google Drive, Dropbox,
+  Instagram, or snap and record selfies with a camera;
 * **Preview** and edit metadata with a nice interface;
 * **Upload** to the final destination, optionally process/encode
 
-**[Read the docs](https://uppy.io/docs)** | **[Try Uppy](https://uppy.io/examples/dashboard/)**
+**[Read the docs](https://uppy.io/docs)** |
+**[Try Uppy](https://uppy.io/examples/dashboard/)**
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -32,11 +37,15 @@ uppy.use(SomePlugin)
 $ npm install @uppy/core
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/uppy).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/uppy).
 
 ## License
 

+ 14 - 6
packages/@uppy/dashboard/README.md

@@ -10,15 +10,19 @@
 Dashboard is a universal UI plugin for Uppy:
 
 * Drag and Drop, paste, select from local disk / my device
-* UI for Webcam and remote sources: Google Drive, Dropbox, Instagram (all optional, added via plugins)
+* UI for Webcam and remote sources: Google Drive, Dropbox, Instagram (all
+  optional, added via plugins)
 * File previews and info
 * Metadata editor
 * Progress: total and for individual files
-* Ability to pause/resume or cancel (depending on uploader plugin) individual or all files
+* Ability to pause/resume or cancel (depending on uploader plugin) individual or
+  all files
 
-**[Read the docs](https://uppy.io/docs/dashboard/)** | **[Try it](https://uppy.io/examples/dashboard/)**
+**[Read the docs](https://uppy.io/docs/dashboard/)** |
+**[Try it](https://uppy.io/examples/dashboard/)**
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -39,11 +43,15 @@ uppy.use(Dashboard, {
 $ npm install @uppy/dashboard
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/dashboard).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/dashboard).
 
 ## License
 

+ 10 - 4
packages/@uppy/drag-drop/README.md

@@ -9,9 +9,11 @@
 
 Droppable zone UI for Uppy. Drag and drop files into it to upload.
 
-**[Read the docs](https://uppy.io/docs/dragdrop)** | **[Try it](https://uppy.io/examples/dragdrop/)**
+**[Read the docs](https://uppy.io/docs/dragdrop)** |
+**[Try it](https://uppy.io/examples/dragdrop/)**
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +33,15 @@ uppy.use(DragDrop, {
 $ npm install @uppy/drag-drop
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/dragdrop).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/dragdrop).
 
 ## License
 

+ 12 - 4
packages/@uppy/dropbox/README.md

@@ -9,9 +9,13 @@
 
 The Dropbox plugin for Uppy lets users import files from their Dropbox account.
 
-A Companion instance is required for the Dropbox plugin to work. Companion handles authentication with Dropbox, downloads files from Dropbox and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance is required for the Dropbox plugin to work. Companion
+handles authentication with Dropbox, downloads files from Dropbox and uploads
+them to the destination. This saves the user bandwidth, especially helpful if
+they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +35,15 @@ uppy.use(Dropbox, {
 $ npm install @uppy/dropbox
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/dropbox).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/dropbox).
 
 ## License
 

+ 14 - 5
packages/@uppy/facebook/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Facebook plugin for Uppy lets users import files from their Facebook account.
+The Facebook plugin for Uppy lets users import files from their Facebook
+account.
 
-A Companion instance is required for the Facebook plugin to work. Companion handles authentication with Facebook, downloads files from Facebook and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance is required for the Facebook plugin to work. Companion
+handles authentication with Facebook, downloads files from Facebook and uploads
+them to the destination. This saves the user bandwidth, especially helpful if
+they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(Facebook, {
 $ npm install @uppy/facebook
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/facebook).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/facebook).
 
 ## License
 

+ 12 - 5
packages/@uppy/file-input/README.md

@@ -7,11 +7,14 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-FileInput is the most barebones UI for selecting files—it shows a single button that, when clicked, opens up the browser’s file selector.
+FileInput is the most barebones UI for selecting files—it shows a single button
+that, when clicked, opens up the browser’s file selector.
 
-**[Read the docs](https://uppy.io/docs/fileinput)** | **[Try it](https://uppy.io/examples/xhrupload/)**
+**[Read the docs](https://uppy.io/docs/fileinput)** |
+**[Try it](https://uppy.io/examples/xhrupload/)**
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +34,15 @@ uppy.use(FileInput, {
 $ npm install @uppy/file-input
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/fileinput).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/fileinput).
 
 ## License
 

+ 12 - 4
packages/@uppy/form/README.md

@@ -7,9 +7,13 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Form plugin collects metadata from any specified `<form>` element, right before Uppy begins uploading/processing files. It optionally appends results back to the form. The appended result is a stringified version of a result returned from `uppy.upload()`.
+The Form plugin collects metadata from any specified `<form>` element, right
+before Uppy begins uploading/processing files. It optionally appends results
+back to the form. The appended result is a stringified version of a result
+returned from `uppy.upload()`.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -33,11 +37,15 @@ uppy.use(Form, {
 $ npm install @uppy/form
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/form).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/form).
 
 ## License
 

+ 13 - 4
packages/@uppy/golden-retriever/README.md

@@ -7,9 +7,14 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The GoldenRetriever plugin saves selected files in your browser cache (Local Storage for metadata, then Service Worker for all blobs + IndexedDB for small blobs), so that if the browser crashes, Uppy can restore everything and continue uploading like nothing happened. Read more about it [on the blog](https://uppy.io/blog/2017/07/golden-retriever/).
+The GoldenRetriever plugin saves selected files in your browser cache (Local
+Storage for metadata, then Service Worker for all blobs + IndexedDB for small
+blobs), so that if the browser crashes, Uppy can restore everything and continue
+uploading like nothing happened. Read more about it
+[on the blog](https://uppy.io/blog/2017/07/golden-retriever/).
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -29,11 +34,15 @@ uppy.use(GoldenRetriever, {
 $ npm install @uppy/golden-retriever
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/golden-retriever).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/golden-retriever).
 
 ## License
 

+ 14 - 5
packages/@uppy/google-drive/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Google Drive plugin for Uppy lets users import files from their Google Drive account.
+The Google Drive plugin for Uppy lets users import files from their Google Drive
+account.
 
-A Companion instance is required for the GoogleDrive plugin to work. Companion handles authentication with Google, downloads files from the Drive and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance is required for the GoogleDrive plugin to work. Companion
+handles authentication with Google, downloads files from the Drive and uploads
+them to the destination. This saves the user bandwidth, especially helpful if
+they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(GoogleDrive, {
 $ npm install @uppy/google-drive
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/google-drive).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/google-drive).
 
 ## License
 

+ 12 - 5
packages/@uppy/image-editor/README.md

@@ -7,13 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-Image Editor is an image cropping and editing plugin for Uppy. Designed to be used with the Dashboard UI (can in theory work without it).
+Image Editor is an image cropping and editing plugin for Uppy. Designed to be
+used with the Dashboard UI (can in theory work without it).
 
 ⚠ In beta.
 
-**[Read the docs](https://uppy.io/docs/image-editor)** | **[Try it](https://uppy.io/examples/dashboard/)**
+**[Read the docs](https://uppy.io/docs/image-editor)** |
+**[Try it](https://uppy.io/examples/dashboard/)**
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -36,11 +39,15 @@ uppy.use(ImageEditor, {
 $ npm install @uppy/image-editor
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/image-editor).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/image-editor).
 
 ## License
 

+ 10 - 4
packages/@uppy/informer/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Informer is a pop-up bar for showing notifications. When other plugins have some exciting news (or error) to share, they can show a notification here.
+The Informer is a pop-up bar for showing notifications. When other plugins have
+some exciting news (or error) to share, they can show a notification here.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -29,11 +31,15 @@ uppy.use(Informer, {
 $ npm install @uppy/informer
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/informer).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/informer).
 
 ## License
 

+ 13 - 6
packages/@uppy/instagram/README.md

@@ -9,9 +9,13 @@
 
 The Instagram plugin lets users import photos from their Instagram account.
 
-A [Companion](https://uppy.io/docs/companion) instance is required for the Instagram plugin to work. Companion handles authentication with Instagram, downloads the pictures and videos, and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A [Companion](https://uppy.io/docs/companion) instance is required for the
+Instagram plugin to work. Companion handles authentication with Instagram,
+downloads the pictures and videos, and uploads them to the destination. This
+saves the user bandwidth, especially helpful if they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -20,8 +24,7 @@ import Uppy from '@uppy/core'
 import Instagram from '@uppy/instagram'
 
 const uppy = new Uppy()
-uppy.use(Instagram, {
-})
+uppy.use(Instagram, {})
 ```
 
 ## Installation
@@ -30,11 +33,15 @@ uppy.use(Instagram, {
 $ npm install @uppy/instagram
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/instagram).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/instagram).
 
 ## License
 

+ 4 - 1
packages/@uppy/locales/README.md

@@ -7,7 +7,10 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-This package includes all the locale packs that you can use to make Uppy speak your language! If your language is missing, please consider [contributing](https://github.com/transloadit/uppy/tree/main/packages/%40uppy/locales/src), starting with `en_US`, which is always up-to-date automatically.
+This package includes all the locale packs that you can use to make Uppy speak
+your language! If your language is missing, please consider
+[contributing](https://github.com/transloadit/uppy/tree/main/packages/%40uppy/locales/src),
+starting with `en_US`, which is always up-to-date automatically.
 
 ## Installation
 

+ 14 - 5
packages/@uppy/onedrive/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The OneDrive plugin for Uppy lets users import files from their OneDrive account.
+The OneDrive plugin for Uppy lets users import files from their OneDrive
+account.
 
-A Companion instance is required for the OneDrive plugin to work. Companion handles authentication with Microsoft OneDrive, downloads files from OneDrive and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance is required for the OneDrive plugin to work. Companion
+handles authentication with Microsoft OneDrive, downloads files from OneDrive
+and uploads them to the destination. This saves the user bandwidth, especially
+helpful if they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(OneDrive, {
 $ npm install @uppy/onedrive
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/facebook).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/facebook).
 
 ## License
 

+ 11 - 4
packages/@uppy/progress-bar/README.md

@@ -7,9 +7,12 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-ProgressBar is a minimalist plugin that shows the current upload progress in a thin bar element. Like the ones used by YouTube and GitHub when navigating between pages.
+ProgressBar is a minimalist plugin that shows the current upload progress in a
+thin bar element. Like the ones used by YouTube and GitHub when navigating
+between pages.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -29,11 +32,15 @@ uppy.use(ProgressBar, {
 $ npm install @uppy/progress-bar
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/progressbar).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/progressbar).
 
 ## License
 

+ 7 - 5
packages/@uppy/provider-views/README.md

@@ -9,7 +9,8 @@
 
 View library for Uppy remote provider plugins.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -18,19 +19,19 @@ import Plugin from '@uppy/core/lib/plugin'
 import { ProviderViews } from '@uppy/provider-views'
 
 class GoogleDrive extends UIPlugin {
-  install () {
+  install() {
     this.view = new ProviderViews(this)
     // snip
   }
 
-  onFirstRender () {
+  onFirstRender() {
     return Promise.all([
       this.provider.fetchPreAuthToken(),
       this.view.getFolder('root'),
     ])
   }
 
-  render (state) {
+  render(state) {
     return this.view.render(state)
   }
 }
@@ -38,7 +39,8 @@ class GoogleDrive extends UIPlugin {
 
 ## Installation
 
-> Unless you are creating a custom provider plugin, you do not need to install this.
+> Unless you are creating a custom provider plugin, you do not need to install
+> this.
 
 ```bash
 $ npm install @uppy/provider-views

+ 7 - 2
packages/@uppy/react-native/README.md

@@ -9,7 +9,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-Basic Uppy component for React Native with Expo. It’s in Beta, and is not full-featured. You can select local images or videos, take pictures with a camera or add any files from [remote urls](https://uppy.io/docs/url), with the help of our server-side component, [Uppy Companion](https://uppy.io/docs/companion).
+Basic Uppy component for React Native with Expo. It’s in Beta, and is not
+full-featured. You can select local images or videos, take pictures with a
+camera or add any files from [remote urls](https://uppy.io/docs/url), with the
+help of our server-side component,
+[Uppy Companion](https://uppy.io/docs/companion).
 
 ## Installation
 
@@ -19,7 +23,8 @@ $ npm install @uppy/react-native
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/react/native/).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/react/native/).
 
 ## License
 

+ 9 - 4
packages/@uppy/react/README.md

@@ -9,7 +9,8 @@
 
 React component wrappers around Uppy’s officially maintained UI plugins.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -25,7 +26,7 @@ const uppy = new Uppy()
 class Example extends React.Component {
   state = { open: false }
 
-  render () {
+  render() {
     return (
       <DashboardModal
         uppy={uppy}
@@ -44,11 +45,15 @@ class Example extends React.Component {
 $ npm install @uppy/react
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/react).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/react).
 
 ## License
 

+ 10 - 4
packages/@uppy/redux-dev-tools/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-ReduxDevTools plugin that syncs with redux-devtools browser or JS extensions, and allows for basic time travel:
+ReduxDevTools plugin that syncs with redux-devtools browser or JS extensions,
+and allows for basic time travel:
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -27,11 +29,15 @@ uppy.use(ReduxDevTools)
 $ npm install @uppy/redux-dev-tools
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/redux-dev-tools).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/redux-dev-tools).
 
 ## License
 

+ 6 - 2
packages/@uppy/remote-sources/README.md

@@ -24,11 +24,15 @@ npm install @uppy/remote-sources
 yarn add @uppy/remote-sources
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy.RemoteSources` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy.RemoteSources` will attach itself
+to the global `window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/remote-sources).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/remote-sources).
 
 ## License
 

+ 10 - 4
packages/@uppy/screen-capture/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The screen capture plugin for Uppy lets you take photos and record videos with a built-in camera on desktop and mobile devices.
+The screen capture plugin for Uppy lets you take photos and record videos with a
+built-in camera on desktop and mobile devices.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -27,11 +29,15 @@ uppy.use(ScreenCapture)
 $ npm install @uppy/screen-capture
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/screen-capture).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/screen-capture).
 
 ## License
 

+ 15 - 5
packages/@uppy/status-bar/README.md

@@ -7,10 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The status-bar shows upload progress and speed, ETAs, pre- and post-processing information, and allows users to control (pause/resume/cancel) the upload.
-Best used together with a basic file source plugin, such as [@uppy/file-input](https://uppy.io/docs/file-input) or [@uppy/drag-drop](https://uppy.io/docs/drag-drop), or a custom implementation. It’s also included in the [@uppy/dashboard](https://uppy.io/docs/dashboard) plugin.
+The status-bar shows upload progress and speed, ETAs, pre- and post-processing
+information, and allows users to control (pause/resume/cancel) the upload. Best
+used together with a basic file source plugin, such as
+[@uppy/file-input](https://uppy.io/docs/file-input) or
+[@uppy/drag-drop](https://uppy.io/docs/drag-drop), or a custom implementation.
+It’s also included in the [@uppy/dashboard](https://uppy.io/docs/dashboard)
+plugin.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -33,11 +39,15 @@ uppy.use(StatusBar, {
 $ npm install @uppy/status-bar
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/status-bar).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/status-bar).
 
 ## License
 

+ 10 - 4
packages/@uppy/store-default/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-A basic object-based store for Uppy. This one is used by default, you do not need to add it manually.
+A basic object-based store for Uppy. This one is used by default, you do not
+need to add it manually.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -28,11 +30,15 @@ const uppy = new Uppy({
 $ npm install @uppy/store-default
 ```
 
-Alternatively, you can also use this package in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this package in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/stores#DefaultStore).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/stores#DefaultStore).
 
 ## License
 

+ 17 - 9
packages/@uppy/store-redux/README.md

@@ -7,12 +7,13 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The `ReduxStore` stores Uppy state on a key in an existing Redux store.
-The `ReduxStore` dispatches `uppy/STATE_UPDATE` actions to update state.
-When the state in Redux changes, it notifies Uppy.
-This way, you get most of the benefits of Redux, including support for the Redux Devtools and time traveling!
+The `ReduxStore` stores Uppy state on a key in an existing Redux store. The
+`ReduxStore` dispatches `uppy/STATE_UPDATE` actions to update state. When the
+state in Redux changes, it notifies Uppy. This way, you get most of the benefits
+of Redux, including support for the Redux Devtools and time traveling!
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -21,8 +22,11 @@ import Uppy from '@uppy/core'
 import * as ReduxStore from '@uppy/store-redux'
 import * as Redux from 'redux'
 
-function createStore (reducers = {}) {
-  const reducer = Redux.combineReducers({ ...reducers, uppy: ReduxStore.reducer })
+function createStore(reducers = {}) {
+  const reducer = Redux.combineReducers({
+    ...reducers,
+    uppy: ReduxStore.reducer,
+  })
   return Redux.createStore(reducer)
 }
 
@@ -36,11 +40,15 @@ const uppy = new Uppy({ store })
 $ npm install @uppy/store-redux
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/stores#ReduxStore).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/stores#ReduxStore).
 
 ## License
 

+ 5 - 2
packages/@uppy/svelte/README.md

@@ -9,7 +9,8 @@
 
 Svelte component wrappers around Uppy’s officially maintained UI plugins.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Installation
 
@@ -25,7 +26,9 @@ yarn add @uppy/svelte
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/svelte). At the moment, there’s no documentation yet, so this link won’t work. Stay tuned for more info
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/svelte). At the moment, there’s no
+documentation yet, so this link won’t work. Stay tuned for more info
 
 ## License
 

+ 6 - 2
packages/@uppy/thumbnail-generator/README.md

@@ -9,7 +9,8 @@
 
 Uppy plugin that generates small previews of images to show on your upload UI.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -29,7 +30,10 @@ uppy.use(ThumbnailGenerator, {
 $ npm install @uppy/thumbnail-generator
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 <!-- Undocumented currently
 ## Documentation

+ 11 - 4
packages/@uppy/transloadit/README.md

@@ -7,11 +7,14 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Transloadit plugin can be used to upload files to Transloadit for all kinds of processing, such as transcoding video, resizing images, zipping/unzipping, [and more](https://transloadit.com/services/).
+The Transloadit plugin can be used to upload files to Transloadit for all kinds
+of processing, such as transcoding video, resizing images, zipping/unzipping,
+[and more](https://transloadit.com/services/).
 
 [Try it live →](https://uppy.io/examples/transloadit/)
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +34,15 @@ uppy.use(Transloadit, {
 $ npm install @uppy/transloadit
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/transloadit).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/transloadit).
 
 ## License
 

+ 10 - 4
packages/@uppy/tus/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Tus plugin brings [tus.io][] resumable file uploading to Uppy by wrapping the [tus-js-client][].
+The Tus plugin brings [tus.io][] resumable file uploading to Uppy by wrapping
+the [tus-js-client][].
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +33,15 @@ uppy.use(Tus, {
 $ npm install @uppy/tus
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/tus).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/tus).
 
 ## License
 

+ 14 - 5
packages/@uppy/unsplash/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Unsplash plugin lets users import files from Unsplash, the free stock photography resource.
+The Unsplash plugin lets users import files from Unsplash, the free stock
+photography resource.
 
-A Companion instance is required for the Unsplash plugin to work. Companion will download the files and upload them to their destination. This saves bandwidth for the user (especially on mobile connections) and helps avoid CORS restrictions.
+A Companion instance is required for the Unsplash plugin to work. Companion will
+download the files and upload them to their destination. This saves bandwidth
+for the user (especially on mobile connections) and helps avoid CORS
+restrictions.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(Unsplash, {
 $ npm install @uppy/unsplash --save
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/unsplash).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/unsplash).
 
 ## License
 

+ 14 - 5
packages/@uppy/url/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!
+The Url plugin lets users import files from the Internet. Paste any URL and
+it’ll be added!
 
-A Companion instance is required for the Url plugin to work. Companion will download the files and upload them to their destination. This saves bandwidth for the user (especially on mobile connections) and helps avoid CORS restrictions.
+A Companion instance is required for the Url plugin to work. Companion will
+download the files and upload them to their destination. This saves bandwidth
+for the user (especially on mobile connections) and helps avoid CORS
+restrictions.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(Url, {
 $ npm install @uppy/url
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/url).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/url).
 
 ## License
 

+ 6 - 3
packages/@uppy/utils/README.md

@@ -7,13 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-Shared utility functions for Uppy Core and the “official” plugins maintained by the Uppy team.
+Shared utility functions for Uppy Core and the “official” plugins maintained by
+the Uppy team.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Installation
 
-> Unless you are creating a custom plugin, you should not need to install this manually.
+> Unless you are creating a custom plugin, you should not need to install this
+> manually.
 
 ```bash
 $ npm install @uppy/utils

+ 5 - 3
packages/@uppy/utils/src/getDroppedFiles/README.md

@@ -6,6 +6,8 @@ Influenced by:
 
 ### Why do we not use `getFilesAndDirectories()` api?
 
-It’s a proposed spec that seems to be barely implemented anywhere.
-Supposed to work in Firefox and Edge, but it doesn’t work in Firefox, and both Firefox and Edge support `.webkitGetAsEntry()` api anyway.
-This page shows how this spec is supposed to function: <https://wicg.github.io/directory-upload/>, but it only works because of the polyfill.js that uses `.webkitGetAsEntry()` internally.
+It’s a proposed spec that seems to be barely implemented anywhere. Supposed to
+work in Firefox and Edge, but it doesn’t work in Firefox, and both Firefox and
+Edge support `.webkitGetAsEntry()` api anyway. This page shows how this spec is
+supposed to function: <https://wicg.github.io/directory-upload/>, but it only
+works because of the polyfill.js that uses `.webkitGetAsEntry()` internally.

+ 23 - 15
packages/@uppy/vue/README.md

@@ -9,18 +9,20 @@
 
 Vue component wrappers around Uppy’s officially maintained UI plugins.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
 ```vue
 <template>
-  <dashboard-modal 
-  :uppy="uppy" 
-  :open="open" 
-  :props="{
-    onRequestCloseModal: handleClose
-  }"/>
+  <dashboard-modal
+    :uppy="uppy"
+    :open="open"
+    :props="{
+      onRequestCloseModal: handleClose,
+    }"
+  />
 </template>
 
 <script>
@@ -29,19 +31,21 @@ import { DashboardModal } from '@uppy/vue'
 
 export default {
   components: {
-    DashboardModal
+    DashboardModal,
   },
   computed: {
-    uppy: () => new Uppy()
+    uppy: () => new Uppy(),
   },
-  data () {
+  data() {
     return {
-      open: false
+      open: false,
     }
   },
   methods: {
-    handleClose() { this.open = false }
-  }
+    handleClose() {
+      this.open = false
+    },
+  },
 }
 </script>
 ```
@@ -52,11 +56,15 @@ export default {
 $ npm install @uppy/vue
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/vue).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/vue).
 
 ## License
 

+ 10 - 4
packages/@uppy/webcam/README.md

@@ -7,9 +7,11 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Webcam plugin for Uppy lets you take photos and record videos with a built-in camera on desktop and mobile devices.
+The Webcam plugin for Uppy lets you take photos and record videos with a
+built-in camera on desktop and mobile devices.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +33,15 @@ uppy.use(Webcam, {
 $ npm install @uppy/webcam
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/webcam).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/webcam).
 
 ## License
 

+ 11 - 4
packages/@uppy/xhr-upload/README.md

@@ -7,9 +7,12 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The XHRUpload plugin handles classic XHR uploads with Uppy. If you have an exiting Apache/Nginx/Node or whatever backend, this is probably the Uppy uploader plugin you are looking for.
+The XHRUpload plugin handles classic XHR uploads with Uppy. If you have an
+exiting Apache/Nginx/Node or whatever backend, this is probably the Uppy
+uploader plugin you are looking for.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -29,11 +32,15 @@ uppy.use(XHRUpload, {
 $ npm install @uppy/xhr-upload
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/xhr-upload).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/xhr-upload).
 
 ## License
 

+ 3 - 6
packages/@uppy/xhr-upload/src/index.ts

@@ -240,12 +240,9 @@ export default class XHRUpload<
           }
 
           const body = this.opts.getResponseData(res.responseText, res)
-          const uploadURL = body[this.opts.responseUrlFieldName]
-          if (typeof uploadURL !== 'string') {
-            throw new Error(
-              `The received response did not include a valid URL for key ${this.opts.responseUrlFieldName}`,
-            )
-          }
+          const uploadURL = body?.[this.opts.responseUrlFieldName] as
+            | string
+            | undefined
 
           for (const file of files) {
             this.uppy.emit('upload-success', file, {

+ 14 - 5
packages/@uppy/zoom/README.md

@@ -7,11 +7,16 @@
 ![CI status for Companion tests](https://github.com/transloadit/uppy/workflows/Companion/badge.svg)
 ![CI status for browser tests](https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg)
 
-The Zoom plugin for Uppy lets users import recordings and related files from their Zoom account.
+The Zoom plugin for Uppy lets users import recordings and related files from
+their Zoom account.
 
-A Companion instance and zoom account with cloud recordings is required for the Zoom plugin to work. Companion handles authentication with Zoom, downloads files from Zoom and uploads them to the destination. This saves the user bandwidth, especially helpful if they are on a mobile connection.
+A Companion instance and zoom account with cloud recordings is required for the
+Zoom plugin to work. Companion handles authentication with Zoom, downloads files
+from Zoom and uploads them to the destination. This saves the user bandwidth,
+especially helpful if they are on a mobile connection.
 
-Uppy is being developed by the folks at [Transloadit](https://transloadit.com), a versatile file encoding service.
+Uppy is being developed by the folks at [Transloadit](https://transloadit.com),
+a versatile file encoding service.
 
 ## Example
 
@@ -31,11 +36,15 @@ uppy.use(Zoom, {
 $ npm install @uppy/zoom
 ```
 
-Alternatively, you can also use this plugin in a pre-built bundle from Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. See the [main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
+Alternatively, you can also use this plugin in a pre-built bundle from
+Transloadit’s CDN: Edgly. In that case `Uppy` will attach itself to the global
+`window.Uppy` object. See the
+[main Uppy documentation](https://uppy.io/docs/#Installation) for instructions.
 
 ## Documentation
 
-Documentation for this plugin can be found on the [Uppy website](https://uppy.io/docs/zoom).
+Documentation for this plugin can be found on the
+[Uppy website](https://uppy.io/docs/zoom).
 
 ## License
 

+ 4 - 2
packages/uppy/CHANGELOG.md

@@ -11,8 +11,10 @@ Included in: Uppy v4.0.0-beta.1
 
 Released: 2022-09-25
 
-- uppy: add a decoy `Core` export to warn users about the renaming (Antoine du Hamel / #4085)
-- uppy: remove all remaining occurrences of `Uppy.Core` (Antoine du Hamel / #4082)
+- uppy: add a decoy `Core` export to warn users about the renaming (Antoine du
+  Hamel / #4085)
+- uppy: remove all remaining occurrences of `Uppy.Core` (Antoine du Hamel /
+  #4082)
 
 ## 3.0.0
 

+ 2 - 1
private/README.md

@@ -1,3 +1,4 @@
 # Private packages
 
-Node.js packages for internal use by Uppy, like build tooling. These are not published to npm.
+Node.js packages for internal use by Uppy, like build tooling. These are not
+published to npm.

+ 5 - 2
private/remark-lint-uppy/README.md

@@ -1,13 +1,16 @@
 # remark-lint-uppy
 
-remark-lint preset derived from [`remark-preset-lint-recommended`][remark-preset-lint-recommended].
+remark-lint preset derived from
+[`remark-preset-lint-recommended`][remark-preset-lint-recommended].
 
 Differences:
 
 * The `list-item-bullet-indent` rule is disabled.
 * The `list-item-indent` rule is disabled.
 
-The reason for the differences is that these “wrong” patterns are ubiquitous in our markdown files and we don’t want to do these huge changes after adding the linter.
+The reason for the differences is that these “wrong” patterns are ubiquitous in
+our markdown files and we don’t want to do these huge changes after adding the
+linter.
 
 ## License