actualbudget/actual · error
No sync server configured.
Error message
No sync server configured.
What it means
bootstrap calls getServer() to find the configured sync server; if no server URL is configured (SERVER_URL unset), there is no endpoint to POST /bootstrap to, so it throws immediately.
Source
Thrown at packages/loot-core/src/server/auth/app.ts:103
return {
bootstrapped: res.data.bootstrapped,
availableLoginMethods: res.data.availableLoginMethods || [
{ method: 'password', active: true, displayName: 'Password' },
],
multiuser: res.data.multiuser || false,
hasServer: true,
};
}
async function bootstrap(loginConfig: {
password?: string;
openId?: OpenIdConfig;
}) {
try {
const serverConfig = getServer();
if (!serverConfig) {
throw new Error('No sync server configured.');
}
await post(serverConfig.SIGNUP_SERVER + '/bootstrap', loginConfig);
} catch (err) {
if (err instanceof PostError) {
return {
error: err.reason || 'network-failure',
};
}
throw err;
}
return {};
}
async function getLoginMethods() {
let res: {
methods?: Array<{ method: string; displayName: string; active: boolean }>;
};View on GitHub (pinned to d4334cb6e6)
Solutions
- Set the SERVER_URL environment variable to the sync server's base URL before calling bootstrap.
- If you do not use a sync server, do not call bootstrap — configure the app in local-only mode.
- Verify getServer() configuration loading (dotenv/config file) is actually applied in your process.
Example fix
// before yarn workspace @actual-app/sync-server start # SERVER_URL unset, bootstrap fails // after SERVER_URL=http://localhost:5006 yarn workspace @actual-app/sync-server start
Defensive patterns
Strategy: try-catch
Validate before calling
function isSyncConfigured() {
return typeof process.env.SERVER_URL === 'string' && process.env.SERVER_URL.length > 0;
}
if (!isSyncConfigured()) throw new Error('Set SERVER_URL before bootstrapping a sync server'); Try / catch
try {
await app.bootstrap(loginConfig);
} catch (e) {
if (e.message === 'No sync server configured.') {
console.error('SERVER_URL is not set; start the app in local-only mode or configure the sync server.');
} else throw e;
} Prevention
- Always export SERVER_URL in deployment env files
- Do not call server bootstrap RPCs when running local-only
- Add a startup healthcheck that logs when SERVER_URL is missing
When it happens
Trigger: Calling app.bootstrap() (server bootstrapping of first user/password) in an environment without SERVER_URL set, e.g. a pure local-only deployment.
Common situations: Self-hosters running without a sync server who invoke the bootstrap RPC; missing or empty SERVER_URL env var in the sync-server deployment; confusing local budget bootstrapping with remote server bootstrapping.
Related errors
- Failed to get server config.
- No sync server configured.
- No sync server set
- NOT_CONFIGURED
- No id returned from download.
AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29).
Data as JSON: /api/errors/50129d90735bf2bd.
Report an issue: GitHub.