
Uppy 1.0: Your best friend in file uploading - kvz
https://uppy.io/blog/2019/04/1.0/
======
kvz
One of the developers here. We worked three years to make Uppy the best open
source file uploader the world has seen. Looking forward to your brutally
honest feedback! Happy to answer questions too.

~~~
dan1234
How did you manage to fund this? Or was it just a side project your team
worked on?

~~~
hn_throwaway_99
I am not OP, but in the blog post the author mentions he works for
Transloadit, which (after googling it as I wasn't previously familiar with it)
is a service which handles lots of different file processing tasks for
developers (e.g. image manipulation, audio/video encoding, virus scanning,
etc.)

If you are a service selling a product targeted towards developers, I can't
think of better marketing than something like this, where tons of users will
use it for free, but many users (like me) who hadn't previously heard about
your core product will find out about it through this.

EDIT: One thing to add about the marketing angle, another commenter mentioned
that this was posted multiple times before reaching the front page, and some
of the generic "Awesome! Will definitely try this!" comments here by low-karma
users makes me think there is some astro-turfing going on. That said, I don't
really mind it. Author created a useful tool, open sourced it, and I'm now
glad I know about it. Kudos to him and if it helps more people become aware of
his business (which obviously funded his creation of this open source tool)
more power to him.

~~~
kvz
Replied to the GP directly about how we find this, you pretty much nailed it!

As for astroturfing: I am certainly guilty of self-promotion. When this post
didn’t get traction, after a few days I thought maybe Show HN finds this
interesting. In addition, my team of ~5 will have upvoted this post (although
that probably works counter productive with HN's algorithms, I
couldn’t/wouldn't stop them). Other than that we don’t deploy any schemes
here, what you likely see is that, because we exploded on Reddit over the
weekend, its users are posting it to HN too.

~~~
hn_throwaway_99
Thanks for responding, and for creating this tool in the first place. Great
work!

------
craz8
I’m using Ruby Shrine in an internal project, and it uses Uppy for the client
upload magic

We’re not using much of that part yet, but it’s good to know that this is
being actively developed

Really loving Shrine too!

~~~
kvz
I don’t know Ruby much but Shrine seems great from what I've seen. I’ve been
talking to Janko (its author) and it has been a true pleasure to cooperate
with him.

------
grimmfang
I've tested it some and it appears to work great. Will be adding this to a
number of my projects. I greatly appreciate the work you guys have put in.

------
markdown
Filestack deleted my applications (but not my account) without even the
courtesy of letting me know beforehand. I still don't know why they did it.

Uppy looks like a great replacement.

~~~
kvz
You'll hear me say good things about all companies in our space but I'm not so
sure what to make of Filestack these days. They run FUD campaigns against the
use of open source uploaders [https://blog.filestack.com/api/rethinking-open-
source-upload...](https://blog.filestack.com/api/rethinking-open-source-
uploader/) which obviously makes it harder for me to defend them in threads
like these.

------
agrippanux
Fantastic timing, tonight I am putting together a site for my son's project
that requires file uploads and I will use this.

~~~
kvz
Perfect, let us know how it goes!

------
yread
Happy user of tus here. Keep up the good work.

~~~
kvz
Thank you! Happy tus users should go on our homepage : )
[https://tus.io/](https://tus.io/) Feel free to add your company there.

------
barking
I used to use fireftp on firefox before it was broken by some change or other
firefox brought in that crippled loads of extensions.

I now open up waterfox on those occasions when I need to use fireftp.

I'll definitely give this a try out if it can do the job instead

------
babayega2
Great job guys. I want to ask: does it handle Excel upload and basic editing
of the Excel file ? The examples on display only show images upload. Do you
guys know such library? Like, the one used by Dataiku for Excel upload.

~~~
epse
It supports uploading of any file, but not editing. It's not really an office
suite, I think

------
raboukhalil
Nice work, looks awesome! Curious whether you could use this to upload files
directly to google cloud storage without having a server in the middle?

~~~
wemdyjreichert
Whether or not this is possible, it seems like a serious DDOS risk. Some one
with malicious intent could give you a huge hosting bill. It might be
difficult to apply IP-based rate-limiting without a server.

~~~
kvz
There's two ways to directly upload to S3 buckets (or GCS):

1) You allow append-only access for the world, maybe in combination with an
expiry policy. Indeed only useful for a few use cases I'd say

2) You deploy signing of requests, and you only sign for those who are logged
in, or otherwise match criteria important to your app. A bit more hassle, and
still requires server-side code (whether traditionally hosted or
'serverless'), but at least your servers aren't receiving the actual uploads,
taking away a potential SPOF and bottle-neck.

That said, I'm not sure how serious you are about handling file uploads, but
uploading directly to buckets often means uploading to a single region (on
aws, a bucket may be hosted in us-east-1 for instance, meaning high latency
for folks in e.g. Australia). This may or may not be problematic for your use
case, but it did bring us complaints when we had that.

~~~
ajbeach22
>That said, I'm not sure how serious you are about handling file uploads, but
uploading directly to buckets often means uploading to a single region (on
aws, a bucket may be hosted in us-east-1 for instance, meaning high latency
for folks in e.g. Australia). This may or may not be problematic for your use
case, but it did bring us complaints when we had that.

You can use [https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-
acc...](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-
acceleration.html)

S3 acceleration uses the cloudfront distributed edge locations. As the data
arrives at an edge location, data is routed to Amazon S3 over an optimized
network path. This costs more money though.

------
pnutjam
Does this have an API for repeatable scripted uploads?

~~~
kvz
Not entirely sure if I read your question right, but Uppy does have a
scriptable API so that you could do uploads without bringing in all the UI
yes. So you could write your own UI, or have some kind of automation in place.

But maybe you're talking about something else? Happy to dive in deeper

~~~
pnutjam
Just curios if this would function as a replacement for sftp uploads. I assume
it would need to be put behind our own authentication and https certs. Sftp is
very scriptable, but seems hard to explain to many users.

It would be nice if this can function as a point and click upload point and
also a scriptable upload point for savvier users.

~~~
kvz
I think you could support both. If you'd use Transloadit we could export to
SFTP. This way your existing integration could be left untouched, but you'd
add Uppy+Transloadit+SFTP export as an addition for receiving files from users
who can't or don't want to operate an SFTP client.

Just a thought!

------
mhuffman
Well done! This is something that can be fraught with edge-case issues.
However, it looks like you pulled it off in a slick package. Good job!

~~~
kvz
Thank you! Absolutely, just check our issue tracker, still filled with edge
cases that need fixing : )

(and yes, we'll get to all of them :)

------
adamkay
Looks great, awesome job.

I see there's ability to upload directly to S3, any ability to upload direct
to Azure Blob store?

~~~
kvz
Sorry, no. If you really need it today, you could hook up Uppy to Transloadit,
and it could export to Azure. But requires a paid subscription. I am happy to
accept a PR for Uppy to enable direct Azure blob storage uploads however!
(does this work with signing URLs also?)

~~~
adamkay
Yes, Azure supports Shared Access Signature (SAS) tokens. [1]

I'm afraid my Javascript is rather poor but I'll happily look at what it would
take to create a plugin for Azure this weekend. Presumably the S3 multi-part
uploader and associated companion server would be a good base to understand
the flow?

[1]: [https://docs.microsoft.com/en-
us/azure/storage/common/storag...](https://docs.microsoft.com/en-
us/azure/storage/common/storage-dotnet-shared-access-signature-part-1)

~~~
kvz
I see, that would be amazing! Yes, it would, to give a head start:

    
    
      npm i && npm run bootstrap && npm run dev:with-companion
    

Then visit [http://localhost:3452](http://localhost:3452) and it should get
you a working dev environment with auto-reloads and all that jazz.

------
exwizzard
Will you be adding vue support?

~~~
kvz
We would like to have Vue support but we don't have sufficient experience on
our team to come up with something really sweet. On the community forum there
are examples and posts by the community to make it working (but yes definitely
not first class citizen like our React/Native integration). If you have some
specific ideas about how it should look, probably weigh in there and maybe
with a few enthusiasts we could hammer this out!

------
ajushi
What differentiates this with the other successful JS file upload libraries?

~~~
kvz
It depends (sorry :) what uploader you want me to compare with, there's
different differences with different uploaders. I think we tick all the boxes
feature wise though. And Uppy is modular so you can easily leave out what you
don't like (e.g. just use Core and roll your own UI, or just use Webcam
support, or not at all). If you build with e.g. Webpack, that makes Uppy a lot
smaller too.

One big differentiator with other open source uploaders is that we go above
and beyond to get higher degrees of reliability, to the point of
ridiculousness, maybe:

\- We use [https://tus.io](https://tus.io) under the hood for resumability to
make file uploads survive bad network conditions (train enters a tunnel, you
walk to the basement, share something from a club, switch cell towers, walk in
range of wifi, have spotty wifi, are in rural areas). Tus is an open standard
with many implementations.

\- Our 'Golden Retriever' plugin can recover files after a browser crash or
accidental navigate-away (full post + video from our hacking trip where we
built this: [https://uppy.io/blog/2017/07/golden-
retriever/](https://uppy.io/blog/2017/07/golden-retriever/))

The reason we obsess over this is that Transloadit (our company) was getting
complaints about files not making it to our encoding platform, even though the
platform was stable. We realized one out of maybe every thousand uploads just
fails due to bad network conditions. Something you don't notice when you
either have a very stable connection or don't upload so many files. But it's
wild out there, and if you handle 150.000 uploads a day, you can see how many
complaints you might end up receiving. So we got a bit frustrated with the
state of uploading (downloading had been resumable since HTTP/1.1) and that's
how we ended up creating [https://tus.io](https://tus.io) (, and then Uppy)

------
neiman
I was looking for something like that just the other day. Cheers!

------
nonsince
Hey, I recognise that bar in amsterdam, it’s brouwerij ‘t ij

~~~
kvz
Correct! :) We're a remote company but had a good time there during our
Amsterdam meetup ([https://transloadit.com/blog/2016/03/transloadit-team-
meetup...](https://transloadit.com/blog/2016/03/transloadit-team-meetup/))

------
LogicX
Has anyone switched to/from Uploadcare? (
[https://uploadcare.com/](https://uploadcare.com/) ) - would love to hear how
they compare.

~~~
kvz
Uploadcare is a competitor of Uppy's parent company: Transloadit. Fortunately
the space is large enough that we don't care for cutthroat mentalities. I
think so far both companies has said positive things about each other, and
that's a tradition I'd like to uphold! I think their file uploader looks very
good and I marvel at their marketing. Their engineering team also looks like
they could all be respected co-workers. So a hat-tip to them! I don't think
many people will have tried both since Uppy (being recommended for production)
is rather new, but I'd also look forward to hearing about experiences with
that.

Some differences between the uploader widgets themselves:

\- Uppy is open source and can be used with your own back-end. Free as in
liberty & pizza

\- Uppy is vanilla JS with support for React/Native

\- Uppy has resumability (via the open standard
[https://tus.io](https://tus.io)) and can recover from browser crashes /
accidental navigate-aways. Uploads will just continue where they broke off

\- Uppy supports _less_ external sources (e.g. 1.0 comes with support for
Dropbox, Instagram, Google Drive, but we don't yet have support for e.g.
Facebook, or Google Photos)

Some differences between the companies/back-ends (should you optionally use
Uppy+Transloadit to handle the uploading, fetching from e.g. Instagram, and
encoding):

\- Transloadit offers more encoding features (Uploadcare is making good
progress tho, they recently added video encoding for instance). Those features
can be combined in workflows. So you leave a JSON recipe ("Template") with us
that says: for every video, take out thumbnails, watermark some of those,
detect faces in others, store those separately, all in one 'job', or how we
like to call it: "Assembly"; because it can be a chain of virtually infinite
jobs that take the output of other jobs as input for their own

\- Transloadit does _not_ offer a CDN, instead only exports results to
storage/buckets you own (not sure if we'll add this)

Just a _few_ differences, there are more. But it seems they are getting fewer
and maybe in 5 years we'll be identical companies : ) but yeah so there's some
time left until then that we can still afford pleasantries :D

~~~
dmitrymukhin
<3

------
polyterative
definitely gonna try this soon

------
Nicksil
Prev. 2 days:

\-
[https://news.ycombinator.com/item?id=19756159](https://news.ycombinator.com/item?id=19756159)
(same ID as prev. post by same user)

\-
[https://news.ycombinator.com/item?id=19759039](https://news.ycombinator.com/item?id=19759039)

\-
[https://news.ycombinator.com/item?id=19765780](https://news.ycombinator.com/item?id=19765780)

~~~
shimms
I check hacker news regularly and this was the first time I saw it. Reposts
aren’t inherently bad. I’m glad it was reposted and I’ve now had the chance to
learn about it.

~~~
kvz
What you likely see here is that, because we exploded on Reddit over the
weekend, its users have been posting it to HN too. Those posts aren’t
mine/ours.

~~~
davidbarker
I'm one of the linked posters, and I found it via Reddit. It looks very
impressive — well done, and thanks!

------
carmate383
It took that many people to build a glorified JavaScript wrapper? Good god.

~~~
kvz
All Transloadians only helped out last month, before that it was just the Uppy
core team (and contributors). So it's not that many people, and it's not a
wrapper either. Well one could argue, it's a wrapper around
[https://tus.io](https://tus.io) but we also had to write that, so short
answer: no : )

