diff --git a/.env.example b/.env.example index 0b134ed4c2..f5a27d4186 100644 --- a/.env.example +++ b/.env.example @@ -49,6 +49,8 @@ VITE_UPLOADER=tus # VITE_UPLOADER=transloadit-xhr VITE_COMPANION_URL=http://localhost:3020 +# See also Transloadit.COMPANION_PATTERN +VITE_COMPANION_ALLOWED_HOSTS=/\.transloadit\.com$/ VITE_TUS_ENDPOINT=https://tusd.tusdemo.net/files/ VITE_XHR_ENDPOINT=https://xhr-server.herokuapp.com/upload diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8370bf7c3c..a23ea60e4d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -40,7 +40,7 @@ yarn run test:unit ### End-to-End tests -We use [Cypress](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. @@ -54,6 +54,44 @@ To generate the boilerplate for a new test run: ## Development +### Companion + +To start the Companion server along with Uppy, run: + +```bash +yarn run dev:with-companion +``` + +or if you only want to run Companion + +```bash +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. + +### Live example + +An example server is running at , 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. + +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). +* 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. diff --git a/.github/workflows/companion-deploy.yml b/.github/workflows/companion-deploy.yml index df3a0d1257..36f5378665 100644 --- a/.github/workflows/companion-deploy.yml +++ b/.github/workflows/companion-deploy.yml @@ -25,17 +25,19 @@ jobs: tag-sha: true tag-match: | \d{1,3}.\d{1,3}.\d{1,3} - - uses: docker/setup-buildx-action@v1 + - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-buildx-action@v2 - name: Log in to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{secrets.DOCKER_USERNAME}} password: ${{secrets.DOCKER_PASSWORD}} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v3 with: push: true context: . + platforms: linux/amd64,linux/arm64 file: Dockerfile tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/release-beta-candidate.yml b/.github/workflows/release-beta-candidate.yml index aafc5fbf11..fee7075e87 100644 --- a/.github/workflows/release-beta-candidate.yml +++ b/.github/workflows/release-beta-candidate.yml @@ -7,7 +7,7 @@ env: BETA_BRANCH: 3.x jobs: - prepare-release: + prepare-beta-release: name: Prepare release candidate Pull Request runs-on: ubuntu-latest steps: @@ -34,7 +34,7 @@ jobs: - name: Install dependencies run: corepack yarn install --immutable - name: Bump candidate packages version - run: corepack yarn version apply --all --json | jq -s > releases.json + run: corepack yarn version apply --all --prerelease=beta.%n --json | jq -s > releases.json - name: Prepare changelog run: corepack yarn workspace @uppy-dev/release update-changelogs releases.json | xargs git add - name: Update CDN URLs diff --git a/BUNDLE-README.md b/BUNDLE-README.md index 53105fa168..57c11ac53f 100644 --- a/BUNDLE-README.md +++ b/BUNDLE-README.md @@ -1,7 +1,7 @@ # Uppy Hi, thanks for trying out the bundled version of the Uppy File Uploader. You can use -this from a CDN (``) or bundle it with your webapp. +this from a CDN (``) 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aa30d8253..f4a16071ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,29 @@ Please add your entries in this format: In the current stage we aim to release a new version at least every month. +## 3.0.0-beta.2 + +Released: 2022-07-06 + +| Package | Version | Package | Version | +| -------------------- | ------------ | -------------------- | ------------ | +| @uppy/companion | 4.0.0-beta.1 | @uppy/transloadit | 3.0.0-beta.2 | +| @uppy/locales | 3.0.0-beta.2 | @uppy/robodog | 3.0.0-beta.2 | +| @uppy/provider-views | 3.0.0-beta.2 | uppy | 3.0.0-beta.2 | + +- example: fix `custom-provider` example (Antoine du Hamel / #3854) +- example: fix Vue3 example (Antoine du Hamel / #3774) +- @uppy/companion: remove deprecated duplicated metrics (Mikael Finstad / #3833) +- example: update CDN example (Antoine du Hamel / #3803) +- @uppy/companion: Companion 3 default to no s3 acl (Mikael Finstad / #3826) +- @uppy/companion: rewrite companion.app() to return an object (Mikael Finstad / #3827) +- @uppy/companion: remove companion provider compat api (Mikael Finstad / #3828) +- @uppy/companion: rewrite code for node >=14 (Mikael Finstad / #3829) +- @uppy/companion: remove chunkSize backwards compatibility (Mikael Finstad / #3830) +- @uppy/companion: Companion: make `emitSuccess` and `emitError` private (Mikael Finstad / #3832) +- @uppy/companion: do not use a default upload protocol (Mikael Finstad / #3834) + + ## 3.0.0-beta.1 Released: 2022-06-09 @@ -84,6 +107,29 @@ Released: 2022-05-30 - @uppy/transloadit: remove IE 10 hack (Antoine du Hamel / #3777) +## 2.12.2 + +Released: 2022-07-06 + +| Package | Version | Package | Version | +| -------------------- | ------- | -------------------- | ------- | +| @uppy/companion | 3.7.0 | @uppy/transloadit | 2.3.2 | +| @uppy/locales | 2.1.1 | @uppy/robodog | 2.8.2 | +| @uppy/provider-views | 2.1.2 | uppy | 2.12.2 | + +- @uppy/provider-views: improve logging (Mikael Finstad / #3638) +- docs: de-dupe companion dev docs (Mikael Finstad / #3852) +- @uppy/companion: Getkey safe behavior (Mikael Finstad / #3592) +- website: fix broken links (YukeshShr / #3861) +- @uppy/companion: doc: fix Google Drive example (Antoine du Hamel / #3855) +- @uppy/locales,@uppy/transloadit: Fix undefined error in in onTusError (Merlijn Vos / #3848) +- @uppy/companion: build an ARM64 container (Stuart Auld / #3841) +- @uppy/locales: Add missing translations and reorder nl_NL locale (Kasper Meinema / #3839) +- docs: Fix typo in aws-s3-multipart.md (Ikko Ashimine / #3838) +- meta: do not rebase when preparing beta candidates (Antoine du Hamel) +- meta: fix hard-coded branch name in release script (Antoine du Hamel) + + ## 2.12.1 Released: 2022-06-09 diff --git a/Dockerfile b/Dockerfile index 567fe7fb31..c4fd418c4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,8 @@ FROM node:16.13.0-alpine as build +# Create link to node on amd64 so that corepack can find it +RUN if [ "$(uname -m)" == "aarch64" ]; then mkdir -p /usr/local/sbin/ && ln -s /usr/local/bin/node /usr/local/sbin/node; fi + WORKDIR /app COPY package.json .yarnrc.yml /app/ diff --git a/README.md b/README.md index fda9163953..a7bba89499 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ const uppy = new Uppy({ autoProceed: false }) $ npm install @uppy/core @uppy/dashboard @uppy/tus ``` -Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v3.0.0-beta.1/uppy.min.css), either to your HTML page’s `` or include in JS, if your bundler of choice supports it. +Add CSS [uppy.min.css](https://releases.transloadit.com/uppy/v3.0.0-beta.2/uppy.min.css), either to your HTML page’s `` 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. @@ -75,10 +75,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit’s CDN: Edg ```html - + - +
@@ -184,7 +184,7 @@ If you’re using Uppy from CDN, those polyfills are already included in the leg bundle, so no need to include anything additionally: ```html - + ``` ## FAQ @@ -254,13 +254,13 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [sadovnychyi](https://github.com/sadovnychyi) |[samuelayo](https://github.com/samuelayo) |[richardwillars](https://github.com/richardwillars) |[ajkachnic](https://github.com/ajkachnic) |[dependabot\[bot\]](https://github.com/apps/dependabot) |[github-actions\[bot\]](https://github.com/apps/github-actions) | -[zcallan](https://github.com/zcallan) |[tim-kos](https://github.com/tim-kos) |[janko](https://github.com/janko) |[wilkoklak](https://github.com/wilkoklak) |[oliverpool](https://github.com/oliverpool) |[Botz](https://github.com/Botz) | +[zcallan](https://github.com/zcallan) |[tim-kos](https://github.com/tim-kos) |[janko](https://github.com/janko) |[wilkoklak](https://github.com/wilkoklak) |[YukeshShr](https://github.com/YukeshShr) |[oliverpool](https://github.com/oliverpool) | :---: |:---: |:---: |:---: |:---: |:---: | -[zcallan](https://github.com/zcallan) |[tim-kos](https://github.com/tim-kos) |[janko](https://github.com/janko) |[wilkoklak](https://github.com/wilkoklak) |[oliverpool](https://github.com/oliverpool) |[Botz](https://github.com/Botz) | +[zcallan](https://github.com/zcallan) |[tim-kos](https://github.com/tim-kos) |[janko](https://github.com/janko) |[wilkoklak](https://github.com/wilkoklak) |[YukeshShr](https://github.com/YukeshShr) |[oliverpool](https://github.com/oliverpool) | -[YukeshShr](https://github.com/YukeshShr) |[mcallistertyler](https://github.com/mcallistertyler) |[mokutsu-coursera](https://github.com/mokutsu-coursera) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[mrbatista](https://github.com/mrbatista) | +[Botz](https://github.com/Botz) |[mcallistertyler](https://github.com/mcallistertyler) |[mokutsu-coursera](https://github.com/mokutsu-coursera) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[mrbatista](https://github.com/mrbatista) | :---: |:---: |:---: |:---: |:---: |:---: | -[YukeshShr](https://github.com/YukeshShr) |[mcallistertyler](https://github.com/mcallistertyler) |[mokutsu-coursera](https://github.com/mokutsu-coursera) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[mrbatista](https://github.com/mrbatista) | +[Botz](https://github.com/Botz) |[mcallistertyler](https://github.com/mcallistertyler) |[mokutsu-coursera](https://github.com/mokutsu-coursera) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[mrbatista](https://github.com/mrbatista) | [tuoxiansp](https://github.com/tuoxiansp) |[dominiceden](https://github.com/dominiceden) |[elenalape](https://github.com/elenalape) |[mejiaej](https://github.com/mejiaej) |[gavboulton](https://github.com/gavboulton) |[Hawxy](https://github.com/Hawxy) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -286,85 +286,85 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [behnammodi](https://github.com/behnammodi) |[BePo65](https://github.com/BePo65) |[Burkes](https://github.com/Burkes) |[camiloforero](https://github.com/camiloforero) |[craigjennings11](https://github.com/craigjennings11) |[davekiss](https://github.com/davekiss) | -[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | +[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[eltociear](https://github.com/eltociear) | :---: |:---: |:---: |:---: |:---: |:---: | -[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) | +[davekiss](https://github.com/davekiss) |[DenysNosov](https://github.com/DenysNosov) |[ethanwillis](https://github.com/ethanwillis) |[frobinsonj](https://github.com/frobinsonj) |[geertclerx](https://github.com/geertclerx) |[eltociear](https://github.com/eltociear) | -[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) | +[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) | :---: |:---: |:---: |:---: |:---: |:---: | -[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) |[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) | +[ghasrfakhri](https://github.com/ghasrfakhri) |[jasonbosco](https://github.com/jasonbosco) |[jedwood](https://github.com/jedwood) |[dogrocker](https://github.com/dogrocker) |[lamartire](https://github.com/lamartire) |[lafe](https://github.com/lafe) | -[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | +[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) | :---: |:---: |:---: |:---: |:---: |:---: | -[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) |[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) | +[mactavishz](https://github.com/mactavishz) |[maferland](https://github.com/maferland) |[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[MatthiasKunnen](https://github.com/MatthiasKunnen) |[msand](https://github.com/msand) | -[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) | +[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) | :---: |:---: |:---: |:---: |:---: |:---: | -[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) |[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) | +[paescuj](https://github.com/paescuj) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[rdimartino](https://github.com/rdimartino) |[rosenfeld](https://github.com/rosenfeld) |[jrschumacher](https://github.com/jrschumacher) | -[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) | +[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) | :---: |:---: |:---: |:---: |:---: |:---: | -[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) |[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) | +[SlavikTraktor](https://github.com/SlavikTraktor) |[ThomasG77](https://github.com/ThomasG77) |[sparanoid](https://github.com/sparanoid) |[zhuangya](https://github.com/zhuangya) |[yaegor](https://github.com/yaegor) |[allenfantasy](https://github.com/allenfantasy) | -[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) | +[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) | :---: |:---: |:---: |:---: |:---: |:---: | -[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) |[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) | +[Zyclotrop-j](https://github.com/Zyclotrop-j) |[anark](https://github.com/anark) |[fortrieb](https://github.com/fortrieb) |[jarey](https://github.com/jarey) |[muhammadInam](https://github.com/muhammadInam) |[rettgerst](https://github.com/rettgerst) | -[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) | +[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) | :---: |:---: |:---: |:---: |:---: |:---: | -[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) |[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) | +[mkabatek](https://github.com/mkabatek) |[jukakoski](https://github.com/jukakoski) |[olemoign](https://github.com/olemoign) |[ajschmidt8](https://github.com/ajschmidt8) |[superhawk610](https://github.com/superhawk610) |[abannach](https://github.com/abannach) | -[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) | +[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) |[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) | :---: |:---: |:---: |:---: |:---: |:---: | -[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) |[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) | +[adamelmore](https://github.com/adamelmore) |[ajh-sr](https://github.com/ajh-sr) |[adamvigneault](https://github.com/adamvigneault) |[Adrrei](https://github.com/Adrrei) |[adritasharma](https://github.com/adritasharma) |[ahmadissa](https://github.com/ahmadissa) | -[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) | +[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) |[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) | :---: |:---: |:---: |:---: |:---: |:---: | -[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) | +[asmt3](https://github.com/asmt3) |[alexnj](https://github.com/alexnj) |[aalepis](https://github.com/aalepis) |[Dogfalo](https://github.com/Dogfalo) |[tekacs](https://github.com/tekacs) |[amitport](https://github.com/amitport) | -[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) | +[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) | :---: |:---: |:---: |:---: |:---: |:---: | -[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) |[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) | +[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[superandrew213](https://github.com/superandrew213) |[andychongyz](https://github.com/andychongyz) |[anthony0030](https://github.com/anthony0030) |[Abourass](https://github.com/Abourass) | -[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) | +[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) |[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) | :---: |:---: |:---: |:---: |:---: |:---: | -[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) |[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) | +[arthurdenner](https://github.com/arthurdenner) |[apuyou](https://github.com/apuyou) |[ash-jc-allen](https://github.com/ash-jc-allen) |[atsawin](https://github.com/atsawin) |[ayhankesicioglu](https://github.com/ayhankesicioglu) |[azeemba](https://github.com/azeemba) | -[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) | +[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) | :---: |:---: |:---: |:---: |:---: |:---: | -[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) |[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) | +[azizk](https://github.com/azizk) |[bducharme](https://github.com/bducharme) |[Quorafind](https://github.com/Quorafind) |[wbaaron](https://github.com/wbaaron) |[bedgerotto](https://github.com/bedgerotto) |[cyu](https://github.com/cyu) | -[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) | +[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) | :---: |:---: |:---: |:---: |:---: |:---: | -[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) |[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) | +[cartfisk](https://github.com/cartfisk) |[cellvinchung](https://github.com/cellvinchung) |[chao](https://github.com/chao) |[Cretezy](https://github.com/Cretezy) |[charlybillaud](https://github.com/charlybillaud) |[csprance](https://github.com/csprance) | -[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) | +[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) | :---: |:---: |:---: |:---: |:---: |:---: | -[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) |[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) | +[Aarbel](https://github.com/Aarbel) |[cbush06](https://github.com/cbush06) |[czj](https://github.com/czj) |[CommanderRoot](https://github.com/CommanderRoot) |[ardeois](https://github.com/ardeois) |[sercraig](https://github.com/sercraig) | -[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) | +[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) |[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) | :---: |:---: |:---: |:---: |:---: |:---: | -[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) |[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) | +[Cruaier](https://github.com/Cruaier) |[danmichaelo](https://github.com/danmichaelo) |[danschalow](https://github.com/danschalow) |[danilat](https://github.com/danilat) |[mrboomer](https://github.com/mrboomer) |[akizor](https://github.com/akizor) | -[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) | +[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) |[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) | :---: |:---: |:---: |:---: |:---: |:---: | -[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) |[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) | +[davilima6](https://github.com/davilima6) |[DennisKofflard](https://github.com/DennisKofflard) |[jeetiss](https://github.com/jeetiss) |[sweetro](https://github.com/sweetro) |[EdgarSantiago93](https://github.com/EdgarSantiago93) |[emuell](https://github.com/emuell) | -[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) | +[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) | :---: |:---: |:---: |:---: |:---: |:---: | -[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) |[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) | +[efbautista](https://github.com/efbautista) |[yoldar](https://github.com/yoldar) |[eliOcs](https://github.com/eliOcs) |[EnricoSottile](https://github.com/EnricoSottile) |[epexa](https://github.com/epexa) |[Gkleinereva](https://github.com/Gkleinereva) | -[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) | +[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) |[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) | :---: |:---: |:---: |:---: |:---: |:---: | -[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) | +[fgallinari](https://github.com/fgallinari) |[ferdiusa](https://github.com/ferdiusa) |[dtrucs](https://github.com/dtrucs) |[gabiganam](https://github.com/gabiganam) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) | -[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[eltociear](https://github.com/eltociear) | +[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) | :---: |:---: |:---: |:---: |:---: |:---: | -[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) |[NaxYo](https://github.com/NaxYo) |[eltociear](https://github.com/eltociear) | +[roenschg](https://github.com/roenschg) |[HughbertD](https://github.com/HughbertD) |[HussainAlkhalifah](https://github.com/HussainAlkhalifah) |[huydod](https://github.com/huydod) |[IanVS](https://github.com/IanVS) |[ishendyweb](https://github.com/ishendyweb) | -[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) |[JakubHaladej](https://github.com/JakubHaladej) | +[NaxYo](https://github.com/NaxYo) |[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) | :---: |:---: |:---: |:---: |:---: |:---: | -[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) |[JakubHaladej](https://github.com/JakubHaladej) | +[NaxYo](https://github.com/NaxYo) |[intenzive](https://github.com/intenzive) |[GreenJimmy](https://github.com/GreenJimmy) |[mazoruss](https://github.com/mazoruss) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jdssem](https://github.com/jdssem) | [Jbithell](https://github.com/Jbithell) |[jcjmcclean](https://github.com/jcjmcclean) |[janklimo](https://github.com/janklimo) |[janwilts](https://github.com/janwilts) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) | :---: |:---: |:---: |:---: |:---: |:---: | @@ -378,53 +378,57 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [jorgeepc](https://github.com/jorgeepc) |[jszobody](https://github.com/jszobody) |[jcalonso](https://github.com/jcalonso) |[jmontoyaa](https://github.com/jmontoyaa) |[tykarol](https://github.com/tykarol) |[firesharkstudios](https://github.com/firesharkstudios) | -[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) | +[kaspermeinema](https://github.com/kaspermeinema) |[firesharkstudios](https://github.com/firesharkstudios) |[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) | :---: |:---: |:---: |:---: |:---: |:---: | -[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) |[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) | +[kaspermeinema](https://github.com/kaspermeinema) |[firesharkstudios](https://github.com/firesharkstudios) |[kevin-west-10x](https://github.com/kevin-west-10x) |[elkebab](https://github.com/elkebab) |[kyleparisi](https://github.com/kyleparisi) |[leaanthony](https://github.com/leaanthony) | -[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) | +[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) | :---: |:---: |:---: |:---: |:---: |:---: | -[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) |[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) | +[larowlan](https://github.com/larowlan) |[dviry](https://github.com/dviry) |[galli-leo](https://github.com/galli-leo) |[leods92](https://github.com/leods92) |[louim](https://github.com/louim) |[lucaperret](https://github.com/lucaperret) | -[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) | +[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) | :---: |:---: |:---: |:---: |:---: |:---: | -[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) |[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) | +[lucax88x](https://github.com/lucax88x) |[onhate](https://github.com/onhate) |[mperrando](https://github.com/mperrando) |[marcosthejew](https://github.com/marcosthejew) |[marcusforsberg](https://github.com/marcusforsberg) |[Acconut](https://github.com/Acconut) | -[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) | +[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) | :---: |:---: |:---: |:---: |:---: |:---: | -[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) |[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) | +[martin-brennan](https://github.com/martin-brennan) |[masaok](https://github.com/masaok) |[mattfik](https://github.com/mattfik) |[matthewhartstonge](https://github.com/matthewhartstonge) |[mauricioribeiro](https://github.com/mauricioribeiro) |[hrsh](https://github.com/hrsh) | -[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) | +[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | :---: |:---: |:---: |:---: |:---: |:---: | -[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) |[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) | +[mhulet](https://github.com/mhulet) |[mkopinsky](https://github.com/mkopinsky) |[achmiral](https://github.com/achmiral) |[boudra](https://github.com/boudra) |[mnafees](https://github.com/mnafees) |[shahimclt](https://github.com/shahimclt) | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) | :---: |:---: |:---: |:---: |:---: |:---: | -[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) |[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) | +[navruzm](https://github.com/navruzm) |[marton-laszlo-attila](https://github.com/marton-laszlo-attila) |[pleasespammelater](https://github.com/pleasespammelater) |[naveed-ahmad](https://github.com/naveed-ahmad) |[nicojones](https://github.com/nicojones) |[coreprocess](https://github.com/coreprocess) | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[plneto](https://github.com/plneto) |[pedrofs](https://github.com/pedrofs) | :---: |:---: |:---: |:---: |:---: |:---: | -[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[pedrofs](https://github.com/pedrofs) |[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) | +[nil1511](https://github.com/nil1511) |[leftdevel](https://github.com/leftdevel) |[cryptic022](https://github.com/cryptic022) |[patricklindsay](https://github.com/patricklindsay) |[plneto](https://github.com/plneto) |[pedrofs](https://github.com/pedrofs) | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) | :---: |:---: |:---: |:---: |:---: |:---: | -[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) |[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) | +[pmusaraj](https://github.com/pmusaraj) |[phillipalexander](https://github.com/phillipalexander) |[ppadmavilasom](https://github.com/ppadmavilasom) |[Pzoco](https://github.com/Pzoco) |[eman8519](https://github.com/eman8519) |[luarmr](https://github.com/luarmr) | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) | :---: |:---: |:---: |:---: |:---: |:---: | -[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) |[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) | +[refo](https://github.com/refo) |[SxDx](https://github.com/SxDx) |[robwilson1](https://github.com/robwilson1) |[romain-preston](https://github.com/romain-preston) |[scherroman](https://github.com/scherroman) |[rossng](https://github.com/rossng) | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) | :---: |:---: |:---: |:---: |:---: |:---: | -[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) |[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) | +[rart](https://github.com/rart) |[fortunto2](https://github.com/fortunto2) |[samuelcolburn](https://github.com/samuelcolburn) |[sebasegovia01](https://github.com/sebasegovia01) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[szh](https://github.com/szh) | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) | +[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) |[sjauld](https://github.com/sjauld) |[taj](https://github.com/taj) | :---: |:---: |:---: |:---: |:---: |:---: | -[steverob](https://github.com/steverob) |[taj](https://github.com/taj) |[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) | +[SpazzMarticus](https://github.com/SpazzMarticus) |[waptik](https://github.com/waptik) |[amaitu](https://github.com/amaitu) |[steverob](https://github.com/steverob) |[sjauld](https://github.com/sjauld) |[taj](https://github.com/taj) | -[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) | +[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) |[tomsaleeba](https://github.com/tomsaleeba) |[tomekp](https://github.com/tomekp) | :---: |:---: |:---: |:---: |:---: |:---: | -[tomsaleeba](https://github.com/tomsaleeba) |[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) | +[Tashows](https://github.com/Tashows) |[twarlop](https://github.com/twarlop) |[tmaier](https://github.com/tmaier) |[WIStudent](https://github.com/WIStudent) |[tomsaleeba](https://github.com/tomsaleeba) |[tomekp](https://github.com/tomekp) | + +[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[weston-sankey-mark43](https://github.com/weston-sankey-mark43) | +:---: |:---: |:---: |:---: |:---: |:---: | +[tvaliasek](https://github.com/tvaliasek) |[vially](https://github.com/vially) |[valentinoli](https://github.com/valentinoli) |[nagyv](https://github.com/nagyv) |[dwnste](https://github.com/dwnste) |[weston-sankey-mark43](https://github.com/weston-sankey-mark43) | [willycamargo](https://github.com/willycamargo) |[xhocquet](https://github.com/xhocquet) |[YehudaKremer](https://github.com/YehudaKremer) |[zachconner](https://github.com/zachconner) |[zacharylawson](https://github.com/zacharylawson) |[zackbloom](https://github.com/zackbloom) | :---: |:---: |:---: |:---: |:---: |:---: | diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index 34580dcac9..e75fd6a87f 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,7 +4,7 @@ - + @@ -16,7 +16,7 @@ Dashboard, Webcam, Tus, - } from "https://releases.transloadit.com/uppy/v3.0.0-beta.1/uppy.min.mjs"; + } from "https://releases.transloadit.com/uppy/v3.0.0-beta.2/uppy.min.mjs"; const uppy = new Core.Uppy({ debug: true, autoProceed: false }) .use(Dashboard, { trigger: "#uppyModalOpener" }) @@ -29,7 +29,7 @@ - + + + + ``` Then, a global `Robodog` variable will be available. For usage instructions, please see the [main Robodog documentation](https://uppy.io/docs/robodog). diff --git a/packages/@uppy/robodog/package.json b/packages/@uppy/robodog/package.json index 025adcc928..e7025e70f3 100644 --- a/packages/@uppy/robodog/package.json +++ b/packages/@uppy/robodog/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/robodog", "description": "Transloadit SDK for browsers based on Uppy", - "version": "3.0.0-beta.1", + "version": "3.0.0-beta.2", "license": "MIT", "main": "lib/index.js", "jsnext:main": "src/index.js", diff --git a/packages/@uppy/transloadit/CHANGELOG.md b/packages/@uppy/transloadit/CHANGELOG.md index e3f6e03317..d27e384a38 100644 --- a/packages/@uppy/transloadit/CHANGELOG.md +++ b/packages/@uppy/transloadit/CHANGELOG.md @@ -7,6 +7,13 @@ Included in: Uppy v3.0.0-beta - @uppy/transloadit: remove IE 10 hack (Antoine du Hamel / #3777) +## 2.3.2 + +Released: 2022-07-06 +Included in: Uppy v2.12.2 + +- @uppy/locales,@uppy/transloadit: Fix undefined error in in onTusError (Merlijn Vos / #3848) + ## 2.3.1 Released: 2022-06-09 diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index 43385a5bd6..5f2b148956 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -1,7 +1,7 @@ { "name": "@uppy/transloadit", "description": "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", - "version": "3.0.0-beta.1", + "version": "3.0.0-beta.2", "license": "MIT", "main": "lib/index.js", "types": "types/index.d.ts", diff --git a/packages/@uppy/transloadit/src/index.js b/packages/@uppy/transloadit/src/index.js index f5398854b7..45e6719909 100644 --- a/packages/@uppy/transloadit/src/index.js +++ b/packages/@uppy/transloadit/src/index.js @@ -731,7 +731,7 @@ export default class Transloadit extends BasePlugin { } #onTusError = (file, err) => { - this.#closeAssemblyIfExists(file.transloadit?.assembly) + this.#closeAssemblyIfExists(file?.transloadit?.assembly) if (err?.message?.startsWith('tus: ')) { const endpoint = err.originalRequest?.getUnderlyingObject()?.responseURL this.client.submitError(err, { endpoint, type: 'TUS_ERROR' }) diff --git a/packages/uppy/package.json b/packages/uppy/package.json index 8e24b826e2..10b8c7aca4 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -1,7 +1,7 @@ { "name": "uppy", "description": "Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:", - "version": "3.0.0-beta.1", + "version": "3.0.0-beta.2", "license": "MIT", "main": "index.mjs", "module": "index.mjs", diff --git a/private/dev/Dashboard.js b/private/dev/Dashboard.js index e8014e1ac6..3d27d9f79b 100644 --- a/private/dev/Dashboard.js +++ b/private/dev/Dashboard.js @@ -24,6 +24,7 @@ import generateSignatureIfSecret from './generateSignatureIfSecret.js' const { VITE_UPLOADER : UPLOADER, VITE_COMPANION_URL : COMPANION_URL, + VITE_COMPANION_ALLOWED_HOSTS : companionAllowedHosts, VITE_TUS_ENDPOINT : TUS_ENDPOINT, VITE_XHR_ENDPOINT : XHR_ENDPOINT, VITE_TRANSLOADIT_KEY : TRANSLOADIT_KEY, @@ -75,18 +76,19 @@ export default () => { proudlyDisplayPoweredByUppy: true, note: '2 files, images and video only', }) - // .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Box, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Url, { target: Dashboard, companionUrl: COMPANION_URL }) - // .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL }) + // .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Box, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Url, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) + // .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL, companionAllowedHosts }) .use(RemoteSources, { companionUrl: COMPANION_URL, sources: ['Box', 'Dropbox', 'Facebook', 'GoogleDrive', 'Instagram', 'OneDrive', 'Unsplash', 'Url'], + companionAllowedHosts, }) .use(Webcam, { target: Dashboard, diff --git a/website/src/_posts/2019-04-liftoff-11.md b/website/src/_posts/2019-04-liftoff-11.md index 20659d3ef9..527bc55137 100644 --- a/website/src/_posts/2019-04-liftoff-11.md +++ b/website/src/_posts/2019-04-liftoff-11.md @@ -37,7 +37,7 @@ And another week bites the dust! With the weekend right around the corner, we're - We released a new version of Uppy. While it isn’t 1.0 just quite yet, this is another step in the right direction. Uppy `0.30.4` features fixes for `allowSyntheticImports`, Typescript typings, issues when using Companion Client for remote AWS-S3 uploads, and using websockets and console.dir in React Native. -- Artur and [Renée](https://github.com/goto-bus-stop) reviewed and merged a [PR](https://github.com/transloadit/uppy/pull/1360) that allows a user to customize the status of an upload in Uppy. Thanks to [Mactavish](https://github.com/Mactaivsh) for contributing! +- Artur and [Renée](https://github.com/goto-bus-stop) reviewed and merged a [PR](https://github.com/transloadit/uppy/pull/1360) that allows a user to customize the status of an upload in Uppy. Thanks to Mactavish for contributing! - [Abdel](https://github.com/kiloreux) [fixed the Serverless example](https://github.com/transloadit/uppy/pull/1408) for running Companion on AWS Lambda. diff --git a/website/src/_posts/2019-04-liftoff-14.md b/website/src/_posts/2019-04-liftoff-14.md index a863b59af1..61bef902ec 100644 --- a/website/src/_posts/2019-04-liftoff-14.md +++ b/website/src/_posts/2019-04-liftoff-14.md @@ -31,7 +31,7 @@ While there are still things to be implemented, such as picking files from Insta ## In Progress -- [Alex](https://github.com/nqst) is working on improving the Uppy design (in the code) in his [`design-facelift` branch](https://github.com/transloadit/uppy/compare/master...nqst:design-facelift). +- [Alex](https://github.com/nqst) is working on improving the Uppy design (in the code) in his `design-facelift` branch - [Evgenia](https://github.com/lakesare) is working on improving accessibility together with Alex, who found many issues that we still need to fix in this area. diff --git a/website/src/_posts/2019-04-liftoff-16.md b/website/src/_posts/2019-04-liftoff-16.md index 6ca41078c3..99f2a13ac8 100644 --- a/website/src/_posts/2019-04-liftoff-16.md +++ b/website/src/_posts/2019-04-liftoff-16.md @@ -32,7 +32,7 @@ Big shout out to both! - [Ife](https://github.com/ifedapoolarewaju) will be integrating fingerprinting and hash code support [into tus-js-client](https://github.com/tus/tus-js-client/pull/73). - If the team has the time, they will also look into large file support, upload and download reporting for Companion XHR uploads, and an issue concerning XHR uploads with the [Transloadit API](https://transloadit.com/docs/api/). -- [Alex](https://github.com/nqst) continues [improving Uppy's UI](https://github.com/transloadit/uppy/compare/master...nqst:design-facelift) and has recently been refactoring CSS code, while Evgenia keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open. +- [Alex](https://github.com/nqst) continues improving Uppy's UI and has recently been refactoring CSS code, while Evgenia keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open. In addition to getting Uppy 1.0 out of the dog house, I mentioned that the team is already talking about features and fixes to tackle after 1.0. If you look at our [CHANGELOG](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md), you'll notice some 1.1 todos in there. There's always room for improvement, so now you have something to look forward to after Uppy 1.0 hits the web! :wink: diff --git a/website/src/_posts/2019-04-liftoff-17.md b/website/src/_posts/2019-04-liftoff-17.md index bd3cdf883f..564c11c5b7 100644 --- a/website/src/_posts/2019-04-liftoff-17.md +++ b/website/src/_posts/2019-04-liftoff-17.md @@ -33,7 +33,7 @@ After:
- Artur is reviewing PRs, reporting errors and testing Uppy in response to the team’s feedback. -- Alex continues [improving Uppy's UI](https://github.com/transloadit/uppy/compare/master...nqst:design-facelift) and has recently been refactoring CSS code, while [Evgenia](https://github.com/lakesare) keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open. +- Alex continues improving Uppy's UI and has recently been refactoring CSS code, while [Evgenia](https://github.com/lakesare) keeps charging at the [many accessibility issues](https://github.com/transloadit/uppy/issues/created_by/nqst) that are still open. - Evgenia is also working on the new drag/drop implementation, which will include a new _Drop Here_ placeholder and not experience any flickering. And as if that weren't enough, she is having a go at `drop folder` support for cross-browser compatibility as well, so that it won’t be relying on DOM manipulation in our Preact components. diff --git a/website/src/docs/aws-s3-multipart.md b/website/src/docs/aws-s3-multipart.md index 8af37de283..6265ca4d09 100644 --- a/website/src/docs/aws-s3-multipart.md +++ b/website/src/docs/aws-s3-multipart.md @@ -109,7 +109,7 @@ A function that generates a batch of signed URLs for the specified part numbers. * `uploadId` - The UploadID of this Multipart upload. * `key` - The object key in the S3 bucket. -* `partNumbers` - An array of indecies of this part in the file (`PartNumber` in S3 terminology). Note that part numbers are _not_ zero-based. +* `partNumbers` - An array of indices of this part in the file (`PartNumber` in S3 terminology). Note that part numbers are _not_ zero-based. * `chunks` - A Javascript object with the part numbers as keys and the Blob data for each part as the value. `prepareUploadParts` should return a `Promise` with an `Object` with keys: diff --git a/website/src/docs/companion.md b/website/src/docs/companion.md index 0112536ebc..ee6c55e122 100644 --- a/website/src/docs/companion.md +++ b/website/src/docs/companion.md @@ -572,47 +572,4 @@ See also [example code with a custom provider](https://github.com/transloadit/up ## Development -1\. To set up Companion for local development, please clone the Uppy repo and install, like so: - -```bash -git clone https://github.com/transloadit/uppy -cd uppy -yarn install -``` - -2\. Configure your environment variables by copying the `env.example.sh` file to `env.sh` and edit it to its correct values. - -```bash -cp env.example.sh env.sh -$EDITOR env.sh -``` - -3\. To start the server, run: - -```bash -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. - -## Live example - -An example server is running at , 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. - -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). -* Companion reports progress to Uppy, as if it were a local upload. -* Completed! +See [CONTRIBUTING.md](/.github/CONTRIBUTING.md#companion) diff --git a/website/src/docs/index.md b/website/src/docs/index.md index 21021d7c62..8b7c02ccbb 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -19,12 +19,12 @@ Here’s the simplest example html page with Uppy (it uses a CDN bundle, while w Uppy - +
- + + ``` 2\. Add CSS to ``: ```html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -181,5 +181,5 @@ export * from '@uppy/core' If you’re using Uppy from CDN, those polyfills are already included in the bundle, no need to include anything additionally: ```html - + ``` diff --git a/website/src/docs/locales.md b/website/src/docs/locales.md index ea429c8237..fc29651c3f 100644 --- a/website/src/docs/locales.md +++ b/website/src/docs/locales.md @@ -34,8 +34,8 @@ const uppy = new Uppy({ Add a ` - + + + - - + + ``` Please note that while you may be able to get 2.0 to work in IE11 this way, we do not officially support it anymore. diff --git a/website/src/docs/robodog-form.md b/website/src/docs/robodog-form.md index 8fdaa9e362..45637e2179 100644 --- a/website/src/docs/robodog-form.md +++ b/website/src/docs/robodog-form.md @@ -150,7 +150,7 @@ Make sure to also include the Uppy css file in your `` tag in case you wan ```html - + ``` @@ -162,7 +162,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra Testing Robodog - +
@@ -172,7 +172,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
- + + + ``` diff --git a/website/src/examples/dashboard/app.es6 b/website/src/examples/dashboard/app.es6 index b2efd04f29..d7ad2cd37e 100644 --- a/website/src/examples/dashboard/app.es6 +++ b/website/src/examples/dashboard/app.es6 @@ -242,7 +242,7 @@ function loadLocaleFromCDN (localeName) { const head = document.getElementsByTagName('head')[0] const js = document.createElement('script') js.type = 'text/javascript' - js.src = `https://releases.transloadit.com/uppy/locales/v3.0.0-beta.1/${localeName}.min.js` + js.src = `https://releases.transloadit.com/uppy/locales/v3.0.0-beta.2/${localeName}.min.js` head.appendChild(js) } diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index 7c52e50b66..fb0b7fffb0 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,7 +1,7 @@ - +
@@ -12,9 +12,9 @@
Uploaded files:
- - - + + + +// const robodog = require('@uppy/robodog') const TRANSLOADIT_EXAMPLE_KEY = '35c1aed03f5011e982b6afe82599b6a0' diff --git a/website/src/examples/markdown-snippets/app.html b/website/src/examples/markdown-snippets/app.html index 073e90e8d2..6bf55ad028 100644 --- a/website/src/examples/markdown-snippets/app.html +++ b/website/src/examples/markdown-snippets/app.html @@ -1,6 +1,6 @@ + -->

Create a new snippet

diff --git a/website/themes/uppy/layout/index.ejs b/website/themes/uppy/layout/index.ejs index b582202f05..faa6411c1e 100644 --- a/website/themes/uppy/layout/index.ejs +++ b/website/themes/uppy/layout/index.ejs @@ -187,9 +187,9 @@

© <%- date(Date.now(), 'YYYY') %> Transloadit

- - - + + +