The build status, immediate-term plans, and future goals of this repository.
We welcome feature requests as edits to the "Backlog" section below.
Before editing this file, please check out How To Contribute to ROADMAP.md- it's a quick read :)
The current Travis test output for this repository.
| Release | Install Command | Build Status |
|---|---|---|
(stable) |
npm install skipper |
![]() |
| edge | npm install skipper@git://github.com/balderdashy/skipper.git |
![]() |
| Module | Build Status (edge) | Latest Stable Version |
|---|---|---|
| skipper-disk | ![]() |
![]() |
| skipper-s3 | ![]() |
![]() |
| skipper-gridfs | ![]() |
![]() |
Need support for a different remote filesystem, or just interested in writing your own adapter?
First read up on how Skipper works, then check out the spec to get started making your own adapter.
Our short-to-medium-term roadmap items, in order of descending priority:
(feel free to suggest things)
| Feature | Owner | Details |
|---|---|---|
acceptFile lifecycle callback |
want to help? | allow a function to be optionally passed in as an option to .upload(). This fn is called repeatedly- each time a new incoming file upload arrives on the upstream. It is passed metadata about that multipart upload including its proclaimed size, MIME type, etc., and its responsibility is to decide whether to (i) start uploading the file (ii) ignore the file, throwing away its incoming bytes, but allowing it to continue in order to handle the other files, or (iii) terminate the request entirely. This could work a lot like the accept callback provided by socket.io that determines whether or not to allow an incoming socket to connect. Function signature: acceptFile: function (fileMetadata,cb){}, where, at least to start with, fileMetadata is a simple object with three properties: a numeric size (in bytes), a string type (MIME type), and a string filename. To accept an incoming file, call cb(null, true). To ignore a file, call cb(null, false). And to terminate, giving up on the entire file upload request altogether, call cb(new Error('some helpful error')). If terminated, the callback to .upload() will be triggered with a truthy err argument. See https://github.com/balderdashy/skipper/issues/54#issuecomment-72048398 for details. |
| proper garbage-collection support in core | @mikermcneil | garbage-collect failed file uploads using the adapter's rm() method (if one exists- otherwise emit a warning) |
expose write method |
@mikermcneil | replace receive() with write() in order to simplify adapter development. This will also make a lot of the other stuff on the list below easier, particularly progress events. |
| normalized upload progress events in core | @mikermcneil | remove the progress stream stuff from skipper-disk and include it in core (pipe to it, like the renamer pump) |
| support for maxBytes quota enforcement in core | want to help? | this is currently implemented at the adapter level. would be better to have on-the-fly maxBytes enforcement on a per-upstream or per-file-in-upstream basis |
| more documentation for adapter implementors | document the method signatures/expected results/etc. for the adapter methods, from an implementation perspective | |
| usage documentation for ls(), rm(), read() | document the method signatures/expected results/etc. for these methods in userland | |
| expose a static Upstream factory on the skipper module | want to help? | useful for streaming from one fsadapter to another (i.e. not just for file uploads) |
| expose a static Downstream factory on the skipper module | want to help? | useful for multi-file download from fsadapters |
| expose an API for building Downstream reducer pumps | want to help? | i.e. so you can coalesce a multi-file download into a zip archive |
The backlog consists of features which are not currently in the immediate-term roadmap above, but are useful. We would exuberantly accept a pull request implementing any of the items below, so long as it was accompanied with reasonable tests that prove it, and it doesn't break other core functionality.
| Feature | Owner | Details |
|---|---|---|
| streaming compression (zlib) | want to help? | transport stream to compress file uploads on their way to the remote filesystem, and decomopress them on the way out |
| streaming encryption (crypto) | want to help? | transport stream to encrypt file uploads on their way to the remote filesystem, and decrypt them on the way out |
| streaming thumbnail support for image uploads | want to help? | transport stream to create thumbnails from streaming files on the fly, then also persist those thumbails to the remote filesystem. Returned metadata needs to provide file descriptors (fds) for each thumbnail. |
| use https://github.com/expressjs/body-parser for non-mpu things | want to help? | https://github.com/balderdashy/skipper/issues/25 |








