Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@sourcesoft/uppy

transloadit192MIT0.24.5

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:

file uploader, drag-drop, progress, preview, resumable uploads, xhr, tus, s3, google drive, dropbox, webcam

readme

Uppy

Uppy logo: a superman puppy in a pink suit

Build Status

Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly with any application. It’s fast, easy to use and lets you worry about more important problems than building a file uploader.

  • Fetch files from local disk, remote urls, Google Drive, Dropbox, Instagram, or snap and record selfies with a camera;
  • Preview and edit metadata with a nice interface;
  • Upload to the final destination, optionally process/encode

Read the docs | Try Uppy

Uppy is being developed by the folks at Transloadit, a versatile file encoding service.

Example

Uppy UI Demo: modal dialog with a few selected files and an upload button

Code used in the above example:

const Uppy = require('uppy/lib/core')
const Dashboard = require('uppy/lib/plugins/Dashboard')
const GoogleDrive = require('uppy/lib/plugins/GoogleDrive')
const Instagram = require('uppy/lib/plugins/Instagram')
const Webcam = require('uppy/lib/plugins/Webcam')
const Tus = require('uppy/lib/plugins/Tus')

const uppy = Uppy({ autoProceed: false })
  .use(Dashboard, { trigger: '#select-files' })
  .use(GoogleDrive, { target: Dashboard, host: 'https://server.uppy.io' })
  .use(Instagram, { target: Dashboard, host: 'https://server.uppy.io' })
  .use(Webcam, { target: Dashboard })
  .use(Tus, { endpoint: 'https://master.tus.io/files/' })
  .run()
  .on('complete', (result) => {
    console.log('Upload result:', result)
  })

Try it online or read the docs for more details on how to use Uppy and its plugins.

Features

  • Lightweight, modular plugin-based architecture, easy on dependencies :zap:
  • Resumable file uploads via the open tus standard, so large uploads survive network hiccups
  • Supports picking files from: Webcam, Dropbox, Google Drive, Instagram, bypassing the user’s device where possible, syncing between servers directly via uppy-server
  • Works great with file encoding and processing backends, such as Transloadit, works great without (just roll your own Apache/Nginx/Node/FFmpeg/etc backend)
  • Sleek user interface :sparkles:
  • Optional file recovery (after a browser crash) with Golden Retriever
  • Speaks multiple languages (i18n) :earth_africa:
  • Built with accessibility in mind
  • Free for the world, forever (as in beer 🍺, pizza 🍕, and liberty 🗽)
  • Cute as a puppy, also accepts cat pictures :dog:

Installation

$ npm install uppy --save

We recommend installing from npm and then using a module bundler such as Webpack, Browserify or Rollup.js.

Add CSS 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.

⚠️ The bundle currently consists of most Uppy plugins, so this method is not recommended for production, as your users will have to download all plugins when you are likely using just a few.

1. Add a script to the bottom of <body>:

<script src="https://transloadit.edgly.net/releases/uppy/v0.24.4/dist/uppy.min.js"></script>

2. Add CSS to <head>:

<link href="https://transloadit.edgly.net/releases/uppy/v0.24.4/dist/uppy.min.css" rel="stylesheet">

3. Initialize:

<div class="UppyDragDrop"></div>
<script>
  var uppy = Uppy.Core()
  uppy.use(Uppy.DragDrop, { target: '.UppyDragDrop' })
  uppy.use(Uppy.Tus, { endpoint: '//master.tus.io/files/' })
  uppy.run()
</script>

Documentation

  • Uppy — full list of options, methods, and events.
  • Plugins — list of Uppy plugins and their options.
  • Server — setting up and running an Uppy Server instance, which adds support for Instagram, Dropbox, Google Drive and other remote sources.
  • React — components to integrate Uppy UI plugins with React apps.
  • Architecture & Making a Plugin — how to write a plugin for Uppy [documentation in progress].

Plugins

  • Tus — resumable uploads via the open tus standard
  • XHRUpload — regular uploads for any backend out there (like Apache, Nginx)
  • Transloadit — support for Transloadit’s robust file uploading and encoding backend
  • AwsS3 — upload to AWS S3 (also works for Google Cloud)
  • Dashboard — universal UI with previews, progress bars, metadata editor and all the cool stuff
  • DragDrop — plain and simple drag and drop area
  • FileInput — even plainer “select files” button
  • ProgressBar — minimal progress bar that fills itself when upload progresses
  • StatusBar — more detailed progress, pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included by default with Dashboard)
  • Informer — send notifications like “smile” before taking a selfie or “upload failed” when all is lost (also included by default with Dashboard)
  • GoldenRetriever — restores files after a browser crash, like it’s nothing
  • ThumbnailGenerator — generates image previews (included by default with Dashboard)
  • Form — collects metadata from <form> right before an Uppy upload, then optionally appends results back to the form
  • ReduxDevTools — for your emerging time traveling needs
  • GoogleDrive, Dropbox, Instagram, Url — select files from Google Drive, Dropbox, Instagram and direct urls from anywhere on the web. Note thatuppy-server is needed for these.
  • Webcam — snap and record those selfies 📷

Browser Support

Sauce Test Status

We aim to support IE10+ and recent versions of Safari, Edge, Chrome, Firefox, and Opera.

FAQ

Why not just use <input type="file">?

Having no JavaScript beats having a lot of it, so that’s a fair question! Running an uploading & encoding business for ten years though we found that in cases, the file input leaves some to be desired:

  • We received complaints about broken uploads and found that resumable uploads are important, especially for big files and to be inclusive towards people on poorer connections (we also launched tus.io to attack that problem). Uppy uploads can survive network outages and browser crashes or accidental navigate-aways.
  • Uppy supports editing meta information before uploading (and e.g. cropping is planned).
  • There’s the situation where people are using their mobile devices and want to upload on the go, but they have their picture on Instagram, files in Dropbox, or just a plain file url from anywhere on the open web. Uppy allows to pick files from those and push it to the destination without downloading it to your mobile device first.
  • Accurate upload progress reporting is an issue on many platforms.
  • Some file validation — size, type, number of files — can be done on the client with Uppy.
  • Uppy integrates webcam support, in case your users want to upload a picture/video/audio that does not exist yet :)
  • A larger drag & drop surface can be pleasant to work with. Some people also like that you can control the styling, language, etc.
  • Uppy is aware of encoding backends. Often after an upload, the server needs to rotate, detect faces, optimize for iPad, or what have you. Uppy can track progress of this and report back to the user in different ways.
  • Sometimes you might want your uploads to happen while you continue to interact on the same single page.

Not all apps need all of these features. A <input type="file"> is fine in many situations. But these were a few things that our customers hit / asked about enough to spark us to develop Uppy.

Why is all this goodness free?

Transloadit’s team is small and we have a shared ambition to make a living from open source. By giving away projects like tus.io and Uppy,we’re hoping to advance the state of the art, make life a tiny little bit better for everyone, and in doing so have rewarding jobs and get some eyes on our commercial service: a content ingestion & processing platform.

Our thinking is that if just a fraction of our open source userbase can see the appeal of hosted versions straight from the source, that could already be enough to sustain our work. So far this is working out! We’re able to dedicate 80% of our time to open source and haven’t gone bankrupt just yet :D

Does Uppy support React?

Yep, we have Uppy React components, please see Uppy React docs.

Does Uppy support S3 uploads?

Yes, there is an S3 plugin, please check out the docs for more.

Do I need to install special service/server for Uppy? Can I use it with Rails/Node/Go/PHP?

Yes, whatever you want on the backend will work with XHRUpload plugin, since it just does a POST or PUT request. Here’s a PHP backend example.

If you want resumability with the Tus plugin, use one of the tus server implementations 👌🏼

And you’ll need uppy-server if you’d like your users to be able to pick files from Instagram, Google Drive, Dropbox or via direct urls (with more services coming).

Contributions are welcome

Contributors

arturi goto-bus-stop kvz hedgerh ifedapoolarewaju sadovnychyi
arturi goto-bus-stop kvz hedgerh ifedapoolarewaju sadovnychyi
richardwillars AJvanLoon wilkoklak oliverpool nqst janko-m
richardwillars AJvanLoon wilkoklak oliverpool nqst janko-m
gavboulton bertho-zero johnunclesam ogtfaber sunil-shrestha tim-kos
gavboulton bertho-zero johnunclesam ogtfaber sunil-shrestha tim-kos
phitranphitranphitran btrice Martin005 martiuslim richmeij Burkes
phitranphitranphitran btrice Martin005 martiuslim richmeij Burkes
ThomasG77 zhuangya fortrieb muhammadInam rosenfeld ajschmidt8
ThomasG77 zhuangya fortrieb muhammadInam rosenfeld ajschmidt8
rhymes functino radarhere azeemba bducharme chao
rhymes functino radarhere azeemba bducharme chao
csprance danmichaelo mrboomer lowsprofile gjungb Cloud887
csprance danmichaelo mrboomer lowsprofile gjungb Cloud887
jagoPG jcjmcclean jessica-coursera lucaperret mperrando mnafees
jagoPG jcjmcclean jessica-coursera lucaperret mperrando mnafees
pauln phillipalexander luarmr sergei-zelinsky tomsaleeba eltercero
pauln phillipalexander luarmr sergei-zelinsky tomsaleeba eltercero
xhocquet avalla c0b41 franckl kiloreux raineluntta
xhocquet avalla c0b41 franckl kiloreux raineluntta
amitport
amitport

License

The MIT License.

changelog

Our combined changelog and roadmap. It contains todos as well as dones.

Items can be optionally be tagged tagged by GitHub owner issue if discussion happened / is needed.

Please add your entries in this format:

  • - [ ] (<plugin name>|website|core|meta|build|test): <Present tense verb> <subject> \(<list of associated owners/gh-issues>\).

Following SemVer spec item 4, we're <1.0.0 and allowing ourselves to make breaking changes in minor and patch levels.

In the current stage we aim to release a new version on the last Friday of every new month.

Backlog

Ideas that will be planned and find their way into a release at one point. PRs are welcome! Please do open an issue to discuss first if it's a big feature, priorities may have changed after something was added here.

  • <input disabled="" type="checkbox"> core: Decouple rendering from the Plugin base class?
  • <input disabled="" type="checkbox"> core: Make sure Uppy works well in VR
  • <input disabled="" type="checkbox"> test: Human should check http://www.webpagetest.org and https://developers.google.com/web/tools/lighthouse/, use it sometimes to test website and Uppy. Will show response/loading times and other issues
  • <input disabled="" type="checkbox"> test: Human should test with real screen reader to identify accessibility problems
  • <input disabled="" type="checkbox"> test: setup an HTML page with all sorts of crazy styles, resets & bootstrap to see what brakes Uppy (@arturi)
  • <input disabled="" type="checkbox"> dependencies: es6-promise --> lie https://github.com/calvinmetcalf/lie ?
  • <input disabled="" type="checkbox"> core: accessibility research: https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb, http://khan.github.io/tota11y/
  • <input disabled="" type="checkbox"> core: consider adding presets, see https://github.com/cssinjs/jss-preset-default/blob/master/src/index.js (@arturi)
  • <input disabled="" type="checkbox"> uppy/uppy-server: Transfer files between providers (from instagram to Google drive for example).
  • <input disabled="" type="checkbox"> uploaders: consider not showing progress updates from the server after an upload’s been paused (@arturi, @ifedapoolarewaju)
  • <input disabled="" type="checkbox"> maybe restrict system file picking dialog too https://github.com/transloadit/uppy/issues/253
  • <input disabled="" type="checkbox"> uppy-server: what happens if access token expires amid an upload/download process.
  • <input disabled="" type="checkbox"> good way to change plugin options at runtime—maybe this.state.options?
  • <input disabled="" type="checkbox"> s3: multipart/"resumable" uploads for large files (@goto-bus-stop)
  • <input disabled="" type="checkbox"> DnD Bar: drag and drop + statusbar or progressbar ? (@arturi)
  • <input disabled="" type="checkbox"> possibility to work on already uploaded / in progress files #112, #113
  • <input disabled="" type="checkbox"> possibility to edit/delete more than one file at once #118, #97
  • <input disabled="" type="checkbox"> optimize problematic filenames #72
  • <input disabled="" type="checkbox"> an uploader plugin to receive files in a callback instead of uploading them
  • <input disabled="" type="checkbox"> statusbar: add option to always show
  • <input disabled="" type="checkbox"> have a resetProgress method for resetting a single file, and call it before starting an upload. see comment in #393
  • <input disabled="" type="checkbox"> “Custom Provider” plugin for Dashboard — shows already uploaded files or files from a custom service; accepts an array of files to show in options, no uppy-server required #362
  • <input disabled="" type="checkbox"> WordPress plugin
  • <input disabled="" type="checkbox"> Transformations, cropping, filters for images, see #53
  • <input disabled="" type="checkbox"> Prepare for (piwik-) tracking of usage of uppy ? see #83
  • <input disabled="" type="checkbox"> screenshot+screencast support similar to Webcam #148
  • <input disabled="" type="checkbox"> Webcam modes #198
  • <input disabled="" type="checkbox"> feature: React Native support
  • <input disabled="" type="checkbox"> consider iframe / more security for Transloadit/Uppy integration widget and Uppy itself. Page can’t get files from Google Drive if its an iframe; possibility for folder restriction for provider plugins
  • <input disabled="" type="checkbox"> It would be nice in the long run to have a dynamic package builder here right on the website where you can select the plugins you need/want and it builds and downloads a minified version of them? Sort of like jQuery UI: https://jqueryui.com/download/
  • <input disabled="" type="checkbox"> test: add https://github.com/pa11y/pa11y for automated accessibility testing?
  • <input disabled="" type="checkbox"> test: add tests for npm pack
  • <input disabled="" type="checkbox"> test: add deepFreeze to test that state in not mutated anywhere by accident #320
  • <input disabled="" type="checkbox"> audio: audio recording similar to Webcam #143
  • <input disabled="" type="checkbox"> add typescript definitions and JSDoc everywhere? https://github.com/Microsoft/TypeScript/wiki/Type-Checking-JavaScript-Files
  • <input disabled="" type="checkbox"> transloadit plugin: maybe add option to disable uppy server endpoint overrides
  • <input disabled="" type="checkbox"> dragdrop: change border color when files doesn’t pass restrictions on drag https://github.com/transloadit/uppy/issues/607
  • <input disabled="" type="checkbox"> website: automatically generated page with all locale strings used in plugins
  • <input disabled="" type="checkbox"> transloadit: option for StatusBar’s upload button to act as a "Start assembly" button? Useful if an assembly uses only import robots, such as /s3/import to start a batch transcoding job.
  • <input disabled="" type="checkbox"> provider: Add Facebook
  • <input disabled="" type="checkbox"> provider: Add OneDrive
  • <input disabled="" type="checkbox"> provider: Add Box
  • <input disabled="" type="checkbox"> provider: change ProviderViews signature to receive Provider instance in second param. ref https://github.com/transloadit/uppy/pull/743#discussion_r180106070
  • <input disabled="" type="checkbox"> core: css-in-js, while keeping non-random classnames (ideally prefixed) and useful preprocessor features. also see simple https://github.com/codemirror/CodeMirror/blob/master/lib/codemirror.css (@arturi, @goto-bus-stop)
  • <input disabled="" type="checkbox"> webcam: Stop recording when file size is exceeded, should be possible given how the MediaRecorder API works
  • <input disabled="" type="checkbox"> dashboard: add option to disable uploading from local disk #657
  • <input disabled="" type="checkbox"> dashboard: display data like image resolution on file cards #783

1.0 Goals

What we need to do to release Uppy 1.0

  • <input disabled="" type="checkbox"> QA: test how everything works together: user experience from npm install to production build with Webpack, using in React/Redux environment (npm pack)
  • <input disabled="" type="checkbox"> QA: test in multiple browsers and mobile devices again
  • <input checked="" disabled="" type="checkbox"> QA: test uppy server. benchmarks / stress test. multiple connections, different setups, large files (10 GB)
  • <input disabled="" type="checkbox"> QA: tests for some plugins
  • <input checked="" disabled="" type="checkbox"> docs: on using plugins, all options, list of plugins, i18n
  • <input disabled="" type="checkbox"> feature: preset for Transloadit that mimics jQuery SDK, check https://github.com/transloadit/jquery-sdk docs
  • <input disabled="" type="checkbox"> refactoring: possibly add CSS-in-JS, style encapsulation
  • <input checked="" disabled="" type="checkbox"> refactoring: possibly switch from Yo-Yo to Preact, because it’s more stable, solves a few issues we are struggling with (onload being weird/hard/modern-browsers-only with bel; no way to pass refs to elements; extra network requests with base64 urls) and mature, “new standard”, larger community
  • <input disabled="" type="checkbox"> refactoring: split uppy into small packages, lerna repo?
  • <input checked="" disabled="" type="checkbox"> QA: tests for core and utils
  • <input disabled="" type="checkbox"> feature: basic Reacte Native support
  • <input checked="" disabled="" type="checkbox"> feature: Redux and ReduxDevTools support (currently mirrors Uppy state to Redux)
  • <input checked="" disabled="" type="checkbox"> feature: beta file recovering after closed tab / browser crash
  • <input checked="" disabled="" type="checkbox"> feature: easy integration with React (UppyReact components)
  • <input checked="" disabled="" type="checkbox"> feature: finish the direct-to-s3 upload plugin and test it with the flow to then upload to :transloadit: afterwards. This is because this might influence the inner flow of the plugin architecture quite a bit
  • <input checked="" disabled="" type="checkbox"> feature: restrictions: by size, number of files, file type
  • <input checked="" disabled="" type="checkbox"> refactoring: webcam plugin
  • <input checked="" disabled="" type="checkbox"> uppy-server: add uppy-server to main API service to scale it horizontally. for the standalone server, we could write the script to support multiple clusters. Not sure how required or neccessary this may be for Transloadit's API service.
  • <input checked="" disabled="" type="checkbox"> uppy-server: better error handling, general cleanup (remove unused code. etc)
  • <input checked="" disabled="" type="checkbox"> uppy-server: security audit
  • <input checked="" disabled="" type="checkbox"> uppy-server: storing tokens in user’s browser only (d040281cc9a63060e2f2685c16de0091aee5c7b4)

next

0.25.0

To Be Released: 2018-05-31.

0.24.4

Released: 2018-05-14.

  • core: Pass allowedFileTypes and maxNumberOfFiles to input[type=file] in UI components: Dashboard, DragDrop, FileInput (#814 / @arturi)
  • transloadit: Update Transloadit plugin's Uppy Server handling (#804 / @goto-bus-stop)
  • tus: respect limit option for upload parameter requests (#817 / @ap--)
  • docs: doc: Explain name metadata vs. $_FILES[]["name"] (#1c1bf2e / @goto-bus-stop)
  • dashboard: improve “powered by” icon (#0284c8e / @arturi)
  • statusbar: add default string for cancel button (#822 / @mrbatista)

0.24.3

Released: 2018-05-10.

  • core: add uppy.getFiles() method (@goto-bus-stop / #770)
  • core: merge meta data when add file (#810 / @mrbatista)
  • dashboard: fix duplicate plugin IDs, see #702 (@goto-bus-stop)
  • dashboard/statusbar: fix some unicode characters showing up as gibberish (#787 / @goto-bus-stop)
  • dashboard: Fix grid item height in remote providers with few files (#791 / @goto-bus-stop)
  • dashboard: Add rel="noopener noreferrer" to links containing `target="_blank" (#767 / @kvz)
  • instagram: add extensions to instagram files (@ifedapoolarewaju)
  • transloadit: More robust failure handling for Transloadit, closes #708 (#805 / @goto-bus-stop)
  • docs: Document "headers" upload parameter in AwsS3 plugin (#780 / @janko-m)
  • docs: Update some uppy.state docs to align with the Stores feature (#792 / @goto-bus-stop)
  • dragdrop: Add inputName option like FileInput has, set empty value="", closes #729 (#778 / @goto-bus-stop, @arturi)
  • docs: Google Cloud Storage setup for the AwsS3 plugin (#777 / goto-bus-stop)
  • react: Update React component PropTypes (#776 / @arturi)
  • statusbar: add some spacing between text elements (#760 / @goto-bus-stop)

0.24.2

Released: 2018-04-17.

  • dashboard: Fix showLinkToFileUploadResult option (@arturi / #763)
  • docs: Consistent shape for the getResponseData (responseText, response) (@arturi / #765)

0.24.1

Released: 2018-04-16.

  • dashboard: ⚠️ breaking maxWidth, maxHeight --> width and height; update docs and React props too; regardless of what we call those internally, this makes more sense, I think (@arturi)
  • core: Avoid important for those styles that need to be overriden by inline-styles + microtip (@arturi)
  • tus & xhrupload: Retain uppy-server error messages, fixes #707 (@goto-bus-stop / #759)
  • dragdrop: Link <label> and <input>, fixes #749 (@goto-bus-stop / #757)

0.24.0

Released: 2018-04-12.

  • core: ⚠️ breaking !important styles to be immune to any environment/page, look at screenshots in #446. Use postcss-safe-important (look into http://cleanslatecss.com/ or https://github.com/maximkoretskiy/postcss-autoreset or increasing specificity with .uppy prefix) (#744 / @arturi)
  • core: ⚠️ breaking onBeforeFileAdded(), onBeforeUpload() and addFile() are now synchronous. You can no longer return a Promise from the onBefore*() functions. (#294, #746, @goto-bus-stop, @arturi)
  • statusbar: ⚠️ breaking Move progress details to second line and make them optional (#682 / @arturi)
  • core: Add uppy-Root to a DOM el that gets mounted in mount (#682 / @arturi)
  • core: Fix all file state was included in progress accidentally (#682 / @arturi)
  • dashboard: Options to disable showLinkToFileUploadResult and meta editing if metaFields is not provided (#682 / @arturi)
  • dashboard: Remove dashed file icon for now (#682 / @arturi)
  • dashboard: Add optional whitelabel “powered by uppy.io” (@nqst, @arturi)
  • dashboard: Huge UI redesign, update provider views, StatusBar, Webcam, FileCard (@arturi, @nqst)
  • docs: Update uppy-server docs to point to Kubernetes (#706 / @kiloreux)
  • docs: Talk about success_action_status for POST uploads (#728 / @goto-bus-stop)
  • docs: Add custom provider example (#743 / @ifedapoolarewaju)
  • docs: Addmore useful events, i18n strings, typos, fixes and improvements following Tim’s feedback (#704 / @arturi)
  • goldenretriever: Regenerate thumbnails after restore (#723 / @goto-bus-stop)
  • goldenretriever: Warn, not error, when files cannot be saved by goldenretriever (#641 / @goto-bus-stop)
  • instagram: Use date&time as file name for instagram files (#682 / @arturi)
  • providers: Fix logging out of providers (#742 / @goto-bus-stop)
  • providers: Refactor Provider views: Filter, add showFilter and showBreadcrumbs (#682 / @arturi)
  • react: Allow overriding <DashboardModal /> target prop (#740, @goto-bus-stop)
  • s3: Support fake XHR from remote uploads (#711, @goto-bus-stop)
  • s3: Document Digital Ocean Spaces
  • s3: Fix xhr response handlers (#625, @goto-bus-stop)
  • statusbar: Cancel button for any kind of uploads (@arturi, @goto-bus-stop)
  • url: Add checks for protocols, assume http when no protocol is used (#682 / @arturi)
  • url: Refactor things into Provider, see comments in https://github.com/transloadit/uppy/pull/588; exposing the Provider module and the ProviderView to the public API (#727 / @ifedapoolarewaju, @arturi)
  • webcam: Styles updates: adapt for mobile, better camera icon, move buttons to the bottom bar (#682 / @arturi)
  • server: Fixed security vulnerability in transient dependency #70 (@ifedapoolarewaju)
  • server: Auto-generate tmp download file name to avoid Path traversal (@ifedapoolarewaju)
  • server: Namespace redis key storage/lookup to avoid collisions (@ifedapoolarewaju)
  • server: Validate callback redirect url after completing OAuth (@ifedapoolarewaju)
  • server: Reduce the permission level required by Google Drive (@ifedapoolarewaju)
  • server: Auto-generate Server secret if none is provided on startup (@ifedapoolarewaju)
  • server: We implemented a more standard logger for Uppy Server (@ifedapoolarewaju)
  • server: Added an example project to run Uppy Server on Serverless (@ifedapoolarewaju)

0.23.3

  • docs: add “Writing Plugins” (@goto-bus-stop)
  • docs: Update aws-s3.md, xhrupload.md (#692 / @bertho-zero)
  • docs: Typos, fixes and improvements (@tim-kos, @ifedapoolarewaju, @arturi / #704)
  • core: add Google Drive to S3 + uppy-server example, update docs (@goto-bus-stop / #711)
  • s3: Support fake XHR from remote uploads (@goto-bus-stop / #711)
  • dashboard: fix FileItem titles (#696 / @bertho-zero)
  • form: Fix get-form-data being undefined when built with Rollup (#698 / @goto-bus-stop)
  • transloadit: Capitalise Assembly in user facing messages (#699 / @goto-bus-stop)
  • core: Add yaml file type (#710 / @jessica-coursera)
  • core: Clear uploads on cancelAll (#664 / @goto-bus-stop)
  • core: Remove Redux state sync plugin (#667 / @goto-bus-stop)
  • core: merge of restrictions (#677 / @richmeij)
  • core: Check for empty URL (#681 / @arturi)
  • build: Use babel-preset-env, drop modules transform, use CommonJS in test files (#714 / @goto-bus-stop)
  • dashboard: Remove semiTransparent for good (#704 / @arturi)
  • url: Prevent scrolling when focusing on input when Url tab is opened (#179bdf7 / @arturi)

0.23.2

  • core: ⚠️ breaking Emit full file object instead of fileID in events like uppy.on('event', file, data) (#647 / @arturi)
  • core: Fix merging locale strings in Core (#666 / @goto-bus-stop)
  • s3: Check upload parameters shape, fixes #653 (#665 / @goto-bus-stop)
  • docs: Add more Core events to docs (@arturi)
  • xhrupload: Clear timer when upload is removed in XHRUpload (#647 / @arturi)
  • xhrupload: Fix XHRUpload.js error handling (#656 / @rhymes)
  • tus: Configure uploadUrl for uppy-server uploads (#643 / @goto-bus-stop)

0.23.1

  • xhrupload: ⚠️ breaking Revamped XHR response handling: This adds a response key to files when the upload completed (regardless of whether it succeeded). file.response contains a status and a data property. data is the result of getResponseData. One change here is that getResponseData is also called if there was an error, not sure if that's a good idea; Also changed events to emit file objects instead of IDs here because it touches many of the same places. (#612 / @goto-bus-stop)
  • transloadit: ⚠️ breaking Embeded tus plugin: When importFromUploadURLs is not set, add the Tus plugin with the right configuration. (#614 / @goto-bus-stop)
  • transloadit: Allow easy passing of form fields (#593 / @goto-bus-stop)
  • s3: Updated XHR response handling, fixes (#624 / @goto-bus-stop)
  • core: Revamped addFile() rejections (#604 / @goto-bus-stop)
  • core: Added wrapper function for emitter.on, so you can chain uppy.on().run()... (#597 / @arturi)
  • core: Fix progress events causing errors for removed files (#638 / @arturi)
  • statusbar: Use translations for Uploading / Paused text, fixes #629 (#640 / goto-bus-stop)
  • thumbnailgenerator: Upsizing image if smaller than thumbnail size, fix infinite loop (#637 / @phitranphitranphitran)
  • website: Added Transloadit example to website (#603 / @arturi)

0.23.0

Released: 2018-02-11.

  • core: Allow plugins to add data to result object. Return processing results among with upload results in complete event and upload() promise (#527 / @goto-bus-stop)
  • core: Move limiting to different point, to fix StatusBar and other UI issues #468 (#524, #526 / @goto-bus-stop)
  • core: Add uploadID to complete event (#569 / @richardwillars)
  • core: Allow chanining after .on() and .off() to improve ergonomics (#597 / @arturi)
  • core: Allow user to override sass variables (#555 / @chao)
  • core: Move preview generation to separate plugin, add queuing (#431 / @richardwillars)
  • core: Third-party extension, uppy-store-ngrx https://github.com/rimlin/uppy-store-ngrx/ (#532 / @rimlin)
  • core: Warn, not error, when file cannot be added due to restrictions? (#604, #492 / @goto-bus-stop)
  • dashboard: Add more i18n strings (#565 / @arturi)
  • dashboard: Fix modal and page scroll (#564 / @arturi)
  • dashboard: Refactor provider views (#554 / @arturi)
  • dashboard: Restore focus after modal has been closed (#536 / @arturi)
  • dashboard: Use empty input value so same file can be selected multiple times (@arturi / #534)
  • dashboard: Use more accessible tip lib microtip (#536 / @arturi)
  • docs: Add PHP snippets to XHRUpload docs (#567 / @goto-bus-stop)
  • meta: Added instruction to fork the repo first (#512 / muhammadInam)
  • meta: Automatically host releases on edgly and use that as our main CDN (#558 / @kvz)
  • meta: Dependency version updates (#523 / @goto-bus-stop)
  • meta: Remove unused files from published package (#586 / @goto-bus-stop)
  • s3: Respect limit option for upload parameter requests too; fix isXml() check when no content-type is available (#545, #544, #528 / @goto-bus-stop)
  • statusbar: Fix status text still showing when statusbar is hidden (#525 / @goto-bus-stop)
  • test: Alter jest testPathPattern to current dir, add chai (#583 / @arturi)
  • thumbnail: Add thumbnail generation plugin (#461 / @richardwillars)
  • thumbnail: Fix blank preview thumbnails for images in Safari; use slightly different stap scaling (#458, #584 / @arturi)
  • transloadit: Add transloadit:assembly-executing event (#547 / @goto-bus-stop)
  • transloadit: Add assembly results to to the complete callback (#527 / @goto-bus-stop)
  • transloadit: Easily pass form fields (#593 / @goto-bus-stop)
  • tus: resume: false — don’t store url (@arturi / #507)
  • uppy-server: Detect file upload size from the server (@ifedapoolarewaju)
  • uppy-server: Fix circular json stringify error (@ifedapoolarewaju)
  • uppy-server: Load standalone server options via config path (@ifedapoolarewaju)
  • uppy-server: Pass response from uppy-server upload’s endpoint (#591 / @ifedapoolarewaju)
  • uppy-server: Schedule job to delete stale upload files (@ifedapoolarewaju)
  • uppy-server: Security audit, ask @acconut
  • uppy-server: Support localhost urls as endpoints (@ifedapoolarewaju)
  • url: New plugin that imports files from urls (#588 / @arturi, @ifedapoolarewaju)
  • webcam: Font styling for Webcam option (#509 / @muhammadInam)
  • webcam: Mirror image preview, add option to select which camera is used to capture, try filling the whole Dashboard with webcam preview image, remove URL.createObjectURL() (#574 / @arturi, @nqst)
  • website: Add Transloadit example to website (#603 / @arturi)
  • website: Doc fixes (#563 / @arturi)
  • website: Improve the Contributing guide (#578 / @arturi)
  • xhrupload: Add bundle option to send multiple files in one request (#442 / @goto-bus-stop)
  • xhrupload: Prevent files from being uploaded multiple times in separate uploads (#552 / @richardwillars)
  • xhrupload: Refactor response and error handling (#591 / @goto-bus-stop, @arturi, @ifedapoolarewaju)

0.22.1

Released: 2018-01-09.

  • core: Fix remote uploads (#474 / @arturi)
  • statusbar, progressbar: Add option to hide progress bar after upload finish (#485 / @wilkoklak)
  • s3: Allow passing on XHRUpload options, such as "limit" to AwsS3 Plugin (#471 / @ogtfaber)
  • XHRUpload: Fix progress with limited XHRUploads (#505 / @goto-bus-stop)
  • core: fix error when file.type === null, shouldn’t pass that to match (@arturi)
  • dashboard: input hidden="true" should not be focusable too (@arturi)
  • webcam: Font styling for Webcam option (#509 / @muhammadInam)
  • docs: fix reference to incorrect width/height options (#475 / @xhocquet)
  • docs: Documentation fixes and improvements (#463 / @janko-m)
  • docs: Fixed several typos in docs/server and docs/uppy (#484 / @martiuslim)

0.22.0

Released: 2017-12-21. Theme: 🎄 Christmas edition

  • ⚠️ Breaking core: rendering engine switched from Yo-Yo to Preact, and all views from html hyperx template strings to JSX (#451 / @arturi)
  • ⚠️ Breaking core: large refactor of Core and Plugins: setFileState, merge MetaData plugin into Dashboard, prefix "private" core methods with underscores (@arturi / #438)
  • ⚠️ Breaking core: renamed core to uppy in plugins and what not. So instead of this.core.state we now use this.uppy.state (#438 / @arturi)
  • ⚠️ Breaking core: renamed events to remove core: prefix, as been suggested already. So: success, error, upload-started and so on, and prefixed event names for plugins sometimes, like dashboard:file-card (#438 / @arturi)
  • ⚠️ Breaking core: CSS class names have been altered to use uppy- namespace, so .UppyDashboard-files --> .uppy-Dashboard-files and so on
  • ⚠️ Breaking dashboard: added metaFields option, pass an array of settings for UI field objects { id: 'caption', name: 'Caption', placeholder: 'describe what the image is about' } (#438 / @arturi, @goto-bus-stop)
  • ⚠️ Breaking core: deprecate getMetaFromForm in favor of new Form plugin (#407 / @arturi)
  • form: added Form, a new plugin that is used in conjunction with any acquirer, responsible for: 1. acquiring the metadata from <form> when upload starts in Uppy; 2. injecting result array of succesful and failed files back into the form (#407 / @arturi)
  • core: add more extensions for mimetype detection (#452 / @ifedapoolarewaju)
  • docs: more docs for plugins (#456 / @goto-bus-stop)
  • core: misc bugs fixes and improvements in Webcam, Dashboard, Provider and others (#451 / @arturi)
  • dashboard: improved Dashboard UI (@arturi)
  • uppy-server: remove pause/resume socket listeners when upload is done (@ifedapoolarewaju)
  • uppy/uppy-server: remote server error handler (#446 / @ifedapoolarewaju)
  • provider: fix dropbox thumbnail view (@ifedapoolarewaju)
  • uppy-server: link uppy-server with https://snyk.io/ to aid vulnerability spotting (@ifedapoolarewaju)
  • uppy-server: use typescript to compile code for a type safe servers (@ifedapoolarewaju)

0.21.1

Released: 2017-12-10.

  • ⚠️ Breaking core: Set this.el in Plugin class (#425 / @arturi)
  • StatusBar, Dashboard and Provider UI improvements place upload button into StatusBar, use Alex’s suggestions for retry button; other UI tweaks (#434 / @arturi)
  • XHRUpload: fix fields in XHR remote uploader (#424 / @sadovnychyi)
  • XHRUpload: option to limit simultaneous uploads #360 (#427 / goto-bus-stop)
  • core: Add isSupported() API for providers (#421 / @goto-bus-stop, @arturi)
  • core: Add stores. Improve on Redux PR #216 to allow using Redux (or any other solution) for all Uppy state management, instead of proxy-only (#426 / @goto-bus-stop)
  • core: add ability to disable thumbnail generation (#432 / @richardwillars)
  • core: allow to select multiple files at once from remote providers (#419 / @sadovnychyi)
  • core: use setPluginState and getPluginState in Providers (#436 / @arturi)
  • docs: uppy-server docs for s3 getKey option (#444 / @goto-bus-stop)
  • goldenretriever: Fix IndexedDB store initialisation when not cleaning up (#430 / @goto-bus-stop)
  • provider: folder deselection did not remove all files (#439 / @ifedapoolarewaju)
  • s3: Use Translator for localised strings (420 / @goto-bus-stop )
  • transloadit: Port old tests from tape (#428 / @goto-bus-stop)
  • tus: Restore correctly from paused state (#443 / @goto-bus-stop)

0.21.0

Released: 2017-11-14.

  • accessibility: add tabindex="0" to buttons and tabs, aria-labels, focus (#414 / @arturi)
  • core: allow setting custom id for plugins to allow a plugin to be used multiple times (#418 / @arturi)
  • core: do not check isPreviewSupported for unknown filetypes (#417 / @sadovnychyi)
  • core: refactor uppy-base (#382 / @goto-bus-stop)
  • core: remove functions from state object (#408 / @goto-bus-stop)
  • core: return { successful, failed } from uppy.upload() (#404 / @goto-bus-stop)
  • core: update state with error messages rather than error objects (#406 / @richardwillars)
  • core: use tinyify for the unpkg bundle. (#371 / @goto-bus-stop)
  • dashboard: Fix pasting files, default image file name, add type to meta, file type refactor (#395 / @arturi)
  • dragdrop: Fix of the .uppy-DragDrop-inner spacing on small screens (#405 / @nqst)
  • react: fix uppy PropType, closes (#416 / @goto-bus-stop)
  • s3: automatically wrap XHRUpload. Users should remove .use(XHRUpload) when using S3. (#408 / @goto-bus-stop)
  • test: refactored end-to-end tests to not use website, switched to Webdriver.io, added tests for Edge, Safari, Android and iOS (#410 / @arturi)
  • tus: Rename Tus10 → Tus (#285 / @goto-bus-stop)
  • uppy-serer: mask sensitive data from request logs (@ifedapoolarewaju)
  • uppy-server: add request body validators (@ifedapoolarewaju)
  • uppy-server: migrate dropbox to use v2 API (#386 / @ifedapoolarewaju)
  • uppy-server: store tokens in user’s browser only (@ifedapoolarewaju)
  • webcam: only show the webcam tab when browser support is available (media recorder API) (#421 / @arturi, @goto-bus-stop)
  • webcam: simplify and refactor webcam plugin (modern browser APIs only) (#382 / @goto-bus-stop)
  • xhrupload: set a timeout in the onprogress event handler to detect stale network (#378 / @goto-bus-stop)
  • uppy-server: allow flexible whitelist endpoint protocols (@ifedapoolarewaju)

0.20.3

Released: 2017-10-18.

  • Start a completely new upload when retrying. (#390 / @goto-bus-stop)
  • dashboard: Show errors that occurred during processing on the file items. (#391 / @goto-bus-stop)
  • transloadit: Mark files as having errored if their assembly fails. (#392 / @goto-bus-stop)
  • core: Clear file upload progress when an upload starts. (#393 / @goto-bus-stop)
  • tus: Clean up tus.Upload instance and events when an upload starts, finishes, or fails. (#390 / @goto-bus-stop)

0.20.2

Released: 2017-10-11.

  • docs: fix getMetaFromForm documentation (@arturi)
  • core: fix generating thumbnails for images with transparent background (#380 / @goto-bus-stop)
  • transloadit: use Translator class for localised strings (#383 / @goto-bus-stop)
  • goldenretriever: don't crash when required server-side (#384 / @goto-bus-stop)

0.20.1

Released: 2017-10-05.

  • redux: add plugin for syncing uppy state with a Redux store (#376 / @richardwillars)

0.20.0

Released: 2017-10-03. Theme: React and Retry

  • core: retry/error when upload can’t start or fails (offline, connection lost, wrong endpoint); add error in file progress state, UI, question mark button (#307 / @arturi)
  • core: support for retry in Tus plugin (#307 / @arturi)
  • core: support for retry in XHRUpload plugin (#307 / @arturi)
  • core: Add support for Redux DevTools via a plugin (#373 / @arturi)
  • core: improve and merge the React PR (#170 / @goto-bus-stop, @arturi)
  • core: improve core.log method, add timestamps (#372 / @arturi)
  • dragdrop: redesign, add note, width/height options, arrow icon (#374 / @arturi)
  • uploaders: upload resolution changes, followup to #323 (#347 / @goto-bus-stop)
  • uploaders: issue warning when no uploading plugins are used (#372 / @arturi)
  • core: fix replaceTargetContent and add tests for Plugin (#354 / @gavboulton)
  • goldenretriever: Omit completed uploads from saved file state—previously, when an upload was finished and the user refreshed the page, all the finished files would still be there because we saved the entire list of files. Changed this to only store files that are part of an in-progress upload, or that have yet to be uploaded (#358, #324 / @goto-bus-stop)
  • goldenretriever: Remove files from cache when upload finished—this uses the deleteBlobs function when core:success fires (#358, #324 / @goto-bus-stop)
  • goldenretriever: add a timestamp to cached blobs, and to delete old blobs on boot (#358, #324 / @goto-bus-stop)
  • s3: have some way to configure content-disposition for uploads, see #243 (@goto-bus-stop)
  • core: move setPluginState and add getPluginState to Plugin class (#363 / @goto-bus-stop)

0.19.1

Released: 2017-09-20.

  • goldenretriever: fix restorefiles with id (#351 / @arturi)
  • goldenretriever: Clean up blobs that are not related to a file in state (#349 / @goto-bus-stop)
  • core: set the newState before emiting core:state-update (#341 / @sunil-shrestha, @arturi)
  • docs: Document StatusBar plugin (#350 / @goto-bus-stop)

0.19.0

Released: 2017-09-15. Theme: Tests and better APIs

  • goldenretriever: allow passing options to IndexedDbStore (#339 / sunil-shrestha)
  • core: add Uppy instance ID option, namespace serviceWorker action types, add example using multiple Uppy instances with Goldenretriever (#333 / @goto-bus-stop)
  • core: fix calculateTotalProgress - NaN (#342 / @arturi)
  • core: fix and refactor restrictions (#345 / @arturi)
  • core: Better generateFileID (#330 / @arturi)
  • core: improve isOnline() (#319 / @richardwillars)
  • core: remove unused bootstrap styles (#329 / @arturi)
  • core: experiment with yo-yo --> preact and picodom (#297 / @arturi)
  • dashboard: fix FileItem source icon position and copy (@arturi)
  • dashboard: expose and document the show/hide/isOpen API (@arturi)
  • dashboard: allow multiple triggers of the same class .open-uppy (#328 / @arturi)
  • plugins: add aria-hidden to all SVG icons for accessibility (#4e808ca3d26f06499c58bb77abbf1c3c2b510b4d / @arturi)
  • core: Handle sync returns and throws in possibly-async function options (#315 / @goto-bus-stop)
  • core: switch to Jest tests, add more tests for Core and Utils (#310 / @richardwillars)
  • website: Minify bundle for disc (#332 / @goto-bus-stop)
  • transloadit: remove this.state getter (#331 / @goto-bus-stop)
  • server: option to define valid upload urls (@ifedapoolarewaju)
  • server: more automated tests (@ifedapoolarewaju)

0.18.1

Released: 2017-09-05. Note: this version was released as a @next npm tag to unblock some users.

  • core: gradually resize image previews #275 (@goto-bus-stop)
  • informer: support “explanations”, a (?) button that shows more info on hover / click (#292 / @arturi)
  • fix webcam video recording (@goto-bus-stop)
  • bundle: add missing plugins (s3, statusbar, restoreFiles) to unpkg bundle (#301 / @goto-bus-stop)
  • xhrupload: Use error messages from the endpoint (#305 / @goto-bus-stop)
  • dashboard: prevent submitting outer form when pressing enter key while editing metadata (#306 / @goto-bus-stop)
  • dashboard: save metadata edits when pressing enter key (#308 / @arturi)
  • transloadit: upload to S3, then import into :tl: assembly using /add_file?s3url=${url} (#280 / @goto-bus-stop)
  • transloadit: add alwaysRunAssembly option to run assemblies when no files are uploaded (#290 / @goto-bus-stop)
  • core: use iteratePlugins inside updateAll (#312 / @richardwillars)
  • core: improve error when plugin does not have ID (#309 / @richardwillars)
  • tus: Clear stored uploadUrl on uppy.resetProgress() call (#314 / @goto-bus-stop)
  • website: simplify examples and code samples, prevent sidebar subheading links anywhere but in docs (@arturi)
  • website: group plugin docs together in the sidebar (@arturi)

0.18.0

Released: 2017-08-15. Theme: Dogumentation and The Golden retriever.

  • <input checked="" disabled="" type="checkbox"> goldenretriever: use Service Woker first, then IndexedDB, add file limits for IndexedDB, figure out what restores from where, add throttling for localStorage state sync (@goto-bus-stop @arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: flag to hide the upload button, for cases when you want to manually stat the upload (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: place close btn inside the Dashboard, don’t close on click outside, place source icon near the file size (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: informer becomes a core API, uppy.info('Smile! 📸', 'warning', 5000) so its more concise with uppy.log('my msg') and supports different UI implementations (@arturi, #271)
  • <input checked="" disabled="" type="checkbox"> docs: first stage — on using plugins, all options, list of plugins, i18n, uppy-server (@arturi, @goto-bus-stop, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: file size sorting (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: show loading screen when checking auth too (@arturi)
  • <input checked="" disabled="" type="checkbox"> uploaders: add direct-to-s3 upload plugin (@goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> core: ability to re-upload all files, even uploadComplete ones, reset progress (@arturi)
  • <input checked="" disabled="" type="checkbox"> goldenretriever: recover selected or in progress files after a browser crash or closed tab: alpha-version, add LocalStorage, Service Worker and IndexedDB (@arturi @goto-bus-stop @nqst #268)
  • <input checked="" disabled="" type="checkbox"> xhrupload: add XHRUpload a more flexible successor to Multipart, so that S3 plugin can depend on it (@goto-bus-stop #242)
  • <input checked="" disabled="" type="checkbox"> core: add getFile method (@goto-bus-stop, #263)
  • <input checked="" disabled="" type="checkbox"> provider: use informer to display errors (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: flatten instagram carousels #234 (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: add uppy-server url as i-am header (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: disable socket channel from restarting an already completed file download (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: make uppy client whitelisting optional. You may use wildcard instead (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: master oauth redirect uri for multiple uppy-server instances
  • <input checked="" disabled="" type="checkbox"> server: options support for redis session storage on standalone server (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: start uppy-server as binary uppy-server (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: store downloaded files based on uuids (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: store upload state on redis (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: use uppy informer for server errors (@ifedapoolarewaju, #272)
  • <input checked="" disabled="" type="checkbox"> server: whitelist multiple uppy clients (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> transloadit: emit an event when an assembly is created (@goto-bus-stop / #244)
  • <input checked="" disabled="" type="checkbox"> transloadit: function option for file-dependent params (@goto-bus-stop / #250)
  • <input checked="" disabled="" type="checkbox"> tus: Save upload URL early on (@goto-bus-stop #261)
  • <input checked="" disabled="" type="checkbox"> tus: return immediately if no files are selected (@goto-bus-stop #245)
  • <input checked="" disabled="" type="checkbox"> uppy-server: add uppy-server metrics to Librato (@ifedapoolarewaju @kiloreux)
  • <input checked="" disabled="" type="checkbox"> webcam: add 1, 2, 3, smile! to webcam, onBeforeSnapshothook (@arturi, #187, #248)
  • <input checked="" disabled="" type="checkbox"> website: live example on the homepage, “try me” button, improve /examples (@arturi)

0.17.0

Released: 2017-07-02

  • <input checked="" disabled="" type="checkbox"> core: restrictions — by file type, size, number of files (@arturi)
  • <input checked="" disabled="" type="checkbox"> provider: improve UI: improve overall look, breadcrumbs, more responsive (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: css-in-js demos, try template-css (@arturi @goto-bus-stop #239)
  • <input checked="" disabled="" type="checkbox"> core: add uppy.reset() as discussed in #179 (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: add nanoraf https://github.com/yoshuawuyts/choo/pull/135/files?diff=unified (@goto-bus-stop, @arturi)
  • <input checked="" disabled="" type="checkbox"> core: file type detection: archives, markdown (possible modules: file-type, identify-filetype) example: http://requirebin.com/?gist=f9bea9602030f1320a227cf7f140c45f, http://stackoverflow.com/a/29672957 (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: make file icons prettier: https://uppy.io/images/blog/0.16/service-logos.png (@arturi, @nqst / #215)
  • <input checked="" disabled="" type="checkbox"> fileinput: allow retriving fields/options from form (@arturi #153)
  • <input checked="" disabled="" type="checkbox"> server: configurable server port (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: support for custom providers (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> statusbar: also show major errors, add “error” state (@goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> statusbar: pre/postprocessing status updates in the StatusBar (@goto-bus-stop, #202)
  • <input checked="" disabled="" type="checkbox"> statusbar: show status “Upload started...” when the remote upload has begun, but no progress events received yet (@arturi)
  • <input checked="" disabled="" type="checkbox"> statusbar: work towards extracting StatusBar to a separate plugin, bundle that with Dashboard? (@goto-bus-stop, @arturi)
  • <input checked="" disabled="" type="checkbox"> tus/uppy-server: Support metadata in remote tus uploads (@ifedapoolarewaju, @goto-bus-stop / #210)
  • <input checked="" disabled="" type="checkbox"> uploaders: add direct-to-s3 upload plugin and test it with the flow to then upload to transloadit, stage 1, WIP (@goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> uppy/uppy-server: Make a barely working Instagram Plugin (@ifedapoolarewaju / #21)
  • <input checked="" disabled="" type="checkbox"> uppy/uppy-server: Make a barely working Instagram Plugin (@ifedapoolarewaju / #21)
  • <input checked="" disabled="" type="checkbox"> uppy/uppy-server: allow google drive/dropbox non-tus (i.e multipart) remote uploads (@arturi, @ifedapoolarewaju / #205)
  • <input checked="" disabled="" type="checkbox"> uppy/uppy-server: some file types cannot be downloaded/uploaded on google drive (e.g google docs). How to handle that? (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> uppy: fix google drive uploads on mobile (double click issue) (@arturi)

0.16.2

Released: 2017-05-31.

  • <input checked="" disabled="" type="checkbox"> core: update prettier-bytes to fix the IE support issue https://github.com/Flet/prettier-bytes/issues/3 (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: use URL.createObjectURL instead of resizing thumbnails (@arturi, @goto-bus-stop / #199)
  • <input checked="" disabled="" type="checkbox"> dashboard: Fix ETA when multiple files are being uploaded (@goto-bus-stop, #197)
  • <input checked="" disabled="" type="checkbox"> transloadit: Fix receiving assembly results that are not related to an input file (@arturi, @goto-bus-stop / #201)
  • <input checked="" disabled="" type="checkbox"> transloadit: Use the tus_upload_url to reliably link assembly results with their input files (@goto-bus-stop / #207)
  • <input checked="" disabled="" type="checkbox"> transloadit: move user-facing strings into locale option (@goto-bus-stop / https://github.com/transloadit/uppy/commit/87a22e7ee37b6fa3754fa34868516a6700306b60)
  • <input checked="" disabled="" type="checkbox"> webcam: Mute audio in realtime playback (@goto-bus-stop / #196)

0.16.1

Released: 2017-05-13

0.16.0

Released: 2017-05-12. Theme: Transloadit integration, getting things in order. Favorite Uppy Server version: 0.5.0.

  • <input checked="" disabled="" type="checkbox"> uploaders: make sure uploads retry/resume if started when offline or disconnected, retry when back online / failed https://github.com/transloadit/uppy/pull/135 (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> transloadit: add basic (beta) version of Transloadit plugin (@goto-bus-stop, @kvz, @tim-kos / #28)
  • <input checked="" disabled="" type="checkbox"> transloadit: emit an upload event w/ tl data when a file upload is complete (#191 @goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> webcam: implement reading audio+video from Webcam (@goto-bus-stop / #175)
  • <input checked="" disabled="" type="checkbox"> webcam: Make the webcam video fill the available space as much as possible (@goto-bus-stop / #190)
  • <input checked="" disabled="" type="checkbox"> tus: Merge tus-js-client options with uppy-tus. Hence, enable custom headers support (@goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> multipart/tus: Remove Promise.all() calls with unused results (@goto-bus-stop / #121)
  • <input checked="" disabled="" type="checkbox"> dashboard: fix Dashboard modal close button position (@goto-bus-stop / #171)
  • <input checked="" disabled="" type="checkbox"> core: pass through errors (@goto-bus-stop / #185)
  • <input checked="" disabled="" type="checkbox"> core: accept a DOM element in target: option (@goto-bus-stop / #169)
  • <input checked="" disabled="" type="checkbox"> core: Remove the last few potentially buggy uses of document.querySelector (@goto-bus-stop)
  • <input checked="" disabled="" type="checkbox"> dashboard: Fix dashboard width when multiple instances exist (@goto-bus-stop / #184)
  • <input checked="" disabled="" type="checkbox"> dashboard: add service logo / name to the selected file in file list (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: begin adding automated tests, maybe try https://facebook.github.io/jest (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: add image preview / thumbnail for remote files, if its in the API of services ? (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: research parallelizing downloading/uploading remote files: start uploading chunks right away, while still storing the file on disk (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: delete file from local disk after upload is successful (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> website: try on a Github ribbon http://tholman.com/github-corners/ (@arturi / #150)
  • <input checked="" disabled="" type="checkbox"> website: different meta description for pages and post (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: well documented README (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> react: [WIP] High-level React Components (@goto-bus-stop / #170)
  • <input checked="" disabled="" type="checkbox"> core: add uppy.close() for tearing down an Uppy instance (@goto-bus-stop / #182)
  • <input checked="" disabled="" type="checkbox"> core: replace babel-preset-es2015-loose by standard es2015 preset with loose option (@goto-bus-stop / #174)

0.15.0

Released: 2017-03-02. Theme: Speeding and cleaning. Favorite Uppy Server version: 0.4.0.

  • <input checked="" disabled="" type="checkbox"> build: update dependencies and eslint-plugin-standard, nodemon --> onchange, because simpler and better options (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: fix Function.caller issue in lib which gets published to NPM package, add babel-plugin-yo-yoify (@arturi #158 #163)
  • <input checked="" disabled="" type="checkbox"> provider: show error view for things like not being able to connect to uppy server should this be happening when uppy-server is unavailable http://i.imgur.com/cYJakc9.png (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: loading indicator while the GoogleDrive / Dropbox files are loading (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: logout link/button? (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> provider: fix breadcrumbs (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: refactor local/remote uploads in tus, allow for pause/resume with remote upload (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: throttle progress updates sent through websockets, sometimes it can get overwhelming when uploads are fast (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: pass file size from Google Drive / Dropbox ? (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: return uploaded file urls (from Google Drive / Dropbox) ? (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: research having less permissions, smaller auth expiration time for security (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> dashboard: basic React component (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: experiment with nanoraf and requestAnimationFrame (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: add throttling of progress updates (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashobard: fix Missing file.progress.bytesTotal property (@arturi #152)
  • <input checked="" disabled="" type="checkbox"> dashboard: switch to prettier-bytes for more user-friendly progress updates (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: fix updateDashboardElWidth() not firing in time, causing container width to be 0 (@arturi)
  • <input checked="" disabled="" type="checkbox"> multipart: treat all 2xx responses as successful, return xhr object in core:upload-success (@arturi #156 #154)
  • <input checked="" disabled="" type="checkbox"> dashboard: throttle StatusBar numbers, so they update only once a second (@arturi, @acconut)
  • <input checked="" disabled="" type="checkbox"> dashboard: add titles to pause/resume/cancel in StatusBar (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: precise circleLength and stroke-dasharray/stroke-dashoffset calculation for progress circles on FileItem (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: don’t show per-file detailed progress by default — too much noise (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: blog post and images cleanup (@arturi)

0.14.0

Released: January 27, 2017. Theme: The new 13: Responsive Dashboard, Standalone & Pluggable Server, Dropbox. Uppy Server version: 0.3.0.

  • <input checked="" disabled="" type="checkbox"> dashboard: use isWide prop/class instead of media queries, so that compact/mobile version can be used in bigger screens too (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: basic “list” view in addition to current “grid” view (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: more icons for file types (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: add totalSize and totalUploadedSize to StatusBar (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: figure out where to place Informer, accounting for StatusBar — over the StatusBar for now (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: add <progress> element for progressbar, like here https://overcast.fm/+BtuxMygVg/. Added hidden for now, for semantics/accessibility (@arturi)
  • <input checked="" disabled="" type="checkbox"> dragdrop: show number of selected files, remove upload btn (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: exclude locales from build (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: i18n for each plugin in options — local instead of global (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: add default pluralization (can be overrinden in plugin options) to Translator (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: use yo-yoify to solve Function.caller / strict mode issue and make our app faster/smaller by transforming template strings into pure and fast document calls (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: a pluggable uppy-server (express / koa for now) (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: standalone uppy-server (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: Integrate dropbox plugin (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: smooth authentication: after auth you are back in your app where you left, no page reloads (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> tus: fix upload progress from uppy-server (@arturi, @ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> core: basic React component — DnD (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: fix support for both ES6 module import and CommonJS requires with add-module-exports babel plugin (@arturi)

0.13.0

To be released: December 23, 2016. Theme: The release that wasn't 🎄.

0.12.0

Released: November 25, 2016. Theme: Responsive. Cancel. Feedback. ES6 Server. Uppy Server version: 0.2.0.

  • <input checked="" disabled="" type="checkbox"> meta: write 0.12 release blog post (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: figure out import/require for core and plugins — just don’t use spread for plugins (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: create a demo video, showcasing Uppy Dashboard for the main page, like https://zeit.co/blog/next (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: update Readme, update screenshot (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: add pre-commit and lint-staged (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: re-do build setup: building at deploy and prepublish when typing npm run release:patch 0.0.1 -> 0.0.2 (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: re-do build setup: es6 src -> es5 lib (use plugin packs from Uppy)
  • <input checked="" disabled="" type="checkbox"> server: re-do build setup: eslint --fix ./src via http://standardjs.com (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: re-do build setup: babel-node or babel-require could do realtime transpiling for development (how does that hook in with e.g. nodemon?) (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: refacor: remove/reduce file redundancy (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: error handling: 404 and 401 error handler (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> server: bug fix: failing google drive (@ifedapoolarewaju)
  • <input checked="" disabled="" type="checkbox"> webcam: stop using the webcam (green light off) after the picture is taken / tab is hidden (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: allow usage without new, start renaming Core() to Uppy() in examples (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: api — consider Yosh’s feedback and proposals https://gist.github.com/yoshuawuyts/b5e5b3e7aacbee85a3e61b8a626709ab, come up with follow up questions (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: local mode — no acquire plugins / external services, just DnD — ActionBrowseTagline (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: only show pause/resume when tus is used (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: cancel uploads button for multipart (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: responsive design — stage 1 (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: write 0.11 release blog post (@arturi)

0.11.0

Released: November 1, 2016. Releasemaster: Artur. Theme: StatusBar and API docs.

  • <input checked="" disabled="" type="checkbox"> core: log method should have an option to throw error in addition to just logging (@arturi)
  • <input checked="" disabled="" type="checkbox"> experimental: PersistentState plugin that saves state to localStorage — useful for development (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: implement new StatusBar with progress and pause/resume buttons https://github.com/transloadit/uppy/issues/96#issuecomment-249401532 (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: attempt to throttle StatusBar, so it doesn’t re-render too often (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: refactor — only load one acquire panel at a time (activeAcquirer or empty), change focus behavior, utilize onload/onunload
  • <input checked="" disabled="" type="checkbox"> experimental: create a Dashboard UI for Redux refactor (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> dashboard: make trigger optional — not needed when rendering inline (@arturi)
  • <input checked="" disabled="" type="checkbox"> fileinput: pretty input element #93 (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: document current Uppy architecture and question about the future (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> test: see about adding tests for autoProceed: true (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: and ability to toggle options in Dashboard example: inline/modal, autoProceed, which plugins are enabled #89 (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: finish https upgrade for uppy.io, uppy-server and tus, set up pingdom notifications (@arturi, @kvz, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> website: update guide, API docs and main page example to match current actual API (@arturi)
  • <input checked="" disabled="" type="checkbox"> uppy-server: Make uppy server have dynamic controllers (@hedgerh)

0.10.0

Released: Septermber 23, 2016. Releasemaster: Artur. Theme: Getting together.

  • <input checked="" disabled="" type="checkbox"> core: expose some events/APIs/callbacks to the user: onFileUploaded, onFileSelected, onAllUploaded, addFile (or parseFile), open modal... (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: how would Uppy work without the UI, if one wants to Uppy to just add files and upload, while rendering preview and UI by themselves #116 — discussion Part 1 (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: refactor towards react compatibility as discussed in https://github.com/transloadit/uppy/issues/110 (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: CSS modules? allow bundling of CSS in JS for simple use in NPM? See #120#issuecomment-242455042, try https://github.com/rtsao/csjs — verdict: not yet, try again later (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: try Web Workers and FileReaderSync for image resizing again — still slow, probably message payload between webworker and regular thread is huge (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: i18n strings should extend default en_US dictionary — if a certain string in not available in German, English should be displayed (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: refactor to smaller components, pass props down (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: option to render Dashboard inline instead of a modal dialog (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: global circular progress bar, try out different designs for total upload speed and ETA (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: show total upload speed and ETA, for all files (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: copy link to uploaded file button, cross-browser (@arturi) (http://i.imgur.com/b1Io34n.png) (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashobard: refreshed design and grand refactor (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: improve file paste the best we can http://stackoverflow.com/a/22940020 (@arturi)
  • <input checked="" disabled="" type="checkbox"> provider: abstract google drive into provider plugin for reuse (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> google drive: improve UI (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> tus: add resumable capability flag (@arturi)
  • <input checked="" disabled="" type="checkbox"> tus: start fixing pause/resume issues and race conditions (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: working Uppy example on Require Bin — latest version straight from NPM http://requirebin.com/?gist=54e076cccc929cc567cb0aba38815105 (@arturi @acconut)
  • <input checked="" disabled="" type="checkbox"> meta: update readme docs, add unpkg CDN links (https://transloadit.edgly.net/releases/uppy/v0.22.0/dist/uppy.min.css) (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: write 0.10 release blog post (@arturi)

0.9.0

Released: August 26, 2016. Releasemaster: Harry.

Theme: Making Progress, Then Pause & Resume.

  • <input checked="" disabled="" type="checkbox"> dashboard: informer interface: message when all uploads are "done" (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: write 0.9 release blog post (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> webcam: a barely working webcam record & upload (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> metadata: Uppy + tus empty metadata value issue in Safari https://github.com/tus/tus-js-client/issues/41 --> tus issue — nailed down, passed to @acconut (@arturi, @acconut)
  • <input checked="" disabled="" type="checkbox"> core: experiment with switching to virtual-dom in a separate branch; experiment with rollup again (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: figure out race conditions (animations not completing because file div gets re-added to the dom each time) with yo-yo/morphdom https://github.com/shama/bel/issues/26#issuecomment-238004130 (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: switch to https://github.com/sethvincent/namespace-emitter — smaller, allows for on('*') (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: add aria-labels and titles everywhere to improve accessibility #114 (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: file name + extension should fit on two lines, truncate in the middle (maybe https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/measureText) (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: implement a circular progress indicator on top of the fileItem with play/pause (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: refactor to smaller components, as discussed in #110 (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: show upload remaining time and speed, option to disable (@arturi)
  • <input checked="" disabled="" type="checkbox"> google drive: refactor to smaller components, as discussed in #110 (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> meta: reach out to choo author (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: write 0.8 release blog post (@arturi)
  • <input checked="" disabled="" type="checkbox"> metadata: add labels to fields in fileCard (@arturi)
  • <input checked="" disabled="" type="checkbox"> metadata: the aftermath — better UI (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: Get IE6 on Win XP to run Uppy and see it fall back to regular form upload #108 (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: refactor tests, add DragDrop back (@arturi)
  • <input checked="" disabled="" type="checkbox"> tus: update uppy to tus-js-client@1.2.1, test on requirebin (@arturi)
  • <input checked="" disabled="" type="checkbox"> tus: add ability to pause/resume all uploads at once (@arturi)
  • <input checked="" disabled="" type="checkbox"> tus: add ability to pause/resume upload (@arturi)

0.8.0

Released: July 29, 2016. Releasemaster: Artur. Theme: The Webcam Edition.

  • <input checked="" disabled="" type="checkbox"> core: fix bug: no meta information from uppy-server files (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: fix bug: uppy-server file is treated as local and directly uploaded (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> uppy-server: hammering out websockets/oauth (@hedgerh, @acconut)
  • <input checked="" disabled="" type="checkbox"> debugger: introduce MagicLog as a way to debug state changes in Uppy (@arturi)
  • <input checked="" disabled="" type="checkbox"> modifier: A MetaData plugin to supply meta data (like width, tag, filename, user_id) (@arturi)
  • <input checked="" disabled="" type="checkbox"> modifier: pass custom metadata with non-tus-upload. Maybe mimic meta behavior of tus here, too (@arturi)
  • <input checked="" disabled="" type="checkbox"> modifier: pass custom metadata with tus-upload with tus-js-client (@arturi)
  • <input checked="" disabled="" type="checkbox"> webcam: initial version: webcam light goes on (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> progress: better icons, styles (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: better mime/type detection (via mime + extension) (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: add deep-freeze to getState so that we are sure we are not mutating state accidentally (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: release “Uppy Begins” post (@arturi @kvz)
  • <input checked="" disabled="" type="checkbox"> meta: better readme on GitHub and NPM (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: add pre-commit & lint-staged (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: add next-update https://www.npmjs.com/package/next-update to check if packages we use can be safely updated (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: blog polish — add post authors and their gravatars (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: UI revamp, more prototypes, background image, make dashboard nicer (@arturi)
  • <input checked="" disabled="" type="checkbox"> dashboard: try a workflow where import from external service slides over and takes up the whole dashboard screen (@arturi)
  • <input checked="" disabled="" type="checkbox"> modal: merge modal and dashboard (@arturi)

0.7.0

Released: July 11, 2016. Theme: Remote Uploads, UI Redesign.

  • <input checked="" disabled="" type="checkbox"> core: Investigate if there is a way to manage an oauth dialog and not navigate away from Uppy; Put entire(?) state into oauth redirect urls / LocalStorage with an identifier ? (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: Rethink UI: Part I (interface research for better file selection / progress representation) (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: let user cancel uploads in progress (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: resize image file previews (to 100x100px) for performance (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: add tus-js-client when it's node-ready (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> server: make uppy-server talk to uppy-client in the browser, use websockets. (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> dashboard: new “workspace” plugin, main area that allows for drag & drop and shows progress/actions on files, inspired by ProgressDrawer
  • <input checked="" disabled="" type="checkbox"> website: add new logos and blog (@arturi)
  • <input checked="" disabled="" type="checkbox"> drive: Return cb after writing all files https://github.com/transloadit/uppy-server/commit/4f1795bc55869fd098a5c81a80edac504fa7324a#commitcomment-17385433 (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> server: Make Google Drive files to actually upload to the endpoint (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> build: browsersync does 3 refreshes, can that be one? should be doable via cooldown/debounce? -> get rid of require shortcuts (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: regular + min + gzipped versions of the bundle (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: set up a simple and quick dev workflow — watch:example (@arturi)

0.6.4

Released: June 03, 2016. Theme: The aim low release.

  • <input checked="" disabled="" type="checkbox"> build: minification of the bundle (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: revisit sourcemaps for production. can we have them without a mandatory extra request?
  • <input checked="" disabled="" type="checkbox"> build: supply Uppy es5 and es6 entry points in npm package (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: switch to https://www.npmjs.com/package/npm-run-all instead of parallelshell (@arturi)
  • <input checked="" disabled="" type="checkbox"> drive: Make sure uppy-server does not explode on special file types: https://dl.dropboxusercontent.com/s/d4dbxitjt8clo50/2016-05-06%20at%2022.41.png (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> modal: accessibility. focus on the first input field / button in tab panel (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: figure out crazy rerendering of previews by yoyo/bel: https://github.com/shama/bel/issues/26, https://github.com/shama/bel/issues/27 (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: substantial refactor of mount & rendering (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: better state change logs for better debugging (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: improve styles, add preview icons for all (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: Start implementing the SERVER-PLAN.md, remote files should be added to state.files and marked as remote (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> test: Add pass/fail Saucelabs flag to acceptance tests (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Polish Saucelabs stats (social badge + stats layout) (@arturi)
  • <input checked="" disabled="" type="checkbox"> meta: Create Uppy logos (@markstory)
  • <input checked="" disabled="" type="checkbox"> website: fix examples and cleanup (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Add Saucelabs badges to uppy.io (@kvz)
  • <input checked="" disabled="" type="checkbox"> website: fix disappearing icons issue, postcss-inline-svg (@arturi)

0.0.5

Released: May 07, 2016. Theme: Acceptance tests and Google Drive Polish.

  • <input checked="" disabled="" type="checkbox"> test: Wire saucelabs and travis togeteher, make saucelabs fail fatal to travis builds
  • <input checked="" disabled="" type="checkbox"> test: Add addFile-hack so we can have acceptance tests on Safari as well as Edge (@arturi)
  • <input checked="" disabled="" type="checkbox"> drive: possible UI polish (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> drive: write files to filesystem correctly (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> test: Fix 15s timeout image.jpg (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: Sign up for Browserstack.com Live account so we can check ourselves what gives and verify saucelabs isn't to blame (@arturi) <-- Turns out, Saucelabs already does that for us
  • <input checked="" disabled="" type="checkbox"> test: Get tests to pass Latest version of Internet Explorer (Windows 10), Safari (OSX), Firefox (Linux), Opera (Windows 10) (@arturi) <-- IE 10, Chrome, Firefox on Windows and Linux, but not Safari and Microsoft Edge — Selenium issues
  • <input checked="" disabled="" type="checkbox"> test: Get saucelabs to show what gives (errors, screenshots, anything) (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: sourcemaps for local development (@arturi) <-- Not adding it in production to save the extra request. For local dev, this was added already via Browserify
  • <input checked="" disabled="" type="checkbox"> core: Add polyfill for fetch (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: Apply plugins when DOM elements aren't static (#25)
  • <input checked="" disabled="" type="checkbox"> core: figure out the shelf thing https://transloadit.slack.com/archives/uppy/p1460054834000504 https://dl.dropboxusercontent.com/s/ypx6a0a82s65o0z/2016-04-08%20at%2010.38.png (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: reduce the monstrous 157.74Kb prebuilt bundle footprint https://dl.dropboxusercontent.com/s/ypx6a0a82s65o0z/2016-04-08%20at%2010.38.png <-- we see no way to optimize at this stage
  • <input checked="" disabled="" type="checkbox"> drive: add breadcrumb navigation (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> drive: convert google docs to office format (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> modal: Avoid duplicating event listeners <-- deprecated by yoyo
  • <input checked="" disabled="" type="checkbox"> progressbar: make it great again (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: figure out why the whole list is replaced with every update (dom diff problems) (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: Let Travis use the Remote WebDriver instead of the Firefox WebDriver (https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-Sauce-Labs), so Saucelabs can run our acceptance tests against a bunch of real browsers. Local acceptance tests keep using Firefox <-- need to add command to Travis (@arturi)
  • <input checked="" disabled="" type="checkbox"> test: Move failing multipart test back from v0.0.5 dir, make it pass (@arturi)
  • <input checked="" disabled="" type="checkbox"> tus: Add support tus 1.0 uploading capabilities (#3) <-- works!
  • <input checked="" disabled="" type="checkbox"> website: Make cycling through taglines pretty (in terms of code and a nice animation or sth) (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Move the activity feed from http://uppy.io/stats to the Uppy homepage (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Polish http://uppy.io/stats and undo its CSS crimes (@arturi)

0.0.4

Released: April 13, 2016.

  • <input checked="" disabled="" type="checkbox"> server: Upgrade to 0.0.4 (@kvz)
  • <input checked="" disabled="" type="checkbox"> drive: Add Google Drive plugin unit test (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> drive: Add a barely working Google Drive example (without Modal, via e.g. target: "div#on-my-page") (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> drive: Make sure http://server.uppy.io is targeted on uppy.io; and localhost is targeted elsewhere (also see https://github.com/hughsk/envify) (@kvz)
  • <input checked="" disabled="" type="checkbox"> test: Setup one modal/dragdrop acceptance test (@arturi)
  • <input checked="" disabled="" type="checkbox"> drive: Make sure http://server.uppy.io is targeted on uppy.io; and localhost is targeted elsewhere (also see https://github.com/hughsk/envify) (@kvz)
  • <input checked="" disabled="" type="checkbox"> website: Add a http://uppy.io/stats page that inlines disc.html as well as displays the different bundle sizes, and an activity feed (@kvz)
  • <input checked="" disabled="" type="checkbox"> dragdrop: refactor & improve (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: fix i18n & DragDrop examples (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Provide simple roadmap in examples (#68, @kvz)
  • <input checked="" disabled="" type="checkbox"> website: Upgrade Hexo (@kvz)
  • <input checked="" disabled="" type="checkbox"> test: Make failing acceptance tests fatal (@kvz)
  • <input checked="" disabled="" type="checkbox"> allow for continuous acquiring, even after all plugins have “run” (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> build: clean up package.json. We've accumulated duplication and weirdness by hacking just for our current problem without keeping a wider view of what was already there (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: fix browsersync & browserify double reloading issue (@arturi)
  • <input checked="" disabled="" type="checkbox"> build: sourcemaps for examples (@arturi)
  • <input checked="" disabled="" type="checkbox"> complete: Complete Plugin of type/stage: presenter. "You have successfully uploaded 3 files". Button: Close modal. (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: allow for continuous acquiring, even after all plugins have “run” (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: come up with a draft standard file format for internal file handling (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: Pluralize collections (locales, just l like plugins) (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: re-think running architecture: allow for acquiring while uploading (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: Rename progress to progressindicator (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: Rename selecter to acquirer (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: Rename view to orchestrator (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: start on component & event-based state management with yo-yo (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: Upgrade from babel5 -> babel6 (@kvz)
  • <input checked="" disabled="" type="checkbox"> dragdrop: Fix 405 Not Allowed, (error) handling when you press Upload with no files (#60, @arturi, thx @hpvd)
  • <input checked="" disabled="" type="checkbox"> modal: UppyModal [type=submit] { display: none }, use Modal's own Proceed button to progress to next stage (@arturi)
  • <input checked="" disabled="" type="checkbox"> modal: covert to component & event-based state management (@arturi)
  • <input checked="" disabled="" type="checkbox"> modal: Make sure modal renders under one dom node — should everything else too? (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> modal: refactor and improve (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: show link to the uploaded file (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: show file type names/icons for non-image files (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: show uploaded files, display uploaded/selected count, disable btn when nothing selected (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: implement basic version, show upload progress for individual files (@arturi)
  • <input checked="" disabled="" type="checkbox"> progressdrawer: show previews for images (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: Add a deploy target for uppy-server so we can use it in demos (#39, @kvz)
  • <input checked="" disabled="" type="checkbox"> test: Add a passing dummy i18n acceptance test, move failing multipart test to v0.5.0 dir (@kvz)
  • <input checked="" disabled="" type="checkbox"> test: Add acceptance tests to Travis so they are run on every change (@kvz)
  • <input checked="" disabled="" type="checkbox"> test: Get Firefox acceptance tests up and running both local and on Travis CI. Currently both failing on StaleElementReferenceError: Element not found in the cache - perhaps the page has changed since it was looked up https://travis-ci.org/transloadit/uppy/builds/121175389#L478
  • <input checked="" disabled="" type="checkbox"> test: Get saucelabs account https://saucelabs.com/beta/signup/OSS/None (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> test: Install chromedriver ()
  • <input checked="" disabled="" type="checkbox"> test: Switch to using Firefox for acceptable tests as Travis CI supports that (https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-xvfb-to-Run-Tests-That-Require-a-GUI) (@kvz)
  • <input checked="" disabled="" type="checkbox"> test: Write one actual test (e.g. Multipart) (#2, #23, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> tus: Resolve promise when all uploads are done or failed, not earlier (currently you get to see '1 file uploaded' and can close the modal while the upload is in progress) (@arturi)
  • <input checked="" disabled="" type="checkbox"> website: Filter taglines (@kvz)
  • <input checked="" disabled="" type="checkbox"> website: utilize browserify index exposers to rid ourselves of ../../../.. in examples (@kvz)

0.0.3

Released: March 01, 2016.

  • <input checked="" disabled="" type="checkbox"> core: push out v0.0.3 (@kvz)
  • <input checked="" disabled="" type="checkbox"> build: release-(major|minor|patch): git tag && npm publish (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: Allow users to set DOM elements or other plugins as targets (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: Create a progressbar/spinner/etc plugin (#18, @arturi)
  • <input checked="" disabled="" type="checkbox"> core: Decide on how we ship default styles: separate css file, inline (@kvz, @hedgerh, @arturi, @tim-kos)
  • <input checked="" disabled="" type="checkbox"> core: Decide on single-noun terminology (npm, umd, dist, package, cdn, module -> bundler -> bundle), and call it that through-out (@kvz)
  • <input checked="" disabled="" type="checkbox"> core: throw an error when one Plugin is .used twice. We don't support that now, and will result in very confusing behavior (@kvz)
  • <input checked="" disabled="" type="checkbox"> dragdrop: Convert DragDrop to adhere to Dummy's format, so it's compatible with the new Modal (@arturi)
  • <input checked="" disabled="" type="checkbox"> drive: Convert GoogleDrive to adhere to Dummy's format, so it's compatible with the new Modal (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> modal: Add barely working Modal plugin that can be used as a target (#53, #50, @arturi)
  • <input checked="" disabled="" type="checkbox"> modal: Improve Modal API (@arturi, @kvz)
  • <input checked="" disabled="" type="checkbox"> modal: Make ProgressBar work with the new Modal (@kvz, @arturi)
  • <input checked="" disabled="" type="checkbox"> modal: Make Modal prettier and accessible using Artur's research (@arturi)
  • <input checked="" disabled="" type="checkbox"> modal: Make the Modal look like Harry's sketchup (@arturi)
  • <input checked="" disabled="" type="checkbox"> modal: Rename FakeModal to Modal, deprecating our old one (@kvz)
  • <input checked="" disabled="" type="checkbox"> modal: use classes instead of IDs and buttons instead of links (@arturi)
  • <input checked="" disabled="" type="checkbox"> server: package.json (@hedgerh)
  • <input checked="" disabled="" type="checkbox"> test: Fix and enable commented out use plugins & other core unit test (@arturi)

0.0.2

Released: February 11, 2016.

  • <input checked="" disabled="" type="checkbox"> build: Use parallelshell and tweak browserify to work with templates (@arturi)
  • <input checked="" disabled="" type="checkbox"> core: Add basic i18n support via core.translate() and locale loading (#47, @arturi)
  • <input checked="" disabled="" type="checkbox"> core: implement a non-blocking install method (for Progressbar, for example) (@arturi, @kvz)
  • <input checked="" disabled="" type="checkbox"> core: Implement ejs or es6 templating (@arturi, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> core: Improve on _i18n support, add tests (#47, @arturi)
  • <input checked="" disabled="" type="checkbox"> core: Integrate eslint in our build procedure and make Travis fail on errors found in our examples, Core and Plugins, such as > 100 char lines (@kvz)
  • <input checked="" disabled="" type="checkbox"> docs: Fix build-documentation.js crashes, add more docs to Utils and Translator (@arturi, @kvz)
  • <input checked="" disabled="" type="checkbox"> dragdrop: Use templates, autoProceed setting, show progress (#50, #18, @arturi)
  • <input checked="" disabled="" type="checkbox"> meta: Implement playground to test things in, templates in this case
  • <input checked="" disabled="" type="checkbox"> server: Create a (barely) working uppy-server (#39, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> website: Fix Uppy deploys (postcss-svg problem) (@arturi, @kvz)

0.0.1

Released: December 20, 2015.

  • <input checked="" disabled="" type="checkbox"> core: Individual progress (#24)
  • <input checked="" disabled="" type="checkbox"> core: Setup basic Plugin system (#1, #4, #20)
  • <input checked="" disabled="" type="checkbox"> core: Setup build System (#30, #13, @hedgerh)
  • <input checked="" disabled="" type="checkbox"> dragdrop: Add basic DragDrop plugin example (#7)
  • <input checked="" disabled="" type="checkbox"> dropbox: Add basic Dropbox plugin example (#31)
  • <input checked="" disabled="" type="checkbox"> website: Add CSS Framework (#14)
  • <input checked="" disabled="" type="checkbox"> website: Create Hexo site that also contains our playground (#5, #34, #12 #22, #44, #35, #15, #37, #40, #43)