[GH-ISSUE #5929] [Bug]: issue with syncing #16779

Closed
opened 2026-04-14 19:46:55 -05:00 by GiteaMirror · 9 comments
Owner

Originally created by @jkmelvin on GitHub (Oct 15, 2025).
Original GitHub issue: https://github.com/actualbudget/actual/issues/5929

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

A bug happened!

How can we reproduce the issue?

How can we reproduce the issue?

Where are you hosting Actual?

None

What browsers are you seeing the problem on?

No response

Operating System

None

Originally created by @jkmelvin on GitHub (Oct 15, 2025). Original GitHub issue: https://github.com/actualbudget/actual/issues/5929 ### Verified issue does not already exist? - [x] I have searched and found no existing issue ### What happened? A bug happened! ### How can we reproduce the issue? How can we reproduce the issue? ### Where are you hosting Actual? None ### What browsers are you seeing the problem on? _No response_ ### Operating System None
GiteaMirror added the needs infobug labels 2026-04-14 19:46:55 -05:00
Author
Owner

@fracool commented on GitHub (Oct 15, 2025):

Please add some detail about the issue?

<!-- gh-comment-id:3405379561 --> @fracool commented on GitHub (Oct 15, 2025): Please add some detail about the issue?
Author
Owner

@Chinychon commented on GitHub (Oct 16, 2025):

I have also encountered a similar issue.

Issue happened on iOS on both my iphone and ipad multiple times
Note: Self-hosted on an old HP Compaq 8100 Elite SFF PC running latest ubuntu-server-lts with Intel i3 550 (4) and 3GB RAM (+4GB swap)
Doesn’t seem to be using a lot of CPU or memory when the issue occurred according to docker stats.
Btop showing 15% CPU usage and 56% RAM usage.
Also hosting seafile and obsidian livesync.
Accessing via tailscale with SSH certs & caddy.

Browser: Safari

What Happened?

Unable to sync. Error alerts appeared.
Note: This happens when opening the app via bookmark added to home, as well as new tab in safari.

  1. When I was switching to the reports page, it was stuck on loading screen.
  2. When opening the app, details weren’t synced or took a long time to sync.

Workarounds
Clear app history via settings, log in to a new instance. But I have to do this almost
every time I open the app. Sometimes just closing and opening works.

<!-- gh-comment-id:3409698975 --> @Chinychon commented on GitHub (Oct 16, 2025): I have also encountered a similar issue. **Issue happened on iOS on both my iphone and ipad multiple times** Note: Self-hosted on an old HP Compaq 8100 Elite SFF PC running latest ubuntu-server-lts with Intel i3 550 (4) and 3GB RAM (+4GB swap) Doesn’t seem to be using a lot of CPU or memory when the issue occurred according to docker stats. Btop showing 15% CPU usage and 56% RAM usage. Also hosting seafile and obsidian livesync. Accessing via tailscale with SSH certs & caddy. **Browser: Safari** **What Happened?** Unable to sync. Error alerts appeared. Note: This happens when opening the app via bookmark added to home, as well as new tab in safari. 1. When I was switching to the reports page, it was stuck on loading screen. 2. When opening the app, details weren’t synced or took a long time to sync. **Workarounds** Clear app history via settings, log in to a new instance. But I have to do this almost every time I open the app. Sometimes just closing and opening works.
Author
Owner

@fracool commented on GitHub (Oct 16, 2025):

Hi Chinychon,

I had similar issues with sync in a setup like yours.

I found that it was because caddy provided a certificate for ssl which refreshed every few hours. As soon as caddy refreshed the cert, the sync could not happen, server appeared offline until output clear the browser data.

To configure caddy so it did not do this I had to add the following to my Caddyfile:

  # Use the internal CA, but slow down how often certs change
  tls {
    issuer internal {
      lifetime 2160h   # 90 days; pick longer if you like
    }
  }

  encode zstd gzip


  reverse_proxy actual:5006 {
    # Keep upstream on h1 to avoid h2c oddities
    transport http {
      versions 1.1
      keepalive 30s
    }
    flush_interval -1
    header_up X-Forwarded-Proto {scheme}
    header_up Host {host}
  }

  # Force the service worker to revalidate, not cling to a stale one
  @sw path /service-worker.js
  header @sw Cache-Control "no-cache, no-store, must-revalidate"
}

Best regards.

<!-- gh-comment-id:3409719697 --> @fracool commented on GitHub (Oct 16, 2025): Hi Chinychon, I had similar issues with sync in a setup like yours. I found that it was because caddy provided a certificate for ssl which refreshed every few hours. As soon as caddy refreshed the cert, the sync could not happen, server appeared offline until output clear the browser data. To configure caddy so it did not do this I had to add the following to my Caddyfile: ``` budget.frasor.intern { # Use the internal CA, but slow down how often certs change tls { issuer internal { lifetime 2160h # 90 days; pick longer if you like } } encode zstd gzip reverse_proxy actual:5006 { # Keep upstream on h1 to avoid h2c oddities transport http { versions 1.1 keepalive 30s } flush_interval -1 header_up X-Forwarded-Proto {scheme} header_up Host {host} } # Force the service worker to revalidate, not cling to a stale one @sw path /service-worker.js header @sw Cache-Control "no-cache, no-store, must-revalidate" } ``` Best regards.
Author
Owner

@Chinychon commented on GitHub (Oct 16, 2025):

I'm actually using certs generated by tailscale, caddy is not generating extra certificates according to my logs.

But I've added this to my Caddyfile:

@sw path /service-worker.js  
header @sw Cache-Control "no-cache, no-store, must-revalidate"

I hope that solves it haha.

<!-- gh-comment-id:3409847377 --> @Chinychon commented on GitHub (Oct 16, 2025): I'm actually using certs generated by tailscale, caddy is not generating extra certificates according to my logs. But I've added this to my Caddyfile: ``` @sw path /service-worker.js header @sw Cache-Control "no-cache, no-store, must-revalidate" ``` I hope that solves it haha.
Author
Owner

@Chinychon commented on GitHub (Oct 17, 2025):

Issue Update Summary

Title: iOS PWA shows RM0 balances due to sync timeouts on iPhone

Issue: When opening Actual Budget via iOS Safari PWA, account balances display RM0.00 and budget shows incorrect RM1,100. Server is online but sync requests fail. Syncing is working across my iPad, Desktop and bookmarked instance of Actual Budget on the same phone. This issue was recreated on the Safari browser on the iPhone.

After clearing Safari history, and triggering sync via layout change multiple times, it finally shows the correct values.

Evidence from logs: Sync requests to /sync/sync consistently fail after 3.2-3.3 seconds with errors:

  • "http2: stream closed"
  • "client disconnected"
  • "connection reset by peer"

Server processes requests successfully (200 OK) but responses can't reach iOS client due to connection closures.

Environment: Self-hosted via Docker, Caddy reverse proxy, Tailscale, iOS Safari PWA on iPhone 12.

Workaround: Clearing Safari website data temporarily fixes the issue SOMETIMES.

Attempting to fix with new caddy file config:

my-tailscale-url.ts.net:443 {
    tls /etc/caddy/cert.crt /etc/caddy/cert.key
    
    reverse_proxy actual-budget:5006

    @sw path /service-worker.js  
    header @sw Cache-Control "no-cache, no-store, must-revalidate"
}
<!-- gh-comment-id:3413972037 --> @Chinychon commented on GitHub (Oct 17, 2025): ## **Issue Update Summary** **Title:** iOS PWA shows RM0 balances due to sync timeouts on iPhone **Issue:** When opening Actual Budget via iOS Safari PWA, account balances display RM0.00 and budget shows incorrect RM1,100. Server is online but sync requests fail. Syncing is working across my iPad, Desktop and bookmarked instance of Actual Budget on the same phone. This issue was recreated on the Safari browser on the iPhone. After clearing Safari history, and triggering sync via layout change multiple times, it finally shows the correct values. **Evidence from logs:** Sync requests to `/sync/sync` consistently fail after 3.2-3.3 seconds with errors: - `"http2: stream closed"` - `"client disconnected"` - `"connection reset by peer"` Server processes requests successfully (200 OK) but responses can't reach iOS client due to connection closures. **Environment:** Self-hosted via Docker, Caddy reverse proxy, Tailscale, iOS Safari PWA on iPhone 12. **Workaround:** Clearing Safari website data temporarily fixes the issue SOMETIMES. **Attempting to fix with new caddy file config:** ``` my-tailscale-url.ts.net:443 { tls /etc/caddy/cert.crt /etc/caddy/cert.key reverse_proxy actual-budget:5006 @sw path /service-worker.js header @sw Cache-Control "no-cache, no-store, must-revalidate" } ```
Author
Owner

@miko-droid commented on GitHub (Oct 22, 2025):

Attempting to fix with new caddy file config:

Let me know how you go with this. I have a similar issue on my pixel 8 pro using chrome. Actual opens blank with all values zeroed out, and the sync icon up the top left spins indefinitely. Unsure how to see logs like you got but it sounds like the same thing.

<!-- gh-comment-id:3430544923 --> @miko-droid commented on GitHub (Oct 22, 2025): > **Attempting to fix with new caddy file config:** Let me know how you go with this. I have a similar issue on my pixel 8 pro using chrome. Actual opens blank with all values zeroed out, and the sync icon up the top left spins indefinitely. Unsure how to see logs like you got but it sounds like the same thing.
Author
Owner

@Chinychon commented on GitHub (Oct 22, 2025):

This is what worked for me:

my.domain.ts.net:443 {
    tls /etc/caddy/cert.crt /etc/caddy/cert.key   # Custom Certs
    
    # This is what fixed it
    reverse_proxy actual-budget:5006 {
        # Add these timeout settings
        transport http {
            dial_timeout 30s
            response_header_timeout 60s
        }
    }

    @sw path /service-worker.js  
    header @sw Cache-Control "no-cache, no-store, must-revalidate"
}
<!-- gh-comment-id:3430549717 --> @Chinychon commented on GitHub (Oct 22, 2025): This is what worked for me: ``` my.domain.ts.net:443 { tls /etc/caddy/cert.crt /etc/caddy/cert.key # Custom Certs # This is what fixed it reverse_proxy actual-budget:5006 { # Add these timeout settings transport http { dial_timeout 30s response_header_timeout 60s } } @sw path /service-worker.js header @sw Cache-Control "no-cache, no-store, must-revalidate" } ```
Author
Owner

@BobWs commented on GitHub (Oct 27, 2025):

I’m experiencing sync issues with my Docker server and iPad on both Safari and DuckDuckGo browsers. It takes a long time for everything to load, and the sync icon keeps spinning forever. As a result, my data is out of sync with my MacBook Pro (the primary source).

I’ve cleared the browsers’ caches, but that didn’t help.

At first I thought the problem was caused by the many tags I added to my transactions, but after reading the relevant information I don’t believe that’s the issue.

Interestingly, when I tested the same setup in Firefox on my laptop, the sync worked correctly. It still took a while to synchronize, but the data was accurate.

<!-- gh-comment-id:3449823846 --> @BobWs commented on GitHub (Oct 27, 2025): I’m experiencing sync issues with my Docker server and iPad on both Safari and DuckDuckGo browsers. It takes a long time for everything to load, and the sync icon keeps spinning forever. As a result, my data is out of sync with my MacBook Pro (the primary source). I’ve cleared the browsers’ caches, but that didn’t help. At first I thought the problem was caused by the many tags I added to my transactions, but after reading the relevant information I don’t believe that’s the issue. Interestingly, when I tested the same setup in Firefox on my laptop, the sync worked correctly. It still took a while to synchronize, but the data was accurate.
Author
Owner

@youngcw commented on GitHub (Dec 8, 2025):

Closing as OP never responded

<!-- gh-comment-id:3627447850 --> @youngcw commented on GitHub (Dec 8, 2025): Closing as OP never responded
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#16779