Android sync only receives a partial dataset after repeated clean resets, server changes, and fresh

Operating system

Android

Joplin version

3.5.8

Desktop version info

3.5.13

Sync target

Joplin Server

Editor

Rich Text Editor

What issue do you have?

Is there still hope for me and Joplin?

I am reporting a severe Android sync issue that I have spent about a week trying to isolate.

My Joplin Desktop data is complete and consistent. The Android app repeatedly syncs only a much older and much smaller subset of the dataset, while reporting that synchronization is complete.

What makes this especially confusing is that I have already tried essentially all obvious recovery steps multiple times, including rebuilding the sync target from scratch.

Current desktop sync status (correct dataset):

Note: 9712 / 9712

Folder: 3 / 3

Resource: 13833 / 13833

Tag: 11 / 11

NoteTag: 494 / 494

Revision: 6087 / 6087

Total: 30140 / 30140

Conflicted: 0

To delete: 0

Current Android sync status (incorrect dataset):

Note: about 3505-3605 / same

Folder: 1 / 1

Resource: 3 / 3

Tag: 0 / 0

NoteTag: 0 / 0

Revision: 5 / 5

Total: about 3514-3614 / same

Conflicted: 0

To delete: 0

Android reports no errors and says sync is complete, but the result is obviously wrong:

many notes missing

notebooks missing

all tags missing

note-tag relations missing

In the UI it effectively falls back to only the default “Welcome” notebook, despite thousands of notes being counted in the sync status.

What I tried repeatedly:

Re-syncing from Desktop to OneDrive

Re-syncing from Desktop to Joplin Cloud

Re-syncing from Desktop to my own Joplin Server

“Re-upload local data to sync target” from Desktop

Clearing Android app data

Clearing Android cache

Uninstalling and reinstalling Android app

Rebooting Android device

Connecting Android to the same server URL and same user as Desktop

Creating a completely new Joplin Server user

Creating a new Desktop profile

Importing JEX into the new Desktop profile

Syncing that fresh Desktop profile to the new server user

Syncing Android against that new server user

Even after all of that, Android still ends up with essentially the same wrong partial dataset.

Important observations:

Desktop and Android are using the same Joplin Server URL.

Desktop and Android are using the same server account when tested together.

I also tested with a completely new server user and a new Desktop profile.

In the Joplin Server web interface I can see recent desktop changes that never appear on Android.

So this does not look like a simple wrong-URL or wrong-account issue.

Android does not seem to be “still syncing”; it reports finished sync with the wrong counts.

Server URL format used:

Desktop: http://192.168.178.100:22300

Android: same effective URL, same server

Server user test:

original admin account

fresh non-admin sync account
Both produced the same Android failure pattern.

What makes this especially serious:
The app gives the impression that sync succeeded, but the local dataset on Android is badly incomplete. That is much worse than a normal sync error because it can mislead users into trusting an incomplete database.

At this point I would like to know:

Is this a known Android delta-sync bug?

Is there a way to force Android to discard all server-side sync state and pull the full dataset, not just a stale partial one?

Are Folder / Tag / NoteTag objects handled differently in Android sync in a way that could explain this?

Is there any server-side state that survives even when using a new user and a new Desktop profile?

Which logs should I provide from Desktop, Android, and Joplin Server to help isolate this?

I can provide screenshots of:

Desktop sync status

Android sync status

Android sync settings

Joplin Server user overview

At this point the only reliable way to get the current data onto Android seems to be local JEX import without sync, which defeats the purpose of synchronized mobile use.

Are you keeping the screen turned on and the Joplin app in the foreground continuously while it is syncing, without letting the screen turn off?

1 Like

Thank you for the reminder! It was mentioned in my searches this last week but, stupidly, it’s the one thing I didn’t try. Will do tomorrow and report back.

Holy shit! It worked! Thanks again!

There’s a lesson in here for me: trying and re-trying ever more complicated ways of solving the problem while neglecting that one simple tip (which I’d come across in the LLM help output) which already would have worked one week ago! I was just about ready to jump ship to Obsidian.

A good thing that came of it: this finally pushed me to purchase a mini-pc and setting it up as a linux home-server which can have many other uses.

Debriefing with chat:
Why the sync status misled you

The sync status in Joplin reflects the state of the last completed sync cycle, not the completeness of the entire dataset relative to another device.

So Android reported something like:

Note: 3505 / 3505
Folder: 1 / 1
Tag: 0 / 0

That simply means:

“The client processed everything it knows about from the last delta window.”

It does not mean:

“This device now has the full dataset that exists on the server.”

From a UX perspective that distinction is invisible to the user.

A better design would probably show something like:

Server items: unknown
Local items: 3505
Sync history incomplete

or

Initial sync incomplete — keep the app active

I was just about ready to jump ship to Obsidian

Last time I checked, Obsidian does not support background sync on mobile either. So may have had a similar problem :face_with_tongue:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.