فهرست منبع

Merge branch 'master' of github.com:transloadit/uppy

Kevin van Zonneveld 6 سال پیش
والد
کامیت
ff973679d3
50فایلهای تغییر یافته به همراه357 افزوده شده و 265 حذف شده
  1. 4 4
      .github/ISSUE_TEMPLATE/integration_help.md
  2. 3 1
      CHANGELOG.md
  3. 4 70
      README.md
  4. 1 1
      bin/upload-to-cdn.sh
  5. 2 2
      examples/cdn-example/index.html
  6. 1 1
      examples/transloadit-textarea/index.html
  7. 2 2
      examples/uppy-with-companion/client/index.html
  8. 4 4
      packages/@uppy/aws-s3-multipart/package.json
  9. 5 5
      packages/@uppy/aws-s3/package.json
  10. 1 1
      packages/@uppy/companion-client/package.json
  11. 1 1
      packages/@uppy/companion/package.json
  12. 48 29
      packages/@uppy/companion/src/server/Uploader.js
  13. 1 1
      packages/@uppy/core/package.json
  14. 7 1
      packages/@uppy/core/src/index.js
  15. 8 8
      packages/@uppy/dashboard/package.json
  16. 3 3
      packages/@uppy/drag-drop/package.json
  17. 5 5
      packages/@uppy/dropbox/package.json
  18. 3 3
      packages/@uppy/file-input/package.json
  19. 3 3
      packages/@uppy/form/package.json
  20. 3 3
      packages/@uppy/golden-retriever/package.json
  21. 5 5
      packages/@uppy/google-drive/package.json
  22. 3 3
      packages/@uppy/informer/package.json
  23. 5 5
      packages/@uppy/instagram/package.json
  24. 1 1
      packages/@uppy/locales/package.json
  25. 3 3
      packages/@uppy/progress-bar/package.json
  26. 3 3
      packages/@uppy/provider-views/package.json
  27. 7 7
      packages/@uppy/react/package.json
  28. 3 3
      packages/@uppy/redux-dev-tools/package.json
  29. 11 11
      packages/@uppy/robodog/package.json
  30. 3 3
      packages/@uppy/status-bar/package.json
  31. 3 3
      packages/@uppy/thumbnail-generator/package.json
  32. 6 6
      packages/@uppy/transloadit/package.json
  33. 4 4
      packages/@uppy/tus/package.json
  34. 4 4
      packages/@uppy/url/package.json
  35. 3 3
      packages/@uppy/webcam/package.json
  36. 4 4
      packages/@uppy/xhr-upload/package.json
  37. 24 24
      packages/uppy/package.json
  38. 5 2
      website/_config.yml
  39. 128 0
      website/src/_posts/2019-04-1.0.md
  40. 5 5
      website/src/docs/index.md
  41. 4 4
      website/src/docs/robodog-form.md
  42. 2 2
      website/src/docs/robodog.md
  43. 2 2
      website/src/examples/i18n/app.html
  44. BIN
      website/src/images/blog/1.0/amsterdam-team-meetup.jpg
  45. BIN
      website/src/images/blog/1.0/uppy-dashboard-1.png
  46. BIN
      website/src/images/blog/1.0/uppy-dashboard-2.png
  47. BIN
      website/src/images/blog/1.0/uppy-team-kong.jpg
  48. 1 1
      website/src/support.md
  49. 8 8
      website/themes/uppy/layout/index.ejs
  50. 1 1
      website/themes/uppy/source/css/_settings.scss

+ 4 - 4
.github/ISSUE_TEMPLATE/integration_help.md

@@ -5,10 +5,10 @@ about: Do you need assistance with building the Uppy client in your bundler, or
 labels: Not Accepted
 ---
 
-Transloadit is providing Uppy free of charge. If you want you can self-host all components and never pay us a dime. There's docs and tests and your Bug Reports and Feature Requests are always welcome on GitHub. 
+Transloadit is providing Uppy free of charge. If you want, you can self-host all of its components and never pay us a dime. There are docs and tests, and your Bug Reports and Feature Requests are always welcome on GitHub. 
 
-There is also a different category of support that we'd like to call Integration Help: making things work for you, that are already reported working for the larger community.
+There is also a different category of support that we like to call Integration Help. It means that you will be taking advantage of all the knowledge already available within the Uppy community, to help you with all kinds of things that have already been reported as working.
 
-As much as we'd like to provide detailed integration help to each non-paying user, Uppy has reached a point where this is no longer sustainable for our small crew. We end up investing our time in a million different projects, but without money flowing back, we can't ramp up our team along with the demand, spreading our team ever thinner, eventually grinding development to a halt.
+As much as we at Transloadit would like to provide detailed Integration Help to every non-paying user, Uppy has reached a point where this is no longer sustainable for our small crew. If we end up investing our time in a million different projects, as long as there is no money flowing back, we won't be able to ramp up our team to meet the demand. This would spread the team ever thinner and eventually grind development to a halt.
 
-This is not where we want to be, so in order to offer enthusiasts, businesses, and enterprises assistance in a sustainable way, we're providing community based integration help for free at <https://community.transloadit.com/c/uppy>, and offer paid support via <https://uppy.io/support>.
+That is not where we want to be. So, in order to offer enthusiasts, businesses, and enterprises assistance in a sustainable way, we're providing this community-based Integration Help for free at <https://community.transloadit.com/c/uppy>. If you are unable to solve your problem with help of the Uppy community, we also offer paid Integration Help via <https://uppy.io/support>.

+ 3 - 1
CHANGELOG.md

@@ -91,6 +91,8 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature,
 
 ## 1.1
 
+- [ ] ! core: _calculateTotalProgress results in incorrectly high (1038%) progress with files that don’t have size (like from Instagram) (@goto-bus-stop)
+- [ ] companion: restore deferredLength — parallel upload/download, 423 and 500 issues (@ife)
 - [ ] dashboard: optional alert `onbeforeunload` while upload is in progress, safeguarding from accidentaly navigating away from a page with an ongoing upload
 - [x] dashboard: Bring back "Drop Here" screen for dragged URLs without introducing flickering (tricky! see PR #1400)
 - [ ] a11y: Fix remaining issues (https://github.com/transloadit/uppy/issues/created_by/nqst)
@@ -99,7 +101,7 @@ PRs are welcome! Please do open an issue to discuss first if it's a big feature,
 - [ ] dashboard: add option to use `body` or `window` or CSS selector as drop zone / paste zone as well (@arturi)
 - [ ] chore: fix up all code using the prettier branch. work is done, just needs an execute and review/okay by the team
 - [ ] !!! dashboard: Remove the Authorization required tooltip on the authentication screen https://github.com/transloadit/uppy/issues/1425
-- [ ] @uppy/companion: investigate 423 and 500 issues with React Native + Url plugin when pause/resuming an upload
+- [x] @uppy/companion: investigate 423 and 500 issues with React Native + Url plugin when pause/resuming an upload
 - [ ] docs: add docs on locales — how to use from NPM and CDN
 - [ ] @uppy/transloadit: finish Transloadit-Client header on https://github.com/transloadit/uppy/tree/feature/transloadit-client
 - [ ] companion: reports an error at first sign in. we did a hotfix in https://github.com/transloadit/uppy/pull/1478#issuecomment-485937942 but need a proper fix for that (@ife). Also: what about changing the location of that tooltip? So legit errors also don't block buttons?

+ 4 - 70
README.md

@@ -65,7 +65,7 @@ $ npm install @uppy/core @uppy/dashboard @uppy/tus
 
 We recommend installing from npm and then using a module bundler such as [Webpack](https://webpack.js.org/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/).
 
-Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css), either to `<head>` of your HTML page or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
+Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css), either to `<head>` of your HTML page or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack.
 
 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.
 
@@ -73,10 +73,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly
 
 ```html
 <!-- 1. Add CSS to `<head>` -->
-<link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
+<link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
 
 <!-- 2. Add JS before the closing `</body>` -->
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
 
 <!-- 3. Initialize -->
 <div class="UppyDragDrop"></div>
@@ -163,7 +163,7 @@ If you're using Uppy via a script tag, you can load the polyfills from [JSDelivr
 ```html
 <script src="https://cdn.jsdelivr.net/npm/es6-promise@4.2.5/dist/es6-promise.auto.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.0.0/dist/fetch.umd.min.js"></script>
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
 ```
 
 ## FAQ
@@ -220,73 +220,7 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu
 <!--contributors-->
 ## Contributors
 
-[<img alt="arturi" src="https://avatars2.githubusercontent.com/u/1199054?v=4&s=117" width="117">](https://github.com/arturi) |[<img alt="goto-bus-stop" src="https://avatars1.githubusercontent.com/u/1006268?v=4&s=117" width="117">](https://github.com/goto-bus-stop) |[<img alt="kvz" src="https://avatars2.githubusercontent.com/u/26752?v=4&s=117" width="117">](https://github.com/kvz) |[<img alt="ifedapoolarewaju" src="https://avatars1.githubusercontent.com/u/8383781?v=4&s=117" width="117">](https://github.com/ifedapoolarewaju) |[<img alt="hedgerh" src="https://avatars2.githubusercontent.com/u/2524280?v=4&s=117" width="117">](https://github.com/hedgerh) |[<img alt="AJvanLoon" src="https://avatars0.githubusercontent.com/u/15716628?v=4&s=117" width="117">](https://github.com/AJvanLoon) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[arturi](https://github.com/arturi) |[goto-bus-stop](https://github.com/goto-bus-stop) |[kvz](https://github.com/kvz) |[ifedapoolarewaju](https://github.com/ifedapoolarewaju) |[hedgerh](https://github.com/hedgerh) |[AJvanLoon](https://github.com/AJvanLoon) |
 
-[<img alt="nqst" src="https://avatars0.githubusercontent.com/u/375537?v=4&s=117" width="117">](https://github.com/nqst) |[<img alt="kiloreux" src="https://avatars0.githubusercontent.com/u/6282557?v=4&s=117" width="117">](https://github.com/kiloreux) |[<img alt="samuelayo" src="https://avatars1.githubusercontent.com/u/14964486?v=4&s=117" width="117">](https://github.com/samuelayo) |[<img alt="sadovnychyi" src="https://avatars3.githubusercontent.com/u/193864?v=4&s=117" width="117">](https://github.com/sadovnychyi) |[<img alt="richardwillars" src="https://avatars3.githubusercontent.com/u/291004?v=4&s=117" width="117">](https://github.com/richardwillars) |[<img alt="zcallan" src="https://avatars0.githubusercontent.com/u/13760738?v=4&s=117" width="117">](https://github.com/zcallan) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[nqst](https://github.com/nqst) |[kiloreux](https://github.com/kiloreux) |[samuelayo](https://github.com/samuelayo) |[sadovnychyi](https://github.com/sadovnychyi) |[richardwillars](https://github.com/richardwillars) |[zcallan](https://github.com/zcallan) |
-
-[<img alt="lakesare" src="https://avatars1.githubusercontent.com/u/7578559?v=4&s=117" width="117">](https://github.com/lakesare) |[<img alt="wilkoklak" src="https://avatars1.githubusercontent.com/u/17553085?v=4&s=117" width="117">](https://github.com/wilkoklak) |[<img alt="oliverpool" src="https://avatars0.githubusercontent.com/u/3864879?v=4&s=117" width="117">](https://github.com/oliverpool) |[<img alt="mattes3" src="https://avatars2.githubusercontent.com/u/2496674?v=4&s=117" width="117">](https://github.com/mattes3) |[<img alt="janko" src="https://avatars2.githubusercontent.com/u/795488?v=4&s=117" width="117">](https://github.com/janko) |[<img alt="mcallistertyler95" src="https://avatars1.githubusercontent.com/u/14939210?v=4&s=117" width="117">](https://github.com/mcallistertyler95) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[lakesare](https://github.com/lakesare) |[wilkoklak](https://github.com/wilkoklak) |[oliverpool](https://github.com/oliverpool) |[mattes3](https://github.com/mattes3) |[janko](https://github.com/janko) |[mcallistertyler95](https://github.com/mcallistertyler95) |
-
-[<img alt="DJWassink" src="https://avatars3.githubusercontent.com/u/1822404?v=4&s=117" width="117">](https://github.com/DJWassink) |[<img alt="taoqf" src="https://avatars3.githubusercontent.com/u/15901911?v=4&s=117" width="117">](https://github.com/taoqf) |[<img alt="bertho-zero" src="https://avatars0.githubusercontent.com/u/8525267?v=4&s=117" width="117">](https://github.com/bertho-zero) |[<img alt="tranvansang" src="https://avatars1.githubusercontent.com/u/13043196?v=4&s=117" width="117">](https://github.com/tranvansang) |[<img alt="ap--" src="https://avatars1.githubusercontent.com/u/1463443?v=4&s=117" width="117">](https://github.com/ap--) |[<img alt="pauln" src="https://avatars3.githubusercontent.com/u/574359?v=4&s=117" width="117">](https://github.com/pauln) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[bertho-zero](https://github.com/bertho-zero) |[tranvansang](https://github.com/tranvansang) |[ap--](https://github.com/ap--) |[pauln](https://github.com/pauln) |
-
-[<img alt="toadkicker" src="https://avatars1.githubusercontent.com/u/523330?v=4&s=117" width="117">](https://github.com/toadkicker) |[<img alt="gavboulton" src="https://avatars0.githubusercontent.com/u/3900826?v=4&s=117" width="117">](https://github.com/gavboulton) |[<img alt="ogtfaber" src="https://avatars2.githubusercontent.com/u/320955?v=4&s=117" width="117">](https://github.com/ogtfaber) |[<img alt="mrbatista" src="https://avatars0.githubusercontent.com/u/6544817?v=4&s=117" width="117">](https://github.com/mrbatista) |[<img alt="yonahforst" src="https://avatars3.githubusercontent.com/u/1440796?v=4&s=117" width="117">](https://github.com/yonahforst) |[<img alt="tim-kos" src="https://avatars1.githubusercontent.com/u/15005?v=4&s=117" width="117">](https://github.com/tim-kos) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[toadkicker](https://github.com/toadkicker) |[gavboulton](https://github.com/gavboulton) |[ogtfaber](https://github.com/ogtfaber) |[mrbatista](https://github.com/mrbatista) |[yonahforst](https://github.com/yonahforst) |[tim-kos](https://github.com/tim-kos) |
-
-[<img alt="sunil-shrestha" src="https://avatars3.githubusercontent.com/u/2129058?v=4&s=117" width="117">](https://github.com/sunil-shrestha) |[<img alt="richartkeil" src="https://avatars0.githubusercontent.com/u/8680858?v=4&s=117" width="117">](https://github.com/richartkeil) |[<img alt="Burkes" src="https://avatars2.githubusercontent.com/u/9220052?v=4&s=117" width="117">](https://github.com/Burkes) |[<img alt="jedwood" src="https://avatars0.githubusercontent.com/u/369060?v=4&s=117" width="117">](https://github.com/jedwood) |[<img alt="pekala" src="https://avatars1.githubusercontent.com/u/4643658?v=4&s=117" width="117">](https://github.com/pekala) |[<img alt="Mactaivsh" src="https://avatars0.githubusercontent.com/u/12948083?v=4&s=117" width="117">](https://github.com/Mactaivsh) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[sunil-shrestha](https://github.com/sunil-shrestha) |[richartkeil](https://github.com/richartkeil) |[Burkes](https://github.com/Burkes) |[jedwood](https://github.com/jedwood) |[pekala](https://github.com/pekala) |[Mactaivsh](https://github.com/Mactaivsh) |
-
-[<img alt="manuelkiessling" src="https://avatars2.githubusercontent.com/u/206592?v=4&s=117" width="117">](https://github.com/manuelkiessling) |[<img alt="btrice" src="https://avatars2.githubusercontent.com/u/4358225?v=4&s=117" width="117">](https://github.com/btrice) |[<img alt="martiuslim" src="https://avatars2.githubusercontent.com/u/17944339?v=4&s=117" width="117">](https://github.com/martiuslim) |[<img alt="msand" src="https://avatars2.githubusercontent.com/u/1131362?v=4&s=117" width="117">](https://github.com/msand) |[<img alt="craigjennings11" src="https://avatars2.githubusercontent.com/u/1683368?v=4&s=117" width="117">](https://github.com/craigjennings11) |[<img alt="richmeij" src="https://avatars0.githubusercontent.com/u/9741858?v=4&s=117" width="117">](https://github.com/richmeij) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[manuelkiessling](https://github.com/manuelkiessling) |[btrice](https://github.com/btrice) |[martiuslim](https://github.com/martiuslim) |[msand](https://github.com/msand) |[craigjennings11](https://github.com/craigjennings11) |[richmeij](https://github.com/richmeij) |
-
-[<img alt="rosenfeld" src="https://avatars1.githubusercontent.com/u/32246?v=4&s=117" width="117">](https://github.com/rosenfeld) |[<img alt="ThomasG77" src="https://avatars2.githubusercontent.com/u/642120?v=4&s=117" width="117">](https://github.com/ThomasG77) |[<img alt="zhuangya" src="https://avatars2.githubusercontent.com/u/499038?v=4&s=117" width="117">](https://github.com/zhuangya) |[<img alt="allenfantasy" src="https://avatars1.githubusercontent.com/u/1009294?v=4&s=117" width="117">](https://github.com/allenfantasy) |[<img alt="fortrieb" src="https://avatars0.githubusercontent.com/u/4126707?v=4&s=117" width="117">](https://github.com/fortrieb) |[<img alt="muhammadInam" src="https://avatars1.githubusercontent.com/u/7801708?v=4&s=117" width="117">](https://github.com/muhammadInam) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[rosenfeld](https://github.com/rosenfeld) |[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) |[allenfantasy](https://github.com/allenfantasy) |[fortrieb](https://github.com/fortrieb) |[muhammadInam](https://github.com/muhammadInam) |
-
-[<img alt="Martin005" src="https://avatars0.githubusercontent.com/u/10096404?v=4&s=117" width="117">](https://github.com/Martin005) |[<img alt="ajschmidt8" src="https://avatars0.githubusercontent.com/u/7400326?v=4&s=117" width="117">](https://github.com/ajschmidt8) |[<img alt="tuoxiansp" src="https://avatars1.githubusercontent.com/u/3960056?v=4&s=117" width="117">](https://github.com/tuoxiansp) |[<img alt="amitport" src="https://avatars1.githubusercontent.com/u/1131991?v=4&s=117" width="117">](https://github.com/amitport) |[<img alt="functino" src="https://avatars0.githubusercontent.com/u/415498?v=4&s=117" width="117">](https://github.com/functino) |[<img alt="radarhere" src="https://avatars2.githubusercontent.com/u/3112309?v=4&s=117" width="117">](https://github.com/radarhere) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[Martin005](https://github.com/Martin005) |[ajschmidt8](https://github.com/ajschmidt8) |[tuoxiansp](https://github.com/tuoxiansp) |[amitport](https://github.com/amitport) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |
-
-[<img alt="arthurdenner" src="https://avatars0.githubusercontent.com/u/13774309?v=4&s=117" width="117">](https://github.com/arthurdenner) |[<img alt="bochkarev-artem" src="https://avatars2.githubusercontent.com/u/11025874?v=4&s=117" width="117">](https://github.com/bochkarev-artem) |[<img alt="azeemba" src="https://avatars0.githubusercontent.com/u/2160795?v=4&s=117" width="117">](https://github.com/azeemba) |[<img alt="bducharme" src="https://avatars2.githubusercontent.com/u/4173569?v=4&s=117" width="117">](https://github.com/bducharme) |[<img alt="chao" src="https://avatars2.githubusercontent.com/u/55872?v=4&s=117" width="117">](https://github.com/chao) |[<img alt="csprance" src="https://avatars0.githubusercontent.com/u/7902617?v=4&s=117" width="117">](https://github.com/csprance) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[arthurdenner](https://github.com/arthurdenner) |[bochkarev-artem](https://github.com/bochkarev-artem) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) |[chao](https://github.com/chao) |[csprance](https://github.com/csprance) |
-
-[<img alt="cbush06" src="https://avatars0.githubusercontent.com/u/15720146?v=4&s=117" width="117">](https://github.com/cbush06) |[<img alt="danmichaelo" src="https://avatars1.githubusercontent.com/u/434495?v=4&s=117" width="117">](https://github.com/danmichaelo) |[<img alt="mrboomer" src="https://avatars0.githubusercontent.com/u/5942912?v=4&s=117" width="117">](https://github.com/mrboomer) |[<img alt="davilima6" src="https://avatars0.githubusercontent.com/u/422130?v=4&s=117" width="117">](https://github.com/davilima6) |[<img alt="yoldar" src="https://avatars3.githubusercontent.com/u/1597578?v=4&s=117" width="117">](https://github.com/yoldar) |[<img alt="lowsprofile" src="https://avatars1.githubusercontent.com/u/11029687?v=4&s=117" width="117">](https://github.com/lowsprofile) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[cbush06](https://github.com/cbush06) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[davilima6](https://github.com/davilima6) |[yoldar](https://github.com/yoldar) |[lowsprofile](https://github.com/lowsprofile) |
-
-[<img alt="FWirtz" src="https://avatars1.githubusercontent.com/u/6052785?v=4&s=117" width="117">](https://github.com/FWirtz) |[<img alt="geoffappleford" src="https://avatars2.githubusercontent.com/u/731678?v=4&s=117" width="117">](https://github.com/geoffappleford) |[<img alt="gjungb" src="https://avatars0.githubusercontent.com/u/3391068?v=4&s=117" width="117">](https://github.com/gjungb) |[<img alt="HughbertD" src="https://avatars0.githubusercontent.com/u/1580021?v=4&s=117" width="117">](https://github.com/HughbertD) |[<img alt="JacobMGEvans" src="https://avatars1.githubusercontent.com/u/27247160?v=4&s=117" width="117">](https://github.com/JacobMGEvans) |[<img alt="jcjmcclean" src="https://avatars3.githubusercontent.com/u/1822574?v=4&s=117" width="117">](https://github.com/jcjmcclean) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[FWirtz](https://github.com/FWirtz) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[HughbertD](https://github.com/HughbertD) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jcjmcclean](https://github.com/jcjmcclean) |
-
-[<img alt="vith" src="https://avatars1.githubusercontent.com/u/3265539?v=4&s=117" width="117">](https://github.com/vith) |[<img alt="jessica-coursera" src="https://avatars1.githubusercontent.com/u/35155465?v=4&s=117" width="117">](https://github.com/jessica-coursera) |[<img alt="dargmuesli" src="https://avatars2.githubusercontent.com/u/4778485?v=4&s=117" width="117">](https://github.com/dargmuesli) |[<img alt="jderrough" src="https://avatars3.githubusercontent.com/u/1108358?v=4&s=117" width="117">](https://github.com/jderrough) |[<img alt="firesharkstudios" src="https://avatars1.githubusercontent.com/u/17069637?v=4&s=117" width="117">](https://github.com/firesharkstudios) |[<img alt="kyleparisi" src="https://avatars0.githubusercontent.com/u/1286753?v=4&s=117" width="117">](https://github.com/kyleparisi) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[dargmuesli](https://github.com/dargmuesli) |[jderrough](https://github.com/jderrough) |[firesharkstudios](https://github.com/firesharkstudios) |[kyleparisi](https://github.com/kyleparisi) |
-
-[<img alt="dviry" src="https://avatars3.githubusercontent.com/u/1230260?v=4&s=117" width="117">](https://github.com/dviry) |[<img alt="leods92" src="https://avatars0.githubusercontent.com/u/879395?v=4&s=117" width="117">](https://github.com/leods92) |[<img alt="lucaperret" src="https://avatars1.githubusercontent.com/u/1887122?v=4&s=117" width="117">](https://github.com/lucaperret) |[<img alt="mperrando" src="https://avatars2.githubusercontent.com/u/525572?v=4&s=117" width="117">](https://github.com/mperrando) |[<img alt="mnafees" src="https://avatars1.githubusercontent.com/u/1763885?v=4&s=117" width="117">](https://github.com/mnafees) |[<img alt="phillipalexander" src="https://avatars0.githubusercontent.com/u/1577682?v=4&s=117" width="117">](https://github.com/phillipalexander) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[dviry](https://github.com/dviry) |[leods92](https://github.com/leods92) |[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[mnafees](https://github.com/mnafees) |[phillipalexander](https://github.com/phillipalexander) |
-
-[<img alt="luarmr" src="https://avatars3.githubusercontent.com/u/817416?v=4&s=117" width="117">](https://github.com/luarmr) |[<img alt="phobos101" src="https://avatars2.githubusercontent.com/u/7114944?v=4&s=117" width="117">](https://github.com/phobos101) |[<img alt="fortunto2" src="https://avatars1.githubusercontent.com/u/1236751?v=4&s=117" width="117">](https://github.com/fortunto2) |[<img alt="sergei-zelinsky" src="https://avatars2.githubusercontent.com/u/19428086?v=4&s=117" width="117">](https://github.com/sergei-zelinsky) |[<img alt="tomsaleeba" src="https://avatars0.githubusercontent.com/u/1773838?v=4&s=117" width="117">](https://github.com/tomsaleeba) |[<img alt="vially" src="https://avatars1.githubusercontent.com/u/433598?v=4&s=117" width="117">](https://github.com/vially) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) |[fortunto2](https://github.com/fortunto2) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[tomsaleeba](https://github.com/tomsaleeba) |[vially](https://github.com/vially) |
-
-[<img alt="eltercero" src="https://avatars0.githubusercontent.com/u/545235?v=4&s=117" width="117">](https://github.com/eltercero) |[<img alt="xhocquet" src="https://avatars2.githubusercontent.com/u/8116516?v=4&s=117" width="117">](https://github.com/xhocquet) |[<img alt="avalla" src="https://avatars1.githubusercontent.com/u/986614?v=4&s=117" width="117">](https://github.com/avalla) |[<img alt="c0b41" src="https://avatars1.githubusercontent.com/u/2834954?v=4&s=117" width="117">](https://github.com/c0b41) |[<img alt="canvasbh" src="https://avatars3.githubusercontent.com/u/44477734?v=4&s=117" width="117">](https://github.com/canvasbh) |[<img alt="craigcbrunner" src="https://avatars3.githubusercontent.com/u/2780521?v=4&s=117" width="117">](https://github.com/craigcbrunner) |
-:---: |:---: |:---: |:---: |:---: |:---: |
-[eltercero](https://github.com/eltercero) |[xhocquet](https://github.com/xhocquet) |[avalla](https://github.com/avalla) |[c0b41](https://github.com/c0b41) |[canvasbh](https://github.com/canvasbh) |[craigcbrunner](https://github.com/craigcbrunner) |
-
-[<img alt="franckl" src="https://avatars0.githubusercontent.com/u/3875803?v=4&s=117" width="117">](https://github.com/franckl) |[<img alt="ninesalt" src="https://avatars2.githubusercontent.com/u/7952255?v=4&s=117" width="117">](https://github.com/ninesalt) |[<img alt="luntta" src="https://avatars0.githubusercontent.com/u/14221637?v=4&s=117" width="117">](https://github.com/luntta) |[<img alt="rhymes" src="https://avatars3.githubusercontent.com/u/146201?v=4&s=117" width="117">](https://github.com/rhymes) |[<img alt="asmt3" src="https://avatars1.githubusercontent.com/u/1777709?v=4&s=117" width="117">](https://github.com/asmt3) |
-:---: |:---: |:---: |:---: |:---: |
-[franckl](https://github.com/franckl) |[ninesalt](https://github.com/ninesalt) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[asmt3](https://github.com/asmt3) |
 <!--/contributors-->
 
 ## Software

+ 1 - 1
bin/upload-to-cdn.sh

@@ -8,7 +8,7 @@
 #  - Checks if a tag is being built (on Travis - otherwise opts to continue execution regardless)
 #  - Installs AWS CLI if needed
 #  - Assumed a fully built uppy is in root dir (unless a specific tag was specified, then it's fetched from npm)
-#  - Runs npm pack, and stores files to e.g. https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.css
+#  - Runs npm pack, and stores files to e.g. https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.css
 #  - Uses local package by default, if [version] argument was specified, takes package from npm
 #
 # Run as:

+ 2 - 2
examples/cdn-example/index.html

@@ -4,11 +4,11 @@
     <title></title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <button id="uppyModalOpener">Open Modal</button>
-    <script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
     <script>
       const uppy = Uppy.Core({debug: true, autoProceed: false})
         .use(Uppy.Dashboard, { trigger: '#uppyModalOpener' })

+ 1 - 1
examples/transloadit-textarea/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.css">
+    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.css">
     <style>
       body {
         font-family: Roboto, Open Sans;

+ 2 - 2
examples/uppy-with-companion/client/index.html

@@ -4,11 +4,11 @@
     <title></title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <button id="uppyModalOpener">Open Modal</button>
-    <script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
     <script>
       const uppy = Uppy.Core({debug: true, autoProceed: false})
         .use(Uppy.Dashboard, { trigger: '#uppyModalOpener' })

+ 4 - 4
packages/@uppy/aws-s3-multipart/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/aws-s3-multipart",
   "description": "Upload to Amazon S3 with Uppy and S3's Multipart upload strategy",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -23,14 +23,14 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
+    "@uppy/companion-client": "1.0.0",
     "@uppy/utils": "0.30.5",
     "resolve-url": "^0.2.1"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 5 - 5
packages/@uppy/aws-s3/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/aws-s3",
   "description": "Upload to Amazon S3 with Uppy",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -22,15 +22,15 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
+    "@uppy/companion-client": "1.0.0",
     "@uppy/utils": "0.30.5",
-    "@uppy/xhr-upload": "0.30.5",
+    "@uppy/xhr-upload": "1.0.0",
     "resolve-url": "^0.2.1"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 1 - 1
packages/@uppy/companion-client/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/companion-client",
   "description": "Client library for communication with Companion. Intended for use in Uppy plugins.",
-  "version": "0.28.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",

+ 1 - 1
packages/@uppy/companion/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@uppy/companion",
-  "version": "0.17.5",
+  "version": "1.0.0",
   "description": "OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:",
   "main": "lib/uppy.js",
   "types": "types/index.d.ts",

+ 48 - 29
packages/@uppy/companion/src/server/Uploader.js

@@ -1,5 +1,4 @@
 const fs = require('fs')
-const stream = require('stream')
 const path = require('path')
 const tus = require('tus-js-client')
 const uuid = require('uuid')
@@ -51,15 +50,33 @@ class Uploader {
     this.options.path = `${this.options.pathPrefix}/${Uploader.FILE_NAME_PREFIX}-${this.token}`
     this.streamsEnded = false
     this.duplexStream = null
-    if (this.options.protocol === PROTOCOLS.tus) {
-      this.duplexStream = new stream.PassThrough()
-        .on('error', (err) => logger.error(`${this.shortToken} ${err}`, 'uploader.duplex.error'))
-    }
+    // @TODO disabling parallel uploads and downloads for now
+    // if (this.options.protocol === PROTOCOLS.tus) {
+    //   this.duplexStream = new stream.PassThrough()
+    //     .on('error', (err) => logger.error(`${this.shortToken} ${err}`, 'uploader.duplex.error'))
+    // }
     this.writeStream = fs.createWriteStream(this.options.path, { mode: 0o666 }) // no executable files
       .on('error', (err) => logger.error(`${this.shortToken} ${err}`, 'uploader.write.error'))
     /** @type {number} */
     this.emittedProgress = 0
     this.storage = options.storage
+    this._paused = false
+
+    if (this.options.protocol === PROTOCOLS.tus) {
+      emitter().on(`pause:${this.token}`, () => {
+        this._paused = true
+        if (this.tus) {
+          this.tus.abort()
+        }
+      })
+
+      emitter().on(`resume:${this.token}`, () => {
+        this._paused = false
+        if (this.tus) {
+          this.tus.start()
+        }
+      })
+    }
   }
 
   /**
@@ -150,25 +167,30 @@ class Uploader {
         if (this.options.endpoint && protocol === PROTOCOLS.multipart) {
           this.uploadMultipart()
         }
+
+        if (protocol === PROTOCOLS.tus && !this.tus) {
+          return this.uploadTus()
+        }
       })
 
       return this.endStreams()
     }
 
-    this.writeToStreams(chunk, () => {
+    this.writeStream.write(chunk, () => {
       logger.debug(`${this.shortToken} ${this.bytesWritten} bytes`, 'uploader.download.progress')
-      if (protocol === PROTOCOLS.multipart) {
+      if (protocol === PROTOCOLS.multipart || protocol === PROTOCOLS.tus) {
         return this.emitIllusiveProgress()
       }
 
       if (protocol === PROTOCOLS.s3Multipart && !this.s3Upload) {
         return this.uploadS3()
       }
-      if (!this.options.endpoint) return
+      // @TODO disabling parallel uploads and downloads for now
+      // if (!this.options.endpoint) return
 
-      if (protocol === PROTOCOLS.tus && !this.tus) {
-        return this.uploadTus()
-      }
+      // if (protocol === PROTOCOLS.tus && !this.tus) {
+      //   return this.uploadTus()
+      // }
     })
   }
 
@@ -223,7 +245,14 @@ class Uploader {
    * @param {number=} bytesUploaded the bytes actually Uploaded so far
    */
   emitIllusiveProgress (bytesUploaded) {
-    const bytesTotal = this.streamsEnded ? this.bytesWritten : this.options.size
+    if (this._paused) {
+      return
+    }
+
+    let bytesTotal = this.streamsEnded ? this.bytesWritten : this.options.size
+    if (!this.streamsEnded) {
+      bytesTotal = Math.max(bytesTotal, this.bytesWritten)
+    }
     bytesUploaded = bytesUploaded || 0
     // for a 10MB file, 10MB of download will account for 5MB upload progress
     // and 10MB of actual upload will account for the other 5MB upload progress.
@@ -303,23 +332,19 @@ class Uploader {
     const fname = path.basename(this.options.path)
     const ftype = this.options.metadata.type
     const metadata = Object.assign({ filename: fname, filetype: ftype }, this.options.metadata || {})
-    const file = this.duplexStream
+    const file = fs.createReadStream(this.options.path)
     const uploader = this
-    const oneGB = 1024 * 1024 * 1024  // 1 GB
-    // chunk size can't be infinity with deferred length.
-    // cap value to 1GB to avoid buffer allocation error (RangeError)
-    const chunkSize = Math.min(this.options.size || oneGB, oneGB)
 
     // @ts-ignore
     this.tus = new tus.Upload(file, {
       endpoint: this.options.endpoint,
       uploadUrl: this.options.uploadUrl,
       // @ts-ignore
-      uploadLengthDeferred: true,
+      uploadLengthDeferred: false,
       resume: true,
-      uploadSize: null,
+      retryDelays: [0, 1000, 3000, 5000],
+      uploadSize: this.bytesWritten,
       metadata,
-      chunkSize,
       /**
        *
        * @param {Error} error
@@ -334,7 +359,7 @@ class Uploader {
        * @param {number} bytesTotal
        */
       onProgress (bytesUploaded, bytesTotal) {
-        uploader.emitProgress(bytesUploaded, bytesTotal)
+        uploader.emitIllusiveProgress(bytesUploaded)
       },
       onSuccess () {
         uploader.emitSuccess(uploader.tus.url)
@@ -342,15 +367,9 @@ class Uploader {
       }
     })
 
-    this.tus.start()
-
-    emitter().on(`pause:${this.token}`, () => {
-      this.tus.abort()
-    })
-
-    emitter().on(`resume:${this.token}`, () => {
+    if (!this._paused) {
       this.tus.start()
-    })
+    }
   }
 
   uploadMultipart () {

+ 1 - 1
packages/@uppy/core/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/core",
   "description": "Core module for the 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": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",

+ 7 - 1
packages/@uppy/core/src/index.js

@@ -699,10 +699,16 @@ class Uppy {
       uploadedSize += averageSize * (file.progress.percentage || 0)
     })
 
-    const totalProgress = totalSize === 0
+    let totalProgress = totalSize === 0
       ? 0
       : Math.round(uploadedSize / totalSize * 100)
 
+    // hot fix, because:
+    // uploadedSize ended up larger than totalSize, resulting in 1325% total
+    if (totalProgress > 100) {
+      totalProgress = 100
+    }
+
     this.setState({ totalProgress })
     this.emit('progress', totalProgress)
   }

+ 8 - 8
packages/@uppy/dashboard/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/dashboard",
   "description": "Universal UI plugin for Uppy.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -22,10 +22,10 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/informer": "0.30.5",
-    "@uppy/provider-views": "0.30.5",
-    "@uppy/status-bar": "0.30.5",
-    "@uppy/thumbnail-generator": "0.30.5",
+    "@uppy/informer": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
+    "@uppy/status-bar": "1.0.0",
+    "@uppy/thumbnail-generator": "1.0.0",
     "@uppy/utils": "0.30.5",
     "classnames": "^2.2.6",
     "cuid": "^2.1.1",
@@ -37,10 +37,10 @@
     "resize-observer-polyfill": "^1.5.0"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5",
-    "@uppy/google-drive": "0.30.5"
+    "@uppy/core": "1.0.0",
+    "@uppy/google-drive": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/drag-drop/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/drag-drop",
   "description": "Droppable zone UI for Uppy. Drag and drop files into it to upload.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -30,9 +30,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 5 - 5
packages/@uppy/dropbox/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/dropbox",
   "description": "Import files from Dropbox, into Uppy.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -20,15 +20,15 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
-    "@uppy/provider-views": "0.30.5",
+    "@uppy/companion-client": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
     "@uppy/utils": "0.30.5",
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/file-input/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/file-input",
   "description": "Simple UI of a file input button that works with Uppy right out of the box",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -26,9 +26,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/form/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/form",
   "description": "Connect Uppy to an existing HTML <form>.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -24,9 +24,9 @@
     "get-form-data": "^2.0.0"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/golden-retriever/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/golden-retriever",
   "description": "The GoldenRetriever Uppy plugin saves selected files in browser cache to seamlessly resume uploding after browser crash or accidentally closed tab",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -27,9 +27,9 @@
     "prettier-bytes": "^1.0.4"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 5 - 5
packages/@uppy/google-drive/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/google-drive",
   "description": "The Google Drive plugin for Uppy lets users import files from their Google Drive account",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -21,15 +21,15 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
-    "@uppy/provider-views": "0.30.5",
+    "@uppy/companion-client": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
     "@uppy/utils": "0.30.5",
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/informer/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/informer",
   "description": "A notification and error pop-up bar for Uppy.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -27,9 +27,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 5 - 5
packages/@uppy/instagram/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/instagram",
   "description": "Import photos and videos from Instagram, into Uppy.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -23,15 +23,15 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
-    "@uppy/provider-views": "0.30.5",
+    "@uppy/companion-client": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
     "@uppy/utils": "0.30.5",
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 1 - 1
packages/@uppy/locales/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/locales",
   "description": "Uppy language packs",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "keywords": [
     "uppy",

+ 3 - 3
packages/@uppy/progress-bar/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/progress-bar",
   "description": "A progress bar UI for Uppy",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -27,9 +27,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/provider-views/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/provider-views",
   "description": "View library for Uppy remote provider plugins.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -24,9 +24,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 7 - 7
packages/@uppy/react/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/react",
   "description": "React component wrappers around Uppy's official UI plugins.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "index.js",
   "module": "index.mjs",
@@ -22,17 +22,17 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/dashboard": "0.30.5",
-    "@uppy/drag-drop": "0.30.5",
-    "@uppy/progress-bar": "0.30.5",
-    "@uppy/status-bar": "0.30.5",
+    "@uppy/dashboard": "1.0.0",
+    "@uppy/drag-drop": "1.0.0",
+    "@uppy/progress-bar": "1.0.0",
+    "@uppy/status-bar": "1.0.0",
     "@uppy/utils": "0.30.5",
     "prop-types": "^15.6.1"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/redux-dev-tools/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/redux-dev-tools",
   "description": "Redux developer tools plugin for Uppy that simply syncs Uppy’s state with redux-devtools browser or JS extensions, and allows for basic time travel",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -21,9 +21,9 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 11 - 11
packages/@uppy/robodog/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/robodog",
   "description": "Transloadit SDK for browsers based on Uppy",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "jsnext:main": "src/index.js",
@@ -28,17 +28,17 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/core": "0.30.5",
-    "@uppy/dashboard": "0.30.5",
-    "@uppy/dropbox": "0.30.5",
-    "@uppy/form": "0.30.5",
-    "@uppy/google-drive": "0.30.5",
-    "@uppy/instagram": "0.30.5",
-    "@uppy/status-bar": "0.30.5",
-    "@uppy/transloadit": "0.30.5",
-    "@uppy/url": "0.30.5",
+    "@uppy/core": "1.0.0",
+    "@uppy/dashboard": "1.0.0",
+    "@uppy/dropbox": "1.0.0",
+    "@uppy/form": "1.0.0",
+    "@uppy/google-drive": "1.0.0",
+    "@uppy/instagram": "1.0.0",
+    "@uppy/status-bar": "1.0.0",
+    "@uppy/transloadit": "1.0.0",
+    "@uppy/url": "1.0.0",
     "@uppy/utils": "0.30.5",
-    "@uppy/webcam": "0.30.5",
+    "@uppy/webcam": "1.0.0",
     "es6-promise": "4.2.5",
     "whatwg-fetch": "3.0.0"
   }

+ 3 - 3
packages/@uppy/status-bar/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/status-bar",
   "description": "A progress bar for Uppy, with many bells and whistles.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -33,9 +33,9 @@
     "prettier-bytes": "^1.0.4"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/thumbnail-generator/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/thumbnail-generator",
   "description": "Uppy plugin that generates small previews of images to show on your upload UI.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -25,10 +25,10 @@
     "@uppy/utils": "0.30.5"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5",
+    "@uppy/core": "1.0.0",
     "namespace-emitter": "^2.0.1"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 6 - 6
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": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -27,17 +27,17 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
-    "@uppy/provider-views": "0.30.5",
-    "@uppy/tus": "0.30.5",
+    "@uppy/companion-client": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
+    "@uppy/tus": "1.0.0",
     "@uppy/utils": "0.30.5",
     "component-emitter": "^1.2.1",
     "socket.io-client": "^2.1.1"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 4 - 4
packages/@uppy/tus/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/tus",
   "description": "Resumable uploads for Uppy using Tus.io",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -22,14 +22,14 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
+    "@uppy/companion-client": "1.0.0",
     "@uppy/utils": "0.30.5",
     "tus-js-client": "^1.8.0-0"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 4 - 4
packages/@uppy/url/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/url",
   "description": "The Url plugin lets users import files from the Internet. Paste any URL and it’ll be added!",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -22,14 +22,14 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
+    "@uppy/companion-client": "1.0.0",
     "@uppy/utils": "0.30.5",
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 3 - 3
packages/@uppy/webcam/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/webcam",
   "description": "Uppy plugin that takes photos or records videos using the device's camera.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "style": "dist/style.min.css",
@@ -30,9 +30,9 @@
     "preact": "^8.2.9"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 4 - 4
packages/@uppy/xhr-upload/package.json

@@ -1,7 +1,7 @@
 {
   "name": "@uppy/xhr-upload",
   "description": "Plain and simple classic HTML multipart form uploads with Uppy, as well as uploads using the HTTP PUT method.",
-  "version": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "lib/index.js",
   "types": "types/index.d.ts",
@@ -24,14 +24,14 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/companion-client": "0.28.5",
+    "@uppy/companion-client": "1.0.0",
     "@uppy/utils": "0.30.5",
     "cuid": "^2.1.1"
   },
   "devDependencies": {
-    "@uppy/core": "0.30.5"
+    "@uppy/core": "1.0.0"
   },
   "peerDependencies": {
-    "@uppy/core": "^0.30.0"
+    "@uppy/core": "^1.0.0"
   }
 }

+ 24 - 24
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": "0.30.5",
+  "version": "1.0.0",
   "license": "MIT",
   "main": "index.js",
   "module": "index.mjs",
@@ -30,31 +30,31 @@
     "url": "git+https://github.com/transloadit/uppy.git"
   },
   "dependencies": {
-    "@uppy/aws-s3": "0.30.5",
-    "@uppy/aws-s3-multipart": "0.30.5",
-    "@uppy/companion-client": "0.28.5",
-    "@uppy/core": "0.30.5",
-    "@uppy/dashboard": "0.30.5",
-    "@uppy/drag-drop": "0.30.5",
-    "@uppy/dropbox": "0.30.5",
-    "@uppy/file-input": "0.30.5",
-    "@uppy/form": "0.30.5",
-    "@uppy/golden-retriever": "0.30.5",
-    "@uppy/google-drive": "0.30.5",
-    "@uppy/informer": "0.30.5",
-    "@uppy/instagram": "0.30.5",
-    "@uppy/progress-bar": "0.30.5",
-    "@uppy/provider-views": "0.30.5",
-    "@uppy/redux-dev-tools": "0.30.5",
-    "@uppy/status-bar": "0.30.5",
+    "@uppy/aws-s3": "1.0.0",
+    "@uppy/aws-s3-multipart": "1.0.0",
+    "@uppy/companion-client": "1.0.0",
+    "@uppy/core": "1.0.0",
+    "@uppy/dashboard": "1.0.0",
+    "@uppy/drag-drop": "1.0.0",
+    "@uppy/dropbox": "1.0.0",
+    "@uppy/file-input": "1.0.0",
+    "@uppy/form": "1.0.0",
+    "@uppy/golden-retriever": "1.0.0",
+    "@uppy/google-drive": "1.0.0",
+    "@uppy/informer": "1.0.0",
+    "@uppy/instagram": "1.0.0",
+    "@uppy/progress-bar": "1.0.0",
+    "@uppy/provider-views": "1.0.0",
+    "@uppy/redux-dev-tools": "1.0.0",
+    "@uppy/status-bar": "1.0.0",
     "@uppy/store-default": "0.28.3",
     "@uppy/store-redux": "0.28.3",
-    "@uppy/thumbnail-generator": "0.30.5",
-    "@uppy/transloadit": "0.30.5",
-    "@uppy/tus": "0.30.5",
-    "@uppy/url": "0.30.5",
-    "@uppy/webcam": "0.30.5",
-    "@uppy/xhr-upload": "0.30.5"
+    "@uppy/thumbnail-generator": "1.0.0",
+    "@uppy/transloadit": "1.0.0",
+    "@uppy/tus": "1.0.0",
+    "@uppy/url": "1.0.0",
+    "@uppy/webcam": "1.0.0",
+    "@uppy/xhr-upload": "1.0.0"
   },
   "devDependencies": {
     "es6-promise": "4.2.5",

+ 5 - 2
website/_config.yml

@@ -13,10 +13,13 @@ logo_large: /images/logos/uppy-dog-full.svg
 logo_medium: /images/logos/uppy-logo-2019.svg
 logo_icon: /images/logos/uppy-dog-head-arrow.png
 description: >
-    Uppy fetches files locally and from remote places like Dropbox or Instagram. With its seamless integration, reliability and ease of use, Uppy is truly man’s best friend in file uploading.
+  Uppy fetches files locally and from remote places like Dropbox or Instagram. 
+  With its seamless integration, reliability and ease of use, 
+  Uppy is truly your best friend in file uploading.
 descriptionWho: >
   Uppy is brought to you by the people
-  behind <a href="https://transloadit.com">Transloadit</a>, and as such will have first class support
+  behind <a href="https://transloadit.com">Transloadit</a>, and as such will 
+  have first class support
   for adding their uploading and encoding backend, but this is opt-in,
   and you can just as easily roll your own.
 author: Transloadit

+ 128 - 0
website/src/_posts/2019-04-1.0.md

@@ -0,0 +1,128 @@
+---
+title: "Uppy 1.0: Your best friend in file uploading"
+date: 2019-04-25
+author: arturi
+image: "https://uppy.io/images/blog/1.0/uppy-dashboard-1.png"
+published: true
+---
+
+Today, after 3 years of development, we are launching version 1.0 of Uppy, our file uploader for web browsers.
+
+<img src="/images/blog/1.0/uppy-dashboard-1.png">
+
+## A little history
+
+Three years ago, Transloadit was ready to replace their jQuery-based file uploading & processing plugin for browsers with something more modern. They posted a [job ad](https://transloadit.com/jobs/2015-10-front-end-developer/) in search for people to build it:
+
+> In general, we’re looking for polished, well tested, carefully crafted products that are delightful to work with and use. So for this job it’s not only important that you know JavaScript, but also how to make things look stunning and work well for end users.
+>
+> At your disposal are time, focus, and the core team ready to provide feedback, guidance, and anything else you need.
+
+Shortly after, I saw a retweet of this vacancy come across my time line and I decided to apply. That, in a nutshell, is how I got involved with Uppy in the earliest stages of the project.
+
+Initially, the idea was to build a proprietary uploader that would work exclusively with Transloadit’s commercial service, but we quickly turned around on it. We felt our version of a file uploader could have a real impact if we made it more widely available. So, just like Transloadit had done before with [Tus](https://tus.io/), we decided to make Uppy an open-source solution — free for anyone to use and hack on. Transloadit support became an optional plugin.
+
+Three years, [16.000 stargazers](https://github.com/transloadit/uppy/stargazers), getting featured on [Smashing Magazine](https://www.smashingmagazine.com/the-smashing-newsletter/smashing-newsletter-issue-197/), [JavaScript Daily](https://twitter.com/JavaScriptDaily/status/950348390268919809), [Product Hunt](https://www.producthunt.com/posts/uppy-io), and [SurviveJS](https://survivejs.com/blog/uppy-interview/), and a thriving community later — and we could not be happier to finally launch Uppy 1.0!
+
+<!--more-->
+
+## Why build Uppy in the first place?
+
+We occasionally get asked why we would even need anything beyond `<input type="file">`. Why bring JS into this at all? The truth is, for many cases, `<input type="file">` is fine.
+
+Sometimes, however, you might like to add a drag-and-drop surface with file previews or upload progress reporting that works well across browsers. Webcam support could be useful. Other than that, picking files directly from your Instagram and Dropbox — without first passing through your mobile phone — can save a lot of bandwidth and battery life (uploads with Uppy and Companion happen server-to-server). In all those cases, you’ll need something more than a simple `<input type="file">` command.
+
+<img src="/images/blog/1.0/uppy-dashboard-2.png">
+
+Then there’s also the issue of large files, where resumability is essential. It’s basically unacceptable in this day and age to still have to restart your upload from scratch, just because your WiFi had a hiccup. That’s why Uppy uses Tus, the open protocol for resumable file uploading.
+
+All these things significantly improve the user experience to the point where more files actually make it to your platform, and less users rage-quit and close the tab. These things become important when uploading is a central aspect of your website or app. Uppy can also be deployed with nothing but a JS tag, using an existing `<form>` for fallback (to support IE6! :smile:), and your Apache/Nginx server.
+
+## Building a team to create Uppy
+
+The Uppy team first consisted of [myself](https://github.com/arturi) and [Harry](https://github.com/hedgerh). Since I moved to New York for a while, with most of the team based in Europe, we got used to having some very early (or late) calls with significant time differences.
+
+I was mostly working on the frontend and building what is known today as the [Dashboard](/examples/dashboard/) — the fully-featured and most commonly used Uppy plugin. Harry took on the first version of what was then called Uppy Server (now Companion) — responsible for picking files from Google Drive, Instagram, remote Urls, etc.
+
+In 2016, the Transloadit team had a meetup in Amsterdam, where I ended up being [present](https://mobile.twitter.com/arturi/status/701394760796229632) in a most unusual way (in the center):
+
+<img src="/images/blog/1.0/amsterdam-team-meetup.jpg">
+
+Later that year, [Ife](https://github.com/ifedapoolarewaju) joined the Uppy team as well and took over all Companion work.
+
+Building all of the intended Uppy features properly took a lot of time. So, two years after landing the project at Transloadit, I was [writing a job ad post myself](https://transloadit.com/jobs/2017-02-open-source-frontend-dev/) as Uppy was starting to take on serious proportions. That’s where [Renée](https://github.com/goto-bus-stop) joined the team (funny story — we met through collaborating on GitHub on Choo and Yo-Yo libraries) to help us with Uppy React components, Redux integration, the Golden Retriever plugin and many more cool features.
+
+Around that time, [Alex](https://zaytsev.io/) also joined in to advise us on the UI design, completing the Uppy team as it still stands today.
+
+In the summer of 2017, the Transloadit team had another meeting. This time in Berlin, where we worked on the [Golden Retriever](/docs/golden-retriever/) plugin that helps recover files after browser crashes. We also played Mario Kart (I lost, despite all the practice!) and dressed up as characters from the game:
+
+<img src="/images/blog/1.0/uppy-team-kong.jpg">
+
+Read more [about Golden Retriever and that team meetup](https://uppy.io/blog/2017/07/golden-retriever/). Golden Retriever got good press on Reddit and Hacker News because it goes above and beyond to make things absurdly reliable. In the demo video, you see us `kill -9` our browser, restart, and the upload just picks right up where it left off. A first!
+
+## Challenge accepted: only 30 days to liftoff
+
+We had been postponing the 1.0 release for quite some time. There’s always just one more feature you’d like to add or another bug you want to fix, before calling something ready for a 1.0 release. Truth be told, Uppy has been [used in production](https://github.com/transloadit/uppy#used-by) for a while already, and even though we iterate and change things frequently, the API had mostly stabilized.
+
+So, about a month ago, we decided to pull the trigger and [announced an Uppy Month](https://uppy.io/blog/2019/03/liftoff-01/) within Transloadit. This meant that all team members, including those not working primarily on Uppy — the Tus core team, our SDK teams, as well as our infra and API engineers, designers, content writers, and the founders themselves — all chipped in and did their part to ensure liftoff in thirty days. We also asked [Evgenia](http://github.com/lakesare) to join us for the month to lend a hand with frontend work. Every week, we had a call where we looked at the Uppy 1.0 project board and talked about our progress:
+
+<img src="/images/blog/30daystoliftoff/15-dashboard.png">
+
+Here are some highlights of what we’ve managed to deliver during one month of Everything Uppy:
+
+- A new Uppy website design.
+- [Localization support and language packs](https://github.com/transloadit/uppy/pull/1443) for Russian, German, Dutch and French (with more coming from the community). [Kevin](https://github.com/kvz) and I wrote a script that loops through all Uppy plugins in the repo and generates one canonical `en_US` that can be used as a basis for other translations. The script even checks for missing strings accross all translations, so you know which ones to update.
+- [Drag and Drop in the Dashboard](https://github.com/transloadit/uppy/pull/1440), being an important part of Uppy, has been significantly improved with support for pasting files and links from both the browser and the device. So you can now, say, drag a link or an image from a different tab to Uppy!
+- [Basic React Native support (Beta)](https://github.com/transloadit/uppy/pull/988): Uppy runs in a React Native environment, we have an example with resumable uploads via tus, and `@uppy/react-native` Expo-component support for picking images, videos, documents, and files from remote URLs with the help of Companion.
+- [Design facelift](https://github.com/transloadit/uppy/pull/1442): the Dashboard UI has been significantly improved in the past days: new icons have been added, as well as typography polishing, better color organization, enlarged clickable areas, and more.
+- Many accessibility issues uncovered.
+- [Robodog gained support for an inline Dashboard](https://github.com/transloadit/uppy/pull/1450).
+- [The documentation structure has been reworked](https://github.com/transloadit/uppy/pull/1405).
+- [Transloadit Assemblies can now be properly canceled](https://github.com/transloadit/uppy/pull/1431).
+- [Upload progress is reported more accurately with XHR-upload and Companion](https://github.com/transloadit/uppy/pull/1454).
+- [Upload progress is improved in general](https://github.com/transloadit/uppy/pull/1376).
+- [npm scripts have been refactored](https://github.com/transloadit/uppy/pull/1392) — yes, that’s important!
+- And craziest of all: our content team has been on a roll and [released a post *every day*](https://uppy.io/blog/2019/03/liftoff-01/) for the past thirty days to keep you updated on our day-to-day progress.
+
+## Which features made it into 1.0? And which didn’t (yet)?
+
+Uppy 1.0 feature list:
+
+- Sleek user interface
+- Lightweight and easy on dependencies
+- A small core with modular architecture: everything is a plugin
+- Uses modern JavaScript with transpiled ES5 versions available in `lib`, and minified versions for direct use by browsers in `dist`
+- Usable as a bundle straight from a CDN, as well as a module to import
+- Resumable file uploads via the open Tus standard
+- Direct uploads to S3
+- Webcam support
+- Picking files from Dropbox, Google Drive and Instagram, while letting servers do the heavy lifting via Companion
+- Robust: retries for all-the-things
+- Built with accessibility in mind (not perfect yet, but we constantly improve)
+- File recovery (after a browser crash or accidental navigation) via Golden Retriever
+- Locale support: easily switch languages or supply your own copy
+- Compatible with React (React Native in beta)
+- Works great on mobile
+- Works great with Transloadit, works great without
+
+We also left two features “behind”:
+
+> Offering sugared shortcuts for novice users (presets)
+
+We felt that Uppy is straightforward enough to use, and presets could end up making this less clear. Robodog does offer less “boilerplatey” integrations, but this was done as a wrapper instead of a preset.
+
+> Themable UI with a beautiful default
+
+Instead of going for `{ theme: 'dark' }`, we only offer theming via CSS. For instance, it’s feasible to utilize the `prefers-color-scheme` media query for that.
+
+Lastly, our “picking files from remote sources” feature isn’t quite as full fledged as we maybe would have liked, since support for Google Photos, Box or Facebook is currently not included. We hope these are things that the community can help with.
+
+## What’s next for Uppy?
+
+Does this mean Uppy is perfect? Nope!
+
+There are still quite a lot of [issues](https://github.com/transloadit/uppy/issues) and items in our backlog, and we are already [planning Uppy 1.1](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#11). We also want to maybe release a WordPress plugin, add image cropping, and much more, but we are releasing 1.0 today because it contains virtually all of the features that we set out to implement. These features have all been documented and we don’t expect their APIs to change. If, at some point, they do need to change, we will have to handle that with care. For instance, by shipping a 2.0 version and making all the noise that comes with it.
+
+Uppy has already seen serious usage by a seriously large community and by various serious enterprises. So, with 1.0, we’re now also signaling to you: Hey, we take this seriously and we won’t be swapping things out from under your app, just like that. Also, if you don’t yet have Uppy powering your file uploads, now is the best time to give it a shot!
+
+We hope your users will be as delighted by Uppy 1.0 as we have been designing and building it. Seeing your support and contributions while doing so, made all the difference. Thank you so much!

+ 5 - 5
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
   <head>
     <meta charset="utf-8">
     <title>Uppy</title>
-    <link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
+    <link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
   </head>
   <body>
     <div id="drag-drop-area"></div>
 
-    <script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
     <script>
       var uppy = Uppy.Core()
         .use(Uppy.Dashboard, {
@@ -113,12 +113,12 @@ You can also use a pre-built bundle from Transloadit's CDN: Edgly. `Uppy` will a
 1\. Add a script at the bottom of the closing `</body>` tag:
 
 ``` html
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
 ```
 
 2\. Add CSS to `<head>`:
 ``` html
-<link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
+<link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
 ```
 
 3\. Initialize at the bottom of the closing `</body>` tag:
@@ -169,5 +169,5 @@ If you're using Uppy via a script tag, you can load the polyfills from [JSDelivr
 ```html
 <script src="https://cdn.jsdelivr.net/npm/es6-promise@4.2.5/dist/es6-promise.auto.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.0.0/dist/fetch.umd.min.js"></script>
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
 ```

+ 4 - 4
website/src/docs/robodog-form.md

@@ -104,7 +104,7 @@ $(selector).transloadit({
 ```
 ```html
 <!-- The new Robodog way! -->
-<script src="//transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.js"></script>
+<script src="//transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.js"></script>
 
 <script>
 window.Robodog.form(selector, {
@@ -116,7 +116,7 @@ window.Robodog.form(selector, {
 Make sure to also include the Uppy css file in your `<head>` tag in case you want to use the `modal: true` option:
 ```html
 <head>
-  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.css">
+  <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.css">
 </head>
 ```
 
@@ -128,7 +128,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
 <html>
   <head>
     <title>Testing Robodog</title>
-    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.css">
+    <link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.css">
   </head>
   <body>
     <form id="upload-form" action="/uploads" enctype="multipart/form-data" method="POST">
@@ -138,7 +138,7 @@ Notice how the form is submitted to the inexistant `/uploads` route once all tra
       <button type="submit">Upload</button>
     </form>
 
-    <script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.js"></script>
+    <script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.js"></script>
     <script type="text/javascript">
     window.Robodog.form('#upload-form', {
       waitForEncoding: true,

+ 2 - 2
website/src/docs/robodog.md

@@ -29,8 +29,8 @@ const robodog = require('@uppy/robodog')
 If you are not using a bundler, you can also import Robodog using an HTML script tag.
 
 ```html
-<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.css">
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/robodog.min.js"></script>
+<link rel="stylesheet" href="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.css">
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/robodog.min.js"></script>
 <!-- you can now use: window.Robodog.pick() -->
 ```
 

+ 2 - 2
website/src/examples/i18n/app.html

@@ -1,11 +1,11 @@
 <!-- Basic Uppy styles. You can use Transloadit's CDN, Edgly:
-https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css -->
+https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css -->
 <link rel="stylesheet" href="/uppy/uppy.min.css">
 
 <div class="UppyDragDrop"></div>
 
 <!-- Load Uppy pre-built bundled version. You can use Transloadit's CDN, Edgly:
-https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js -->
+https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js -->
 <script src="/uppy/uppy.min.js"></script>
 <script src="/uppy/locales/ru_RU.min.js"></script>
 <script>

BIN
website/src/images/blog/1.0/amsterdam-team-meetup.jpg


BIN
website/src/images/blog/1.0/uppy-dashboard-1.png


BIN
website/src/images/blog/1.0/uppy-dashboard-2.png


BIN
website/src/images/blog/1.0/uppy-team-kong.jpg


+ 1 - 1
website/src/support.md

@@ -31,7 +31,7 @@ If you want to apply for:
 - 🥉 Bronze support, [sign up for the Startup plan][pricing].
 - 🥈 Silver (or 🥇 higher), [reach out](mailto:support@transloadit.com?subject=Uppy+Enterprise+Support).
 
-Afterwards you can contact [Support][support], announcing your account's email address.
+Afterwards, you can contact [Support][support], announcing your account's email address.
 
 [bugs]: https://github.com/transloadit/uppy/issues/new?template=bug_reports.md  "Bugs welcome in the issue tracker on GitHub"
 [features]: https://github.com/transloadit/uppy/issues/new?template=feature_request.md "Feature requests welcome in the issue tracker on GitHub"

+ 8 - 8
website/themes/uppy/layout/index.ejs

@@ -81,16 +81,16 @@
 <section class="IndexFeatures">
   <h2>Features</h2>
   <ul class="IndexFeatures-list">
-    <li><strong>Lightweight,</strong> modular plugin-based architecture, easy on dependencies <img width="16" align="absmiddle" src="/images/emojis/zap.png" /></li>
-    <li>Large uploads survive network hiccups thanks to <strong>Resumable file uploads</strong> via the open <strong><a href="https://tus.io/">tus</a></strong> standard</li>
-    <li><img width="16" align="absmiddle" src="/images/emojis/battery.png" /> Saves battery & data plan by letting users pick files from <strong>Webcam, Dropbox, Google Drive, Instagram,</strong> but letting servers do the heavy lifting via <strong><a href="/docs/companion/">Companion</a></strong></li>
-    <li>Works great with file encoding and processing backend <strong><a href="https://transloadit.com/">Transloadit</a></strong>, works great without <img width="16" align="absmiddle" src="/images/emojis/transloadit.png" /></li>
-    <li><strong>Open source and driven by the community.</strong> We listen closely and adjust the project based on your feedback <img width="16" align="absmiddle" src="/images/emojis/heart.png" /></li>
+    <li><strong>Lightweight</strong> and modular, plugin-based architecture, easy on dependencies <img width="16" align="absmiddle" src="/images/emojis/zap.png" /></li>
+    <li>Large uploads survive network hiccups thanks to <strong>resumable file uploads</strong> via the open <strong><a href="https://tus.io/">tus</a></strong> standard</li>
+    <li><img width="16" align="absmiddle" src="/images/emojis/battery.png" /> Saves battery and data plan by letting users pick files from <strong>Webcam, Dropbox, Google Drive and Instagram</strong>, while letting servers do the heavy lifting via <strong><a href="/docs/companion/">Companion</a></strong></li>
+    <li>Works great with the file encoding and processing backend from <strong><a href="https://transloadit.com/">Transloadit</a></strong>, but also works great without <img width="16" align="absmiddle" src="/images/emojis/transloadit.png" /></li>
+    <li><strong>Open source and driven by the community</strong> We listen closely and adjust the project based on your feedback <img width="16" align="absmiddle" src="/images/emojis/heart.png" /></li>
     <li><strong>Sleek user interface <img width="16" align="absmiddle" src="/images/emojis/sparkles.png" /></strong></li>
     <li>File recovery (after a browser crash or accidental navigation) via <strong><a href="/docs/golden-retriever/">Golden Retriever</a></strong></li>
     <li>Speaks <strong>multiple languages</strong> (i18n) <img width="16" align="absmiddle" src="/images/emojis/earth_africa.png" /></li>
     <li>Built with accessibility in mind</li>
-    <li><strong>Free for the world, forever</strong></li>
+    <li><strong>Free to the world, forever</strong></li>
     <li>Cute as a puppy, also accepts cat pictures <img width="16" align="absmiddle" src="/images/emojis/dog.png" /></li>
   </ul>
 </section>
@@ -142,8 +142,8 @@
   <p>© <%- date(Date.now(), 'YYYY') %> <a href="https://transloadit.com" rel="noreferrer noopener" target="_blank">Transloadit</a></p>
 </footer>
 
-<link href="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.css" rel="stylesheet">
-<script src="https://transloadit.edgly.net/releases/uppy/v0.30.5/uppy.min.js"></script>
+<link href="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.css" rel="stylesheet">
+<script src="https://transloadit.edgly.net/releases/uppy/v1.0.0/uppy.min.js"></script>
 
 <script>
   var TUS_ENDPOINT = 'https://master.tus.io/files/'

+ 1 - 1
website/themes/uppy/source/css/_settings.scss

@@ -1,7 +1,7 @@
 // font faces
 $fontFamily-body : 'PT Root UI', 'Helvetica Neue', Arial, sans-serif;
 $fontFamily-logo : 'PT Root UI', 'Helvetica Neue', Arial, sans-serif;
-$fontFamily-code : 'Roboto Mono', Menlo, Monaco, courier, monospace;
+$fontFamily-code : 'SFMono-Regular', 'Consolas', 'Liberation Mono', 'Menlo', Courier, monospace;
 
 // font sizes
 $fontSize-body : 16px;