Skip to content
mount a http file as if it was a local file using fuse
Branch: master
Clone or download
Latest commit dd3bb70 May 13, 2015
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore testing May 12, 2015
cli.js add JS API May 13, 2015
index.js use mount callback May 13, 2015
package.json 1.0.3 May 13, 2015


mount a file from a http url as a local file using fuse from the CLI. uses http range requests and streaming.



requires fuse. on mac you can brew install osxfuse

npm install -g mount-url


mount-url <url>

will create a file in the current directory using the basename of the url. the file will appear like a normal file but will use http Range requests to support random access to the file

how it works

First we do a GET request to the URL provided, but abort it as soon as we have the headers. If the server doesn't return accept-ranges: bytes then mount-url won't work with this file and we abort (because we can't have random access to the file so it isn't worth it to mount as a fuse file).

Then we create a fuse directory in your os.tmpdir(), create a file in that directory, symlink a file in your process.cwd() to point to the tmp fuse mounted file, and then proxy requests for data to the file and convert them into HTTP range requests for the bytes that the fuse file requests.

This means you can mount a e.g. 10GB movie file, open VLC and skip to the middle of the movie and it can skip to the middle of the file without downloading the entire first half first (this is a contrived example as VLC already supports HTTP range requests).


first require it:

var mount = require('mount-url')

this returns a function that can be used to mount a url. it takes two arguments, a url and a callback. the callback will be called with err, cleanup. if there is an error, you don't have to cleanup. cleanup is a function that, if your file mounted successfully (e.g. if there was no err) you can call to unmount the file safely before exiting.


mount(someURL, function mounted (err, cleanup) {
  if (err) {
  process.on('SIGINT', function () {
    cleanup(function () {
You can’t perform that action at this time.