Up1 provides a very simple web interface to share files end-to-end encrypted via an autogenerated url. It works without any registration or login, the encryption takes place in the clients browser, so the server will know nothing about the files content.


For this guide you should be familiar with the basic concepts of


Node and npm

We’re using Node.js in the stable version 8:

[isabell@stardust ~]$ uberspace tools version show node
Using 'Node.js' version: '18'
[isabell@stardust ~]$

We will need to update the Node Packet Manager npm:

[isabell@stardust ~]$ npm install npm@latest -g
+ npm@10.2.4
updated 1 package in 14.629s
[isabell@stardust ~]$ hash -r
[isabell@stardust ~]$ npm --version
[isabell@stardust ~]$

This should return a version from 6.0.0 upwards.


Your URL needs to be setup:

[isabell@stardust ~]$ uberspace web domain list
[isabell@stardust ~]$


First get the Up1 source code from Github:

[isabell@stardust ~]$ git clone https://github.com/Upload/Up1 up1
Cloning into 'up1'...
remote: Enumerating objects: 37, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 37 (delta 0), reused 16 (delta 0), pack-reused 0
Unpacking objects: 100% (37/37), done.
Note: checking out '059f199a6f94fc6c90cde1e4dab0b5b85b49533c'.
[isabell@stardust ~]$

You have now downloaded the master development branch, because this might behave like a beta version of the software, you should check out the latest release.

Please be sure to replace the pseudo version number 66.6 here with the latest version number from the release feed:

[isabell@stardust ~]$ cd ~/up1
[isabell@stardust up1]$ git checkout tags/v66.6
You are in 'detached HEAD' state. You can look around, [...]
[isabell@stardust up1]$ git checkout -b latest
Switched to a new branch 'latest'
[isabell@stardust up1]$

Then run npm to install all the dependencies:

[isabell@stardust ~]$ cd ~/up1/server
[isabell@stardust server]$ npm install
added 131 packages from 90 contributors and audited 219 packages in 6.04s
found 17 vulnerabilities (4 low, 8 moderate, 5 high)
run `npm audit fix` to fix them, or `npm audit` for details
[isabell@stardust server]$

You probably got the error that there are vulnerabilities to fix, so follow the instruction and run npm audit fix to install the latest package versions:

[isabell@stardust ~]$ cd ~/up1/server
[isabell@stardust server]$ npm audit fix
fixed 17 of 17 vulnerabilities in 219 scanned packages
[isabell@stardust server]$


Change the configuration

Copy the example settings files to create your own configuration:

[isabell@stardust ~]$ cd ~/up1
[isabell@stardust up1]$ cp server/server.conf.example server/server.conf
[isabell@stardust up1]$ cp client/config.js.example client/config.js
[isabell@stardust up1]$

Now edit ~/up1/server/server.conf and set a random string for api_key and delete_key:


You can use the following code, for example, to create a random string: pwgen 32 1

 "api_key": "<any_random_string>",
 "delete_key": "<any_other_random_string>",
 "maximum_file_size": 50000000,

 "path": {
   "i": "../i",
   "client": "../client"

 "http": {
   "enabled": true,
   "listen": ":9002"

Then add the same api_key to the file ~/up1/client/config.js:

upload.config.api_key = '<random_string_from_above>'

If you want to, you can also edit the website footer and contact information to your details in the same file:

upload.config.footer = '<a href="https://github.com/Upload/Up1" target="_blank">Source Code</a> - <a href="mailto:isabell@stardust.uber.space" id="contact" target="_blank">Contact</a>'

Configure web server


Up1 is running on port 9002.

To make the application accessible from the outside, configure a web backend:

[isabell@stardust ~]$ uberspace web backend set / --http --port <port>
Set backend for / to port <port>; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
[isabell@stardust ~]$

Setup daemon

Create ~/etc/services.d/up1.ini with the following content:

command=node %(ENV_HOME)s/up1/server/server.js

After creating the configuration, tell supervisord to refresh its configuration and start the service:

[isabell@stardust ~]$ supervisorctl reread
SERVICE: available
[isabell@stardust ~]$ supervisorctl update
SERVICE: added process group
[isabell@stardust ~]$ supervisorctl status
SERVICE                            RUNNING   pid 26020, uptime 0:03:14
[isabell@stardust ~]$

If it’s not in state RUNNING, check your configuration.

Check Website

Point your browser to your domain for example https://isabell.uber.space

Tested with Up1 1.0 and Uberspace

Written by: ezra <ezra@posteo.de>