No Description
Kieran Gibb 03b4ace9e9
remove old cli helper
2 years ago
app standardise error handling in all controllers 2 years ago
bin remove old cli helper 2 years ago
docs update swagger docs 2 years ago
lib remove old cli helper 2 years ago
test standardise error handling in all controllers 2 years ago
.gitignore beginnings of a groups depot / factory class 3 years ago
.gitmodules add the cli as an optional submodule 2 years ago
LICENSE add AGPL license 3 years ago update README 2 years ago
cobox-banner.js cheeky extra commit 2 years ago
index.js use cobox-replicator 2 years ago
main.js remove stored mount, add process killer, remove existing mount directory 2 years ago
nodemon.json add nodemon.json, ignore tmp/ and test/ dirs 2 years ago
package.json Merge branch 'master' into development 2 years ago
server.js remove stored mount, add process killer, remove existing mount directory 2 years ago
start.js move rimraf to main deps 2 years ago
util.js move helper code to util 2 years ago


A REST API for interacting with your cobox groups and replicator devices.

Check out our command line interface which will run this server for you. Check out cobox-cli.


# if you just want the server code
git clone

# if you want the cli too...
git clone --recursive

npm start


npm run dev:server

# to pass arguments, such as port (note the extra double dash)...
npm run dev:server -- --port 1234

Swagger docs are available at http://localhost:3000/api-docs.

Running cobox

:warning: this code is in flux so please note there is active development and things may change. That being said playing with shiny things is fun.

First you need to start the cobox server

npm start

This will launch a process which you can see by navigating in a browser to


If you already have something running on port 3000 then you can run

npm start -- --port 1234

Great, you have a server running. In another terminal you can run (you can use any name you like)

npm cli groups create --name my-new-group

If you have been given an address and an encryption key for a group you want to join, you can create the group by adding the flags --address / -A, or --encryption-key or -k

npm cli groups create -n my-new-group -A b74717c149390c3e8e939f6e94169751d9ade8e2e21e0255ee593fdccb504603 -k 0e90565c93f742019f0956ce7da1c952df343dde4a2c48254fbbb9cbcd7d22be

You would then be able to see this new group by navigating to


You can see the list of other commands implemented here

cobox help

RESTful approach to our API

:warning: this is not yet stable

Verb Path Controller Action Comment
GET /groups groups.js#index list all groups
POST /groups/:id groups.js#create create a single group
POST /groups/:id/mount groups/mount.js#create mount a group
DELETE /groups/:id/mount groups/mount.js#destroy unmount a group
POST /groups/:id/sync groups/sync.js#create sync a group
DELETE /groups/:id/sync groups/sync.js#destroy unsync a group
GET /groups/:id/files groups/files.js#readdir list a group’s files
GET /groups/:id/files/:filename groups/files.js#readFile OR groups/files.js#createReadStream download / get a file
GET /settings settings.js#index list settings. Currently includes the public key needed for invite codes
PATCH /settings settings.js#update change settings e.g. name, mountdir, etc
GET /groups/:id/drive groups/drive.js#index get drive state / history
GET /admin/devices admin/devices.js#index list all coboxes devices we hold an admin passphrase for (get from config.yml)
GET /devices devices.js#index listen for locally broadcasting devices, send the pubKey to the front-end
POST /admin/devices/:id admin/devices.js#create using the broadcasted pubKey, send a request to save that device, store the passphrase in config.yml, send it back in response