# makedrive
**Repository Path**: mirrors_mozilla/makedrive
## Basic Information
- **Project Name**: makedrive
- **Description**: [RETIRED] Webmaker Filesystem
- **Primary Language**: Unknown
- **License**: MPL-2.0
- **Default Branch**: thimble
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-22
- **Last Updated**: 2026-03-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# [DEPRECATION NOTICE]
This project is no longer under active development or maintenance by Mozilla.
---
MakeDrive
=========
An offline-first, always available, syncing filesystem for the web. MakeDrive gives web pages and apps a
complete filesystem that can be used offline, and also synced with the cloud.
See [this blog post](http://blog.humphd.org/introducing-makedrive/) which introduces MakeDrive, and demonstrates what it can do.
Any assistance in adding new features or enhancing current ones, as well as resolving issues
is greatly appreciated. Please refer to our [CONTRIBUTING.md](./CONTRIBUTING.md) document for more information.
If you have questions or want to help, we are available on irc in the [#makedrive](irc://irc.mozilla.org/makedrive) channel on moznet.
## Compatibility
### Desktop Browsers
 Google Chrome: 31+, Android 4.2+ (IndexedDB, WebSQL)
 Mozilla Firefox: 26+, Firefox OS 1.3+ (IndexedDB)
 Opera: 19+ (IndexedDB, WebSQL)
 Safari: 7.0+, iOS 7.x+ (WebSQL)
 Internet Explorer: 10+ (IndexedDB)
### Engines/Platforms
- Node.js: v0.10+
## MakeDrive Server
### Installation and Use
1) Install and run [redis](http://redis.io/), which MakeDrive uses for distributed locks.
2) Clone the [MakeDrive](https://github.com/mozilla/makedrive) repository.
```
$ git clone https://github.com/mozilla/makedrive.git
```
3) In your MakeDrive directory, install all of the necessary MakeDrive dependencies:
If you don't already have `grunt-cli` and `bower` installed globally, do so:
```
$ npm install bower -g
$ npm install grunt-cli -g
```
If you're interested in running the tests, also install Mocha globally:
```
$ npm install mocha -g
```
Afterwards, install the npm modules
```
$ npm install
```
Next, bower's dependencies
```
$ bower install
```
4) Copy the distributed environment file via command line, or manually using a code editor:
```
$ cp env.dist .env
```
Many aspects of the server can be altered via the `.env` file. See [env.dist](./env.dist).
5) Run the MakeDrive server at the default log level (`'info'`):
```
$ npm start
```
The server's log level can be set in the environment or the .env file using `LOG_LEVEL=*`
with one of `fatal`, `error`, `warn`, `info`, `debug`, `trace`. If none is given `info` is used.
You will now have MakeDrive running on localhost via port 9090 - [http://localhost:9090](http://localhost:9090)
### Authentication
MakeDrive uses a swappable authenticaiton mechanism based on [Passport.js](http://passportjs.org/).
Detailed docs are available in the [server/authentication](./server/authentication) directory. A number of
Authentication Providers are supplied by default:
provider | description
-------- | --------------
`passport-zeroconfig` (default) | Passport strategy for an always authenticated root user.
`passport-github` | Passport strategy for authenticating with GitHub using the OAuth 2.0 API.
`passport-env` | Passport strategy for authenticating using user info provided in the environment's configuration.
`passport-query-string` | Passport strategy for authenticating with a username and password provided on the query string.
`passport-webmaker` | Passport strategy for authenticating with a [Webmaker](https://github.com/mozilla/login.webmaker.org) session.
To use one of the above providers you can set the environment variable `AUTHENTICATION_PROVIDER`.
For example, using `passport-github` in [env](./env.dist):
```
export AUTHENTICATION_PROVIDER="passport-github"
export GITHUB_CLIENTID="clientId"
export GITHUB_CLIENTSECRET="clientSecret"
export GITHUB_CALLBACKURL="http://callbackurl"
```
You can also check other providers listed in the [providers directory](./server/authentication/providers) for more information.
### Filer Data Provider
MakeDrive needs to store user filesystem data in some kind of data store. Filesystem data is stored as key/value pairs, representing blocks and nodes in a POSIX filesystem (see [Filer](https://github.com/filerjs/filer) for more details).
MakeDrive uses Filer for all filesystem features, and can therefore use any Filer Data Provider. The provider is configured in the [env](./env.dist) using the `FILER_PROVIDER` variable.
By default MakeDrive uses [filer-fs](https://github.com/filerjs/filer-fs) and the server's filesystem to store data. This solution won't scale, since you can't share data across multiple instances of MakeDrive, but is useful for development.
Other providers are also available, or can be easily written:
* [filer-sql](https://github.com/filerjs/filer-sql) - Supports MySQL, MariaDB, SQLite, and PostgreSQL via Sequelize.
* [filer-s3](https://github.com/filerjs/filer-s3) - Supports Amazon S3 storage
### HTTP Routes
MakeDrive has various HTTP REST endpoints for retrieving user filesystem data in different formats.
All of these routes require authentication and are not meant for public use, but for users and
apps to allow easy access to data when logged in. Each one is accessed by simply being appended
to the URL that presently hosts MakeDrive (eg. `https://localhost:9090/p/`):
`/api/sync` - Used to initiate a sync session by a client (not meant for users/browsers).
`/p/*` - Serves as a path for a user's Filer filesystem. You can currently view anything that has been synced inside of the user's project directory tree.
`/j/*` - Similar to the `/p/` route, but serves the path information in `JSON` format for APIs.
`/z/*` - Used to export the current user's project data in compressed ZIP format.
`/s/:username` - Similar to the `/p/` route, but meant for server-to-server HTTP access and requiring HTTP BASIC AUTH. Disabled by default, but can be enabled by adding a
`"username:password"` pair to the `.env` file for the `BASIC_AUTH_USERS` variable.
`/images` - Provides an image gallery of all images contained anywhere in a user's filesystem.
All routes can be enabled or disabled via the [env.dist](./env.dist) file.
## MakeDrive Client
Built on top of the [Filer](https://github.com/filerjs/filer) filesystem interface, MakeDrive adds cloud-like syncing functionality that allows for multiple clients to share and interact with an active project directory from different browsers or platforms. There are features and options for both ***manual*** and ***auto*** syncing.
Below is a simple way to create and initiate a MakeDrive instance in client-side code:
`var fs = MakeDrive.fs();`
Multiple calls to `MakeDrive.fs()` will return the same instance.
### API Reference
####Constructor
```js
var fs = MakeDrive.fs({
manual: true,
memory: true,
forceCreate: true
// etc.
});
```
A number of configuration options can be passed to the `fs()` function.
These include:
Option | Value | Definition
------ | ----- |----------------------------------
`manual` | `true` | by default the filesystem syncs automatically in the background. This disables it.
`memory` | `` | by default we use a persistent store (indexeddb or websql). Using memory=true overrides and uses a temporary ram disk.
`provider` | `