Set up a node

Complete step-by-step guide to spin up your own LOOKLOCK node: a mailbox that stores end-to-end encrypted messages and files. Not even you, as the operator, can read anything.

What a node is

An encrypted mailbox, nothing more

A node is a mailbox that stores end-to-end ENCRYPTED messages and files, separated per user. The node operator CANNOT read anything: it only holds sealed blobs. It is a single Python file (llnode.py), with no external dependencies, with its own SQLite database (node.sqlite). Setting it up takes minutes.

Requirements

The bare minimum

Linux VPS with a public IP.
Minimum 1 vCPU, 1 GB of RAM and 20 GB of disk.
Python 3.8 or higher (usually preinstalled on most Linux distributions).
Port 8770 reachable from the Internet.

Detailed steps

a) Get a Linux VPS

Rent a Linux virtual server (for example Ubuntu Server or Debian) with a public IP from any provider. Any modest plan is more than enough.

b) Place the node file

Copy the node file to the path /opt/llnode/llnode.py on the server. It is a single Python file, with no dependencies to install.

c) Run it once by hand

Run the node manually the first time:

python3 /opt/llnode/llnode.py 8770 /opt/llnode/data

This command creates the data folder, generates the node.sqlite file and prints an adminSecret. Store that secret in a safe place: it gives you administrative access to the node.

d) Create a systemd service

So the node starts on its own and restarts if it fails, create a systemd service. For security, do NOT run it as root: first create an unprivileged user and give it ownership of the node folder:

sudo useradd --system --no-create-home --shell /usr/sbin/nologin llnode
sudo chown -R llnode:llnode /opt/llnode

Then define the service with that user:

[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/llnode/llnode.py 8770 /opt/llnode/data
Restart=always
User=llnode
Group=llnode
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/opt/llnode/data

[Install]
WantedBy=multi-user.target

Then enable and start it with: systemctl enable --now llnode

e) Open the firewall

Allow incoming traffic to the node port:

ufw allow 8770/tcp

f) Check the node health

Verify the node responds:

curl http://TU_IP:8770/health

It should return something like: {"ok":true,"version":"3.0.0",...}. If you see it, the node is alive.

g) Production: HTTPS in front

For real use, assign a domain and put a reverse proxy with HTTPS in front of the node (for example caddy or nginx). This way traffic between the app and the node travels TLS-encrypted on top of the end-to-end encryption of the content.

h) Register the node in the network

Finally, join your node to the network: send its URL to LOOKLOCK or configure it in the app. From then on users will be able to choose your node as a mailbox.

How it works inside

Directory, deposit and pickup

The central server acts as a DIRECTORY: it stores which node hosts each user and a public depositToken. Other users deposit encrypted messages in the recipient mailbox using that public token. The mailbox owner picks up their messages with their secret ownerToken, which only lives inside their app and never leaves it. Default quotas: 8 GB per user and files up to 5 MB.

Privacy

The node only stores end-to-end encrypted blobs. Neither the operator nor anyone else can read their content: without the recipient private key, which never leaves their device, the data is unreadable.

Requirements to contribute a node Open nodes Offer a node