Nupplo runs wherever Docker runs – on a NAS, on an old computer, on a Raspberry Pi, or with a hosting provider. Five routes, one of which will suit you. The first is the one most people take.
docker.io from your package manager.8300. If
that one is taken, use another; how, is explained with each route.What you do not need: no account with us, no sign-up, no command line. The credentials for BrickLink and Rebrickable are free and can be added later – without them everything still runs, just without prices and without searching by name. BrickLink additionally requires a shop to have been opened once; it may stay empty.
The usual route, and it manages without a command line. It needs Container Manager from the Package Center (DSM 7.2 or newer). If your package is still called Docker, your DSM is older; for that case there is a box with three SSH commands at the end of this section.
In File Station, create a folder
nupplo under docker, and a folder
data inside it.
Result:
/volume1/docker/nupplo/data
This one folder is the important one – your database lives there. Everything else is replaceable.
Container Manager → Project → Create. Three fields need filling in:
Project name nupplo · Path via
Set Path to /docker/nupplo · Source
Create docker-compose.yml
Into the text box goes:
services:
nupplo:
image: ghcr.io/melle79/nupplo:latest
container_name: nupplo
restart: unless-stopped
ports: ["8300:8300"]
volumes: ["./data:/data"]
Next → Next → Done. Container Manager pulls the image and starts it. The first time this takes a minute or two.
In your browser, open http://<NAS-IP>:8300. From
here the setup wizard takes over.
If port 8300 is taken, change the left
number in the YAML, for example to "8399:8300", and open
the app on :8399.
Container Manager → Project → nupplo → Action →
Build. DSM pulls the current image and restarts. The contents
of data are left untouched.
If you want a restore point first: download the JSON file in the app under More → Backup.
Under Container in Container Manager there is then a row with a green dot, the image beside it, and how long it has been up.
Would you rather use the search in Container
Manager? You can – the image is on Docker Hub as well. But then
you must map a folder to /data: without that one step Docker
creates an anonymous volume. The database ends up nameless under
/volume1/@docker/volumes/…, you see nothing of it in File
Station – and at the next update the new container gets a new, empty
volume. The collection would appear to be gone. The project above is the
easier route, because everything sits in one file there and survives
updates.
Older DSM, only the “Docker” package? Then it goes through SSH. Sign in to the NAS and run:
sudo mkdir -p /volume1/docker/nupplo && cd /volume1/docker/nupplo sudo curl -sLo docker-compose.yml https://raw.githubusercontent.com/Melle79/nupplo/main/docker-compose.example.yml sudo docker compose up -d
Later updates happen in the same folder with
sudo docker compose pull and
sudo docker compose up -d.
The shortest route if a command line is within reach. Nupplo comes for x86-64 (any ordinary Intel or AMD machine) and for arm64 (Raspberry Pi 3 and newer, ARM NAS boxes, Apple silicon). Docker picks the right one itself; the command is the same everywhere.
If you have not already – without Docker there is no next step. On Windows and macOS take Docker Desktop; on Linux and Raspberry Pi OS the package from your package manager:
sudo apt install docker.io docker-compose-v2
docker --version tells you
whether it is running. On a Raspberry Pi, log out and back in once
afterwards – otherwise your user lacks the right to operate
Docker.
Create a folder of your choosing and, inside it, a file
docker-compose.yml with this content:
services:
nupplo:
image: melle79/nupplo:latest
container_name: nupplo
restart: unless-stopped
ports: ["8300:8300"]
volumes: ["./data:/data"]
Above it says ghcr.io/melle79/nupplo,
here melle79/nupplo: the image lives in both
registries. Container Manager only searches Docker Hub by default,
which is why the full name appears there.
In that folder:
docker compose up -d
Docker creates the data folder itself.
Open http://<machine>:8300 in your browser. An
update takes two lines in the same folder:
docker compose pull docker compose up -d
For Unraid there is a ready-made template – the image, the port and the
path to /data are already in it. Add this address once under
Docker → Settings → Template Repositories:
https://github.com/Melle79/unraid-templates
After that Nupplo appears in the template picker under Docker → Add Container, and all you choose is the folder on your array.
QNAP and everything else with Container Station or Portainer uses the same Compose file as in route 2 – only the path in front of the colon is called something different there.
If nothing at home stays switched on, Render or Railway can do the running. Both read the template from the project and set everything up themselves. The instance is yours – data, costs and access. There is no Nupplo service in between.
This costs money, and there is a reason. Nupplo needs a permanent directory for its database. Render’s free tier does not have one – the collection would be gone after every restart. The template therefore deliberately specifies the smallest paid tier with a 2 GB disk, rather than offering a setup that loses data.
Look at render.yaml Railway template
For contributing, or for changes of your own:
git clone https://github.com/Melle79/nupplo cd nupplo docker compose up -d --build
Behind the scenes it is FastAPI and SQLite; in the browser it is plain JavaScript. The front end therefore needs no build step.
On first opening, a wizard walks you through the rest: admin account, display name and the credentials for prices and catalogue search. Every step can be skipped and caught up later under More → Settings.
Supplies the average prices, new and used. The account is free and stays yours – your instance fetches the prices itself, not us. The interface is only open to sellers, though: a shop has to have been opened once in the account, but you need not offer anything in it.
Supplies names, pictures and the contents of sets. Free as well.
Still runs. Scanning, recording and lists all work; what is missing is prices and searching by name.
You make the instance reachable from outside later, using a Cloudflare Tunnel or a VPN – not by forwarding a port on the router. How that works is on a page of its own; in the app there is a wizard for it under More → External access.
Container Manager only has Docker Hub listed under
Registry. That does not matter: a project with the full name
(ghcr.io/…) pulls directly – you do not need the search
for it at all.
If the log mentions missing write permissions, data
belongs to the wrong owner. In File Station under
Properties → Permission, grant write permission for
nupplo including its subfolders.
Then no folder was mapped to /data and the database
was sitting in an anonymous volume. It is not lost: look under
Container → Details → Volume to see where it is. Switch to a
project afterwards and it will not happen again.
Devices like the DS220j or DS223 work – the image exists for
arm64. Only very old 32-bit models (armv7)
are out.
Change the left number under ports,
for example to "8399:8300". The right one stays as it is –
that is the port the app listens on inside the container.
The manual goes into setup and operation in more detail, and for questions there are the issues in the project.