Hey,
don't give up yet!
I went on the same quest as you today and figured it out in the end, so I'll try to share my insights.
I'll also try to highlight the roles of the different components first, so that it may become clear what's to do and why:
Things involved:
1. The Ko-Reader (I only have a Kindle PW, so I don't know how its implemented elsewhere) with the Evernote/Joplin Plugin
2. A Joplin instance, that is listening on an open port 41184 on localhost (127.0.0.1)
3. A program (netsh or socat) that is forwarding incoming traffic (from hostport) on the Joplin host to the Joplin port (41184)
- this is because Joplin is only listening on localhost:41184, so that it can not be reached directly from outside
- the host port (port that is listening on an outbound interface on the host, for example "eth0" with your local ip (f.e. 192.168.23.42)) can have an arbitrary port but lets say it will be 41185 as its the default
- I'm on linux so I'm using socat, Windows might be netsh
These components then should work in this fashion:
- Ko-Reader sends notes to Joplin host IP on port 41185
- On the Joplin host the intermediary programm (socat or netsh) is listening on 41185 and forwards to
- Joplin, which is listening on localhost:41184
So, now for the guide:
1. First install Joplin Desktop. (There is also a server package
here but I have not looked into it so far.)
1.1 Launch it and go to Options -- Web-Clipper and activate
- this will make Joplin listen on localhost:41184
(As I understood this is originally an interface for a browser-extension which is why it only needs to listen locally.
1.2 In the Web-Clipper menu, a token will appear once it is activated - it'll be important later
Joplin is ready to receive like that.
2. Set up the intermediary:
- Now the bride must be build between the interface that can talk to the world (your wifi) and to Joplin.
Since I am on Linux I'll do it like this:
Code:
$ socat tcp-listen:41185,reuseaddr,fork tcp:localhost:41184
Windows (not tested by me, default from docs):
Code:
netsh interface portproxy add listeningaddress:0.0.0.0 listeningport:41185 connectaddress:localhost connectport:41184
This will forward traffic that is coming to port 41185 (your networkinterface) to localhost:41184 (Joplins interface)
You can check if your programs are listening (using) on the ports:
Linux:
Windows:
The ports should be in the list in the following fashion (or windows similar) including an indication which programm is using the ports:
Code:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 127.0.0.1:41184 0.0.0.0:* users:(("@joplinapp-desk",pid=175283,fd=71))
LISTEN 0 5 0.0.0.0:41185 0.0.0.0:* users:(("socat",pid=176574,fd=5))
Like this, only the reader is left to be configured.
3. Configure Ko-reader
3.1 My ko-reader has an Evernot-Plugin, which then has the Joplin-Plugin included.
- In the Joplin-Plugin I can enter an IP-address and a port:
The IP-address should be the one of the host from your Joplin instance (the address you are using in your wifi)
the port is the one defined in the intermediary (socat or netsh), so here 41185
- check the "export to Joplin" Box
- also, there is an option for the token, which is mentioned in 1.2.
The token has to be inserted. This
can be done by typing on the readers interface but since it's really long this would be quite dull.
- On the kindle I can access the configuration directly, once the device is connected to my computer, giving me the chance to copy+paste
1. connect the reader (kindle in my case but I presume it's similar on other devices)
2. open the (koreader/)settings.reader.lua (make a backup copy of the file first) in an editor
3. find the entry evernote
4. insert the option ["joplin_token"] = "", with your token as value
In the end, the
evernote-section should look like this (it's just the menuentries with values):
Code:
["evernote"] = {
["html_export"] = false,
["joplin_IP"] = "192.168.23.42",
["joplin_export"] = true,
["joplin_notebook_guid"] = "d50d5af85bb64b189ea16808c88c15e1",
["joplin_port"] = 41185,
["joplin_token"] = "255f85babc8e8341b2ba5d4088d655df7f59c77904ec23400c71e818c1efd649c40b68b3bc60fea3b605a09730784b41d04fc659ed181118f8c9a19ab95ad25f",
["json_export"] = false,
["txt_export"] = false,
["username"] = "",
},
Thats it, now, when you hit "export notes", your reader sends the notes to the Joplins-Host-address (joplin_IP in the koreader config) on the port 41185 where they are forwarded by the intermediary (socat, netsh) to the localport localhost:41184 and finaly received by Joplin.
Troubleshooting:
- If the configuration in ko-reader is not reaching the Joplin interface (ko-reader not set up correctly, intermediary not reachable, Joplin not reachable, ...) it will crash each time you hit sync

- make sure there are no firewalls on the Joplin-host preventing the reception of packets on the intermediary port (41185)
I hope this helps!
Fun things for the future:
- Install the nextcloud plugin for Joplin to sync your notes between your different Joplin clients
- must be installed manually into the nextcloud
- needs composer (v. 1) install wtih option --ignore-platform-reqs to install dependencies
- must then be activated in the Nextcloud app-interface
- reachable under
https://your.nextcloud.com/remote.php/webdav/joplin - where joplin is a folder you have to create in the root-folder of your Nextcloud-user
- Links on this:
- Install the mentioned serverversion of Joplin to have a headless instance in the internetz and sync your notes from everywhere
- combine the headless server with a nextcloud instance