[GH-ISSUE #4934] [Bug]: Sync Problem #43754

Closed
opened 2026-04-26 04:26:18 -05:00 by GiteaMirror · 11 comments
Owner

Originally created by @MakedaJones on GitHub (May 4, 2025).
Original GitHub issue: https://github.com/actualbudget/actual/issues/4934

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

A bug happened! I cannot sync between devices.

How can we reproduce the issue?

How can we reproduce the issue?

Where are you hosting Actual?

Pikapods

What browsers are you seeing the problem on?

Chrome, Safari

Operating System

Windows 11

Originally created by @MakedaJones on GitHub (May 4, 2025). Original GitHub issue: https://github.com/actualbudget/actual/issues/4934 ### Verified issue does not already exist? - [x] I have searched and found no existing issue ### What happened? A bug happened! I cannot sync between devices. ### How can we reproduce the issue? How can we reproduce the issue? ### Where are you hosting Actual? Pikapods ### What browsers are you seeing the problem on? Chrome, Safari ### Operating System Windows 11
GiteaMirror added the serverbug labels 2026-04-26 04:26:18 -05:00
Author
Owner

@alecbakholdin commented on GitHub (May 4, 2025):

It would be helpful if you could provide some more details. Is it just sitting there loading? Is there an error message that pops up?

Also, please check the console logs for any error messages ([alt + shift + I] or [F12], go to the console tab)

<!-- gh-comment-id:2849469208 --> @alecbakholdin commented on GitHub (May 4, 2025): It would be helpful if you could provide some more details. Is it just sitting there loading? Is there an error message that pops up? Also, please check the console logs for any error messages ([alt + shift + I] or [F12], go to the console tab)
Author
Owner

@saveriodesign commented on GitHub (May 6, 2025):

I am experiencing what could be @MakedaJones problem, the sync hangs and fails. Going into the logs for the docker container running Actual I find the following repeated on a ~330 second cadence while the tab is open.

2025-05-06T12:45:58.127Z info: GET 304 /account/validate
BadRequestError: request aborted
    at IncomingMessage.onAborted (/app/node_modules/raw-body/index.js:245:10)
    at IncomingMessage.emit (node:events:517:28)
    at IncomingMessage._destroy (node:_http_incoming:224:10)
    at _destroy (node:internal/streams/destroy:109:10)
    at IncomingMessage.destroy (node:internal/streams/destroy:71:5)
    at abortIncoming (node:_http_server:782:9)
    at socketOnClose (node:_http_server:776:3)
    at Socket.emit (node:events:529:35)
    at TCP.<anonymous> (node:net:350:12)

In-browser console I'm seeing repeated that the app is "Syncing since (time I opened the tab)", always attempt zero, and this error repeated after the message:

TypeError: Cannot read properties of null (reading 'toLowerCase')                     index.ts:563
    at throwIfNot200 (post.ts:13:41)
    at postBinary (post.ts:211:3)
    at async _fullSync (index.ts:662:21)
    at async index.ts:561:16
    at async app_sync (app.ts:20:10)

Additionally it is the request to https://site.tld/sync/sync which is hanging for about 5 minutes.

<!-- gh-comment-id:2854476040 --> @saveriodesign commented on GitHub (May 6, 2025): I am experiencing what could be @MakedaJones problem, the sync hangs and fails. Going into the logs for the docker container running Actual I find the following repeated on a ~330 second cadence while the tab is open. ``` 2025-05-06T12:45:58.127Z info: GET 304 /account/validate BadRequestError: request aborted at IncomingMessage.onAborted (/app/node_modules/raw-body/index.js:245:10) at IncomingMessage.emit (node:events:517:28) at IncomingMessage._destroy (node:_http_incoming:224:10) at _destroy (node:internal/streams/destroy:109:10) at IncomingMessage.destroy (node:internal/streams/destroy:71:5) at abortIncoming (node:_http_server:782:9) at socketOnClose (node:_http_server:776:3) at Socket.emit (node:events:529:35) at TCP.<anonymous> (node:net:350:12) ``` In-browser console I'm seeing repeated that the app is "Syncing since (time I opened the tab)", always attempt zero, and this error repeated after the message: ``` TypeError: Cannot read properties of null (reading 'toLowerCase') index.ts:563 at throwIfNot200 (post.ts:13:41) at postBinary (post.ts:211:3) at async _fullSync (index.ts:662:21) at async index.ts:561:16 at async app_sync (app.ts:20:10) ``` Additionally it is the request to `https://site.tld/sync/sync` which is hanging for about 5 minutes.
Author
Owner

@rwsselby commented on GitHub (May 14, 2025):

I have a similar problem and cannot sync budgets across devices. Watching the terminal yields output similar to an issue which was "closed as not planned" yet I believe is a real bug https://github.com/actualbudget/actual/issues/3919.

2025-05-14T18:25:11.112Z info: POST 200 /account/login
2025-05-14T18:25:11.145Z info: GET 200 /account/validate
2025-05-14T18:25:11.164Z info: GET 200 /sync/list-user-files
2025-05-14T18:25:11.192Z info: GET 200 /account/validate
Rejection: TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/response.js:441:11)
at file:///usr/local/lib/node_modules/@actual-app/sync-server/src/app-sync.js:297:7
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5)
at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5)
at /usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:346:12)
at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:280:10)
at jsonParser (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/body-parser/lib/types/json.js:113:7)

Image

Image

<!-- gh-comment-id:2881168827 --> @rwsselby commented on GitHub (May 14, 2025): I have a similar problem and cannot sync budgets across devices. Watching the terminal yields output similar to an issue which was "closed as not planned" yet I believe is a real bug https://github.com/actualbudget/actual/issues/3919. > 2025-05-14T18:25:11.112Z info: POST 200 /account/login > 2025-05-14T18:25:11.145Z info: GET 200 /account/validate > 2025-05-14T18:25:11.164Z info: GET 200 /sync/list-user-files > 2025-05-14T18:25:11.192Z info: GET 200 /account/validate > Rejection: TypeError: path must be absolute or specify root to res.sendFile > at ServerResponse.sendFile (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/response.js:441:11) > at file:///usr/local/lib/node_modules/@actual-app/sync-server/src/app-sync.js:297:7 > at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5) > at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:149:13) > at Route.dispatch (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:119:3) > at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5) > at /usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:284:15 > at Function.process_params (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:346:12) > at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:280:10) > at jsonParser (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/body-parser/lib/types/json.js:113:7) ![Image](https://github.com/user-attachments/assets/965249a8-19ba-4897-bed1-c9e42c394dfd) ![Image](https://github.com/user-attachments/assets/3955001a-083c-4a3f-940d-13879ff4b606)
Author
Owner

@rang501 commented on GitHub (May 17, 2025):

I have a similar problem and cannot sync budgets across devices. Watching the terminal yields output similar to an issue which was "closed as not planned" yet I believe is a real bug #3919.

2025-05-14T18:25:11.112Z info: POST 200 /account/login
2025-05-14T18:25:11.145Z info: GET 200 /account/validate
2025-05-14T18:25:11.164Z info: GET 200 /sync/list-user-files
2025-05-14T18:25:11.192Z info: GET 200 /account/validate
Rejection: TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/response.js:441:11)
at file:///usr/local/lib/node_modules/@actual-app/sync-server/src/app-sync.js:297:7
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5)
at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5)
at /usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:346:12)
at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:280:10)
at jsonParser (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/body-parser/lib/types/json.js:113:7)

Image

Image

I had the same issue. Just set the userFiles path in the config.json file, and it will fix that.

For example:
{ "userFiles": "/var/www/actual/user-files" }

<!-- gh-comment-id:2888466890 --> @rang501 commented on GitHub (May 17, 2025): > I have a similar problem and cannot sync budgets across devices. Watching the terminal yields output similar to an issue which was "closed as not planned" yet I believe is a real bug [#3919](https://github.com/actualbudget/actual/issues/3919). > > > 2025-05-14T18:25:11.112Z info: POST 200 /account/login > > 2025-05-14T18:25:11.145Z info: GET 200 /account/validate > > 2025-05-14T18:25:11.164Z info: GET 200 /sync/list-user-files > > 2025-05-14T18:25:11.192Z info: GET 200 /account/validate > > Rejection: TypeError: path must be absolute or specify root to res.sendFile > > at ServerResponse.sendFile (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/response.js:441:11) > > at file:///usr/local/lib/node_modules/@actual-app/sync-server/src/app-sync.js:297:7 > > at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5) > > at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:149:13) > > at Route.dispatch (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/route.js:119:3) > > at Layer.handle [as handle_request] (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/layer.js:95:5) > > at /usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:284:15 > > at Function.process_params (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:346:12) > > at next (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/express/lib/router/index.js:280:10) > > at jsonParser (/usr/local/lib/node_modules/@actual-app/sync-server/node_modules/body-parser/lib/types/json.js:113:7) > > ![Image](https://github.com/user-attachments/assets/965249a8-19ba-4897-bed1-c9e42c394dfd) > > ![Image](https://github.com/user-attachments/assets/3955001a-083c-4a3f-940d-13879ff4b606) I had the same issue. Just set the **userFiles** path in the **config.json** file, and it will fix that. For example: `{ "userFiles": "/var/www/actual/user-files" } `
Author
Owner

@saveriodesign commented on GitHub (May 21, 2025):

I tried clearing all local site data from the browser and that restored syncing. I can plainly see POSTs to /sync/sync returning rapid-fire 200s. I added my Chase Sapphire Reserve card from Simple Fin and after seven successful POSTs to /simplefin/transactions /sync/sync starts hanging.

Proceeding to force delete that bank account from the Actual account does not restore syncing.

<!-- gh-comment-id:2897706547 --> @saveriodesign commented on GitHub (May 21, 2025): I tried clearing all local site data from the browser and that restored syncing. I can plainly see POSTs to `/sync/sync` returning rapid-fire 200s. I added my Chase Sapphire Reserve card from Simple Fin and after seven successful POSTs to `/simplefin/transactions` `/sync/sync` starts hanging. Proceeding to force delete that bank account from the Actual account does not restore syncing.
Author
Owner

@matt-fidd commented on GitHub (Jun 5, 2025):

I tried clearing all local site data from the browser and that restored syncing. I can plainly see POSTs to /sync/sync returning rapid-fire 200s. I added my Chase Sapphire Reserve card from Simple Fin and after seven successful POSTs to /simplefin/transactions /sync/sync starts hanging.

Proceeding to force delete that bank account from the Actual account does not restore syncing.

Is the error the same as before? Could you provide the output from the console for this?
I'm not able to replicate on my end so if you could provide some step by step reproduction instructions that would be really useful please.

<!-- gh-comment-id:2942504230 --> @matt-fidd commented on GitHub (Jun 5, 2025): > I tried clearing all local site data from the browser and that restored syncing. I can plainly see POSTs to `/sync/sync` returning rapid-fire 200s. I added my Chase Sapphire Reserve card from Simple Fin and after seven successful POSTs to `/simplefin/transactions` `/sync/sync` starts hanging. > > Proceeding to force delete that bank account from the Actual account does not restore syncing. Is the error the same as before? Could you provide the output from the console for this? I'm not able to replicate on my end so if you could provide some step by step reproduction instructions that would be really useful please.
Author
Owner

@saveriodesign commented on GitHub (Jun 6, 2025):

To get to my current position, I have completely reset my Actual instance, destroying my old budget files and starting anew. Sync works fine until I run a bank sync. Thereafter are four problematic API calls, which take a very long time to resolve. This is how they appear in the browser

Endpoint Reponse Timing
sync/upload-user-file N/A 15+ min
sync/list-user-files 200 4.4 min
account/validate 200 4.4 min
sync/sync N/A 15+ min

In the logs of the server docker container I can see the same error being thrown as in my previous comment.

BadRequestError: request aborted
    at IncomingMessage.onAborted (/app/node_modules/raw-body/index.js:245:10)
    at IncomingMessage.emit (node:events:517:28)
    at IncomingMessage._destroy (node:_http_incoming:224:10)
    at _destroy (node:internal/streams/destroy:109:10)
    at IncomingMessage.destroy (node:internal/streams/destroy:71:5)
    at abortIncoming (node:_http_server:782:9)
    at socketOnClose (node:_http_server:776:3)
    at Socket.emit (node:events:529:35)
    at TCP.<anonymous> (node:net:350:12)

This error seems to be thrown twice for each of the requests which still have not resolved in the browser.

<!-- gh-comment-id:2949075276 --> @saveriodesign commented on GitHub (Jun 6, 2025): To get to my current position, I have completely reset my Actual instance, destroying my old budget files and starting anew. Sync works fine until I run a bank sync. Thereafter are four problematic API calls, which take a very long time to resolve. This is how they appear in the browser Endpoint | Reponse | Timing ---|---|--- sync/upload-user-file | N/A | 15+ min sync/list-user-files | 200 | 4.4 min account/validate | 200 | 4.4 min sync/sync | N/A | 15+ min In the logs of the server docker container I can see the same error being thrown as in my previous comment. ``` BadRequestError: request aborted at IncomingMessage.onAborted (/app/node_modules/raw-body/index.js:245:10) at IncomingMessage.emit (node:events:517:28) at IncomingMessage._destroy (node:_http_incoming:224:10) at _destroy (node:internal/streams/destroy:109:10) at IncomingMessage.destroy (node:internal/streams/destroy:71:5) at abortIncoming (node:_http_server:782:9) at socketOnClose (node:_http_server:776:3) at Socket.emit (node:events:529:35) at TCP.<anonymous> (node:net:350:12) ``` This error seems to be thrown twice for each of the requests which still have not resolved in the browser.
Author
Owner

@matt-fidd commented on GitHub (Jun 6, 2025):

Thanks for the information! That's definitely useful.

I still can't replicate this though unfortunately.

Would you be able to check your docker and browser logs when the first sync/upload-user-file call happens please? That definitely shouldn't be taking 15 minutes and I imagine whatever is causing it to fail is starting off the rest of the issues too.

Are your max size variables set to anything other than the default?

https://actualbudget.com/docs/config/#actual_upload_file_sync_size_limit_mb
https://actualbudget.com/docs/config/#actual_upload_sync_encrypted_file_sync_size_limit_mb
https://actualbudget.com/docs/config/#actual_upload_file_size_limit_mb

You can try making these ridiculously large (512 or something similar) to see if that helps.

<!-- gh-comment-id:2949406391 --> @matt-fidd commented on GitHub (Jun 6, 2025): Thanks for the information! That's definitely useful. I still can't replicate this though unfortunately. Would you be able to check your docker and browser logs when the first `sync/upload-user-file` call happens please? That definitely shouldn't be taking 15 minutes and I imagine whatever is causing it to fail is starting off the rest of the issues too. Are your max size variables set to anything other than the default? https://actualbudget.com/docs/config/#actual_upload_file_sync_size_limit_mb https://actualbudget.com/docs/config/#actual_upload_sync_encrypted_file_sync_size_limit_mb https://actualbudget.com/docs/config/#actual_upload_file_size_limit_mb You can try making these ridiculously large (512 or something similar) to see if that helps.
Author
Owner

@saveriodesign commented on GitHub (Jun 10, 2025):

@matt-fidd I've looked closer at the logs within the browser. I noticed the remote addresses for some requests—the ones which were working—were the LAN IP of the Actual server, while others—the ones timing out—were my home network's WAN IP. My network setup is to reverse proxy everything through Caddy, and the DNS of the home network is AdGuard. Caddy restricts certain services to the LAN, while AdGuard redirects my family domain straight to Caddy without leaving the network.

Clearly, this setup was not functioning properly, and certain requests made by the Actual frontend were not being properly intercepted by AdGuard; they were sent out to the ISP, came back in, and were rejected by Caddy. I opened up Actual to the WAN and suddenly everything works.

I did not open this issue, but in my case the sync issue was an IT failure, not an application failure.

Cheers.

<!-- gh-comment-id:2959003977 --> @saveriodesign commented on GitHub (Jun 10, 2025): @matt-fidd I've looked closer at the logs within the browser. I noticed the remote addresses for some requests—the ones which were working—were the LAN IP of the Actual server, while others—the ones timing out—were my home network's WAN IP. My network setup is to reverse proxy everything through Caddy, and the DNS of the home network is AdGuard. Caddy restricts certain services to the LAN, while AdGuard redirects my family domain straight to Caddy without leaving the network. Clearly, this setup was not functioning properly, and certain requests made by the Actual frontend were not being properly intercepted by AdGuard; they were sent out to the ISP, came back in, and were rejected by Caddy. I opened up Actual to the WAN and suddenly everything works. I did not open this issue, but in my case the sync issue was an IT failure, not an application failure. Cheers.
Author
Owner

@baileyr9350 commented on GitHub (Sep 2, 2025):

I am also having this problem and have been for a while. I use Actual on PikaPods and typically use either vivaldi or firefox browser on phone or computer. A lot of times I've fixed it by restarting my pod. I don't know what to look for to provide more info (pikapods log isn't super informative, just says "2025-09-02T22:02:00.758Z info: GET 304 /account/validate"), but I'm good at following directions and would be happy to get screenshots and stuff if someone else tells me where to look in the elements inspection or on pikapods.

@MakedaJones are you still having this issue as well?

<!-- gh-comment-id:3246940306 --> @baileyr9350 commented on GitHub (Sep 2, 2025): I am also having this problem and have been for a while. I use Actual on PikaPods and typically use either vivaldi or firefox browser on phone or computer. A lot of times I've fixed it by restarting my pod. I don't know what to look for to provide more info (pikapods log isn't super informative, just says "2025-09-02T22:02:00.758Z info: GET 304 /account/validate"), but I'm good at following directions and would be happy to get screenshots and stuff if someone else tells me where to look in the elements inspection or on pikapods. @MakedaJones are you still having this issue as well?
Author
Owner

@matt-fidd commented on GitHub (Sep 24, 2025):

I am also having this problem and have been for a while. I use Actual on PikaPods and typically use either vivaldi or firefox browser on phone or computer. A lot of times I've fixed it by restarting my pod. I don't know what to look for to provide more info (pikapods log isn't super informative, just says "2025-09-02T22:02:00.758Z info: GET 304 /account/validate"), but I'm good at following directions and would be happy to get screenshots and stuff if someone else tells me where to look in the elements inspection or on pikapods.

@MakedaJones are you still having this issue as well?

It sounds like the same error message, but probably a different error. Could you open a new issue with the relevant information please?

You can get console logs from the browser console (https://appuals.com/open-browser-console/)

<!-- gh-comment-id:3326034709 --> @matt-fidd commented on GitHub (Sep 24, 2025): > I am also having this problem and have been for a while. I use Actual on PikaPods and typically use either vivaldi or firefox browser on phone or computer. A lot of times I've fixed it by restarting my pod. I don't know what to look for to provide more info (pikapods log isn't super informative, just says "2025-09-02T22:02:00.758Z info: GET 304 /account/validate"), but I'm good at following directions and would be happy to get screenshots and stuff if someone else tells me where to look in the elements inspection or on pikapods. > > [@MakedaJones](https://github.com/MakedaJones) are you still having this issue as well? It sounds like the same error message, but probably a different error. Could you open a new issue with the relevant information please? You can get console logs from the browser console (https://appuals.com/open-browser-console/)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#43754