Introducing janis - a read-only android client

After wrestling with android sync issues from the file system for the last 3 years or so, I decided to write Janis. Janis is a fast, read-only Android browser for a local Joplin sync folder.

please take a look here:

download it it from the releases and give it a short
you can download and give it a shot

ref: Android sync from FS still very slow

This is interesting. I'm wondering how you managed to get around the performance issues while using SAF. As far as I know, the main issue is the stat (list files) is the main thing which is really slow with SAF, when a directory has a lot of files.

Note that your app currently is not usable if using E2EE, as everything shows as untitled when that is the case.

It's in early alpha stages, and I didn't bother with e2ee yet. I just vibe coded it over the last two days, but I ways always skeptical about this whole claim around SAF so I wanted to try for myself. e2ee may be a bit tricky, so I'll probably only support my own use-case first.

Actually one reason I dropped e2ee in the first place for my own notes is because someone on the forum here said e2ee slows the android joplin cilent down even more.

according to the AI:

"I looked at Joplin’s Android SAF implementation more closely. Its listFiles() is already batched, but the initial import path appears to lose the benefit: each subsequent get(path) resolves the filename via findFile(), and findFile() queries and walks the directory’s full child cursor again. For a flat Joplin sync target, that becomes approximately O(n²) directory-entry work. Janis retains the document URI returned by its one batch query and reads items directly from that URI, which is likely the main reason its initial catalog build is dramatically faster."

In practice, it takes Joplin days to import my notes, and me having to keep the device awake, vs maybe 30 seconds in Janis.

I decided to go for E2EE and it wasn't bad to implement. you can try it here: Release alpha-20260826.0056 - e2ee · danielb2/janis · GitHub

note that the sync will show empty if there's nothing in your folders at first. you can go into settings and add the password and save password and scan to get the notes decrypted

@joeschmoe Thank you for your insight. I used this information to apply optimisations to the Joplin Android app and can indeed confirm that the performance issues are solvable! I have created PR Android: Improve performance of file system sync by mrjo118 · Pull Request #16321 · laurent22/joplin · GitHub with these changes.

The only thing which isn't resolved is slow E2EE for large resources, although that may not be a file system sync specific issue anyway.

That's great to hear! I pushed for a long time (multiple threads and issues) that there's no way Android is inherently that bad, so I'm happy it's finally solved.

added tags now. this joplin note browser is quite full-fledged at this point. it's using a different paradigm to browse the notes too, which I'm finding quite useful for myself

I've added some more features

FYI I tried the update with E2EE support and it didn't really work. Even after multiple rescans, all the notes show as untitled. I did test using an incorrect password too and it does show an error on the main screen in that scenario, so the password was not the issue

it works for me, but I tried a fresh key and encryption setup. if there have been iterations of the encryption, then likely mine just supports the latest version.

I created the key using Joplin 3.7. Can't remember if the key was setup on the desktop or mobile app, but that could make a difference.

EDIT: I've send you a PM with the test profile I'm using which can produce the issue

try this one

That fixed it, thanks! Also just a minor thing, the safe area inset at the bottom hasn't been handled correctly when using 3 button navigation, so when you scroll to the bottom of a note, the last part is partially covered by the navigation bar:

any other feedback? what do you think? it's working very well for me

It seems overall decent and is pretty quick. To be honest though I'm not overly interested in the app for my personal use, I was more interested to compare with what speed can be achieved in Joplin. In other news, the Joplin change was merged today, so it will be in Joplin 3.8.

One other thing is there is a warning about the app being from an untrusted developer when installing it. Not sure what is needed to avoid that, but might be worth looking into.

here's a fix for the insert issue you mentioned. good thing the change is in