[GH-ISSUE #5682] [Bug]: Server fails silently when IPv6 is unavailable #79884

Open
opened 2026-05-19 03:09:09 -05:00 by GiteaMirror · 2 comments
Owner

Originally created by @BirdRoad1 on GitHub (Sep 4, 2025).
Original GitHub issue: https://github.com/actualbudget/actual/issues/5682

Verified issue does not already exist?

  • I have searched and found no existing issue

What happened?

When trying to start the server through docker or yarn (building from source), the program instantly exits after the following output:

actual@hostname:/opt/actual$ DEBUG=actual:config yarn start:server
  actual:config Project root: '/opt/actual/packages/sync-server' +0ms
  actual:config Actual web build path: '/opt/actual/packages/desktop-client/build' +1ms
  actual:config loading config from default path: '/opt/actual/packages/sync-server/config.json' +4ms
  actual:config Validating config +0ms
  actual:config Project root: /opt/actual/packages/sync-server +2ms
  actual:config Port: 5006 +0ms
  actual:config Hostname: :: +0ms
  actual:config Data directory: /opt/actual/packages/sync-server +0ms
  actual:config Server files: /opt/actual/packages/sync-server/server-files +0ms
  actual:config User files: /opt/actual/packages/sync-server/user-files +0ms
  actual:config Web root: /opt/actual/packages/desktop-client/build +0ms
  actual:config Login method: password +0ms
  actual:config Allowed methods: password, header, openid +0ms
Checking if there are any migrations to run for direction "up"...
Migrations: DONE
Running in production mode - Serving static React app
Listening on :::5006...

The exit code is 0.
Creating a config.json file with the following contents:
{ "hostname": "127.0.0.1" }
results in the server running as expected.

I would recommend falling back to IPv4 or having a descriptive error in case the server fails to bind to the host.

How can we reproduce the issue?

How can we reproduce the issue?

  • Disable IPv6 using the "ipv6.disable=1" kernel parameter on Linux
  • Run the server using yarn or docker
  • The server exits immediately

Where are you hosting Actual?

Locally via Yarn

What browsers are you seeing the problem on?

Firefox

Operating System

Linux

Originally created by @BirdRoad1 on GitHub (Sep 4, 2025). Original GitHub issue: https://github.com/actualbudget/actual/issues/5682 ### Verified issue does not already exist? - [x] I have searched and found no existing issue ### What happened? When trying to start the server through docker or yarn (building from source), the program instantly exits after the following output: ``` actual@hostname:/opt/actual$ DEBUG=actual:config yarn start:server actual:config Project root: '/opt/actual/packages/sync-server' +0ms actual:config Actual web build path: '/opt/actual/packages/desktop-client/build' +1ms actual:config loading config from default path: '/opt/actual/packages/sync-server/config.json' +4ms actual:config Validating config +0ms actual:config Project root: /opt/actual/packages/sync-server +2ms actual:config Port: 5006 +0ms actual:config Hostname: :: +0ms actual:config Data directory: /opt/actual/packages/sync-server +0ms actual:config Server files: /opt/actual/packages/sync-server/server-files +0ms actual:config User files: /opt/actual/packages/sync-server/user-files +0ms actual:config Web root: /opt/actual/packages/desktop-client/build +0ms actual:config Login method: password +0ms actual:config Allowed methods: password, header, openid +0ms Checking if there are any migrations to run for direction "up"... Migrations: DONE Running in production mode - Serving static React app Listening on :::5006... ``` The exit code is 0. Creating a config.json file with the following contents: `{ "hostname": "127.0.0.1" }` results in the server running as expected. I would recommend falling back to IPv4 or having a descriptive error in case the server fails to bind to the host. ### How can we reproduce the issue? How can we reproduce the issue? - Disable IPv6 using the "ipv6.disable=1" kernel parameter on Linux - Run the server using yarn or docker - The server exits immediately ### Where are you hosting Actual? Locally via Yarn ### What browsers are you seeing the problem on? Firefox ### Operating System Linux
GiteaMirror added the serverupstreamhelp wantedbug labels 2026-05-19 03:09:10 -05:00
Author
Owner

@joel-jeremy commented on GitHub (Sep 5, 2025):

Sync server uses express to spin up the server and it defaults to :: address when no hostname is configured. This is supposed to listen to both ipv6 and ipv4 accordingly, so if it's not doing so, it could be a bug on the express version that the sync server is using. I agree that an error message is desirable if connection failed, this could probably be achieved by updating the app.listen callback where we have access to an error object.

<!-- gh-comment-id:3258985092 --> @joel-jeremy commented on GitHub (Sep 5, 2025): Sync server uses express to spin up the server and it defaults to `::` address when no hostname is configured. This is supposed to listen to both ipv6 and ipv4 accordingly, so if it's not doing so, it could be a bug on the express version that the sync server is using. I agree that an error message is desirable if connection failed, this could probably be achieved by updating the `app.listen` callback where we have access to an error object.
Author
Owner

@leo60228 commented on GitHub (Oct 24, 2025):

I don't think this qualifies as a bug in Actual. The ipv6.disable=1 option removes AF_INET6, which I expect to break many programs. This is similar to other core kernel features that Linux supports disabling to reduce code size in embedded systems that don't need them.

You are likely looking for the confusingly named ipv6.disable_ipv6=1 option, which should have the desired behavior.

<!-- gh-comment-id:3443243321 --> @leo60228 commented on GitHub (Oct 24, 2025): I don't think this qualifies as a bug in Actual. The `ipv6.disable=1` option removes `AF_INET6`, which I expect to break *many* programs. This is similar to other core kernel features that Linux supports disabling to reduce code size in embedded systems that don't need them. You are likely looking for the confusingly named `ipv6.disable_ipv6=1` option, which should have the desired behavior.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#79884