What is Fine Uploader, and why should I care?

Frankly, I’m not sure you should care. There are a lot of JavaScript libraries out there. In fact, six more were published in the time it took you to read this sentence. And a file upload library? Can’t you just upload files by submitting a form? Ah, naiveté, thy name is overoptimistic developer. By the time you realize your project should have pulled in a library to handle file uploads, a year has passed, along with dozens of bugs and development hours spent learning the File API, how to “simulate” ajax uploads in older browsers, and wringing your hands as you try to understand the nonsensical AWS signature generation algorithms (among other things).

As with all things, the initial and unenlightened requirement to “accept a file from a user” has morphed into something a bit more tricky. Now you need to display thumbnails for dropped images and scale them to conserve bandwidth on mobile networks. And of course, send them directly to your S3 bucket without hitting the server first. And allow users to drop entire folders. And handle several gigabyte files with a graceful recovery in case of the all-but-guaranteed network error. And it goes on (and on) from there.

Fine Uploader evolved into a solution to all of the above problems (and so many more). It started out simply, but grew into an insatiable beast that gobbled up features as users requested them. I resisted at first, but eventually eager developers depending on Fine Uploader convinced me to reconsider my goal to keep Fine Uploader strictly focused on sending files to a generic endpoint. There is certainly something to be said about developing small focused libraries, and I still believe this is a good overall design goal. One of my regrets with Fine Uploader wasn’t taking on development of features above and beyond sending files to the server, but rather I regret baking these all into a single library, even though the user base has benefitted immensely from some of the more peripheral and unique features.

Fine Uploader is and has been developed to solve a number of highly common and complex workflows, from the enterprise applications handling terabytes of incoming files, to small projects that simply need an easy solution for sending files to an S3 or Azure bucket as efficiently as possible. It has served as more than just another JavaScript library, it’s been a highly sought-after solution by developers, not only for the feature set and attention to detail, but also due to the unusually attentive and timely support that is exceptionally uncommon among software libraries. I’ve taken great pride in being almost always available to answer user questions, whether it be on a weekend, in the middle of the night, or from halfway across the world while recovering from tremendous jet lag.

I know how much it sucks to find a library that seems to solve your problems and fit your requirements almost perfectly, only to discover that this immensely complex library doesn’t seem to work as you expect in a particular situation. Is it a bug, or a feature? And why can’t I get the developer to answer my question, or even respond to my question? What do I do now?! I don’t have time to maintain this myself! I gave this story 2 points under the assumption that this damn thing will do all of the work for me! Yes, I know this all too well. I’ve been there, but haven’t we all? I wanted to offer a different experience for users of Fine Uploader, and to some degree, I’ve maintained this same approach for other projects I’m involved in. Granted, I’m not perfect, and sometimes the stress of following through with this lofty goal has broken me and turned me into a less-than-pleasant person to deal with. It happens. Though some may argue I was broken long before Fine Uploader even existed. But I digress…