Joplin Web - Web application companion for Joplin

a docker image is now available.
build it

docker build -t foxmask/joplin-web .

then launch it like this

docker run -it --network host -p 8001:8001 --rm --name foxmask-joplin-web-1 --mount type=bind,source="/home/foxmask/.config/joplin-desktop/database.sqlite",target=/home/foxmask/.config/joplin-desktop/database.sqlite foxmask/joplin-web

after that docker image, I'm working on a technical migration you can follow :wink:


tags under notes :slight_smile:


Hi, i’m looking for a way to publish the project the easiest way
So If you have knowledge to build a appimage (and/or the other OS supported by Joplin) let met know. I try to “package” the project from that folder only

May be that would be a possibility to use Joplin from Nextcloud ?


Until yesterday, to be able to use Joplin-Web, We had to install it on a workstation (because we need to access to the webclipper service)

Now, joplin can be run headless with:

joplin --profile ~/.config/joplin-desktop/ server start
Server is already running on port 41184

just after having update the joplin terminal version by

NPM_CONFIG_PREFIX=~/.joplin-bin npm install -g joplin

This allow you, now, to install the project on a dedicated server near your joplin resources :wink:

Thanks to @laurent !

1 Like

:birthday: project first anniversary :slight_smile:

news things to come during hacktoberfest :wink:


Well done @foxmask, the project is already looking very good.

Thanks for the Web app for Joplin, it looks very promising.

For those interested to test, there is docker-compose.yml to get both backend and frontend quickly running.

This solution run 2 dockers images, where I just run one.
I build the VueJS part, then I can run one docker with the front (VueJS) and back (python) in same times.

I just did not want to build the VueJS part on my server before creating your docker image and therefore I use the other image to do the job (which is easy to delete and provides a http server for testing).
In either case, the alpine based images are quite small (less then 300 MB both).

For production, I may merge with nginx and joplin app to a single docker image (it is on head-less server) and use an nginx proxy for SSL and simple user authentication.

I updated the description of the project, in the first post, has many things have been done since this year :wink:

@foxmask - okay, my bad.

I did not get the point of how the VueJS part and joplin_web relate to each other, that VueJS production build is already included in joplin_web and I eventually over-complicated things.

Nevermind, the Dockerfile & docker-compose.yml is now updated to produce a single image including also joplin terminal app (taking care about Web Clipper service and syncing).

i compared your solution with 2 dockers where I run just once. It's up to you to do the way you want. There is no rules written in the stone :wink:

Hi all,

I’ve successfully installing the Joplin Web. I would like to access my remote webdav folder. I use davfs to mount the remote folder. So this way the desktop application and the web application accessing the same file.

The mount works well. When I try to access my note book through the web app nothing appears.

Is davfs the right way to perform this action ?


did you start joplin headlesss by

joplin server start


Yes sure, I also specified the mount point of the davfs with the --profile option. This where my joplin data are stored.

is there any log in the console when docker is running ?

I’m not in a docker. I instalI it the old way.

I tried both with sudo and without here is the log without sudo:

pi@Ploutos:~$ joplin --profile /home/pi/joplin-desktop server start
Fatal error:
{ Error: Error: EACCES: permission denied, rmdir ‘/home/pi/joplin-desktop/tmp’. Path: /home/pi/joplin-desktop/tmp
at FsDriverNode.fsErrorToJsError_ (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/fs-driver-node.js:9:16)
at FsDriverNode.remove (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/fs-driver-node.js:54:15)
at code: ‘EACCES’ }

With sudo:

pi@Ploutos:~$ sudo joplin --profile /home/pi/joplin-desktop server start
2019-10-24 12:39:14: “Starting Clipper server on port 41184”
2019-10-24 12:41:37: “Request: GET /tags/?token=a0ea68a19bd2ad19b83b1c6d68e2af10228d58d750bc43d7ddd20a68086787cbfb07d1078c1a9f4e16b53c6fafff88dac9a3ed4f1e6ab4b0d0f5ff06b8fd115f”
2019-10-24 12:41:38: “Error: Invalid “token” parameter
Error: Invalid “token” parameter
at Api.checkToken_ (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/services/rest/Api.js:180:49)
at Api.defaultAction_ (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/services/rest/Api.js:184:8)
at Api.action_tags (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/services/rest/Api.js:301:15)
at Api.route (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/services/rest/Api.js:138:42)
at execRequest (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/ClipperServer.js:157:39)
at Server.server_.on (/home/pi/.joplin-bin/lib/node_modules/joplin/lib/ClipperServer.js:199:7)
at emitTwo (events.js:126:13)
at Server.emit (events.js:214:7)
at parserOnIncoming (_http_server.js:660:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:119:17)”

you shouldn’t need to use sudo so first of all

sudo chown pi:pi -R /home/pi/joplin-desktop/tmp


joplin --profile /home/pi/joplin-desktop server start

what triggers the log about /tags/?token=xxx ?
you browser ?
can you reproduce the error with curl ?

curl -XGET

Thanks for the idea of the chown. Now the joplin start without error messge except the token issue.

I tried via curl and I have the same issue. I copy/pasted the web clipper token from one of my desktop app. Was it the right thing to do ?