louislam/uptime-kuma · error · Error
${output}
Error message
${output} What it means
apprise.js:11-30. Apprise is shelled out as a child process; its stdout is inspected. If the output contains the substring 'ERROR' (case-sensitive) the provider throws the entire stdout as the error message. This catches apprise reporting missing endpoints, bad URLs, or library-level failures.
Source
Thrown at server/notification-providers/apprise.js:29
const okMsg = "Sent Successfully.";
const args = ["-vv", "-b", msg, notification.appriseURL];
if (notification.title) {
args.push("-t");
args.push(notification.title);
}
const s = await childProcessAsync.spawn("apprise", args, {
encoding: "utf8",
});
const output = s.stdout ? s.stdout.toString() : "ERROR: maybe apprise not found";
if (output) {
if (!output.includes("ERROR")) {
return okMsg;
}
throw new Error(output);
} else {
return "No output from apprise";
}
}
}
module.exports = Apprise;
View on GitHub (pinned to 6b5ea01557)
Solutions
- Run `apprise --version` on the host to confirm the binary is installed and on PATH.
- Reproduce the send from the shell with `apprise -vv -t test -b test '<your URLs>'` to see the full diagnostic.
- Fix/refresh the Apprise URL string in the notification config based on the diagnostic.
- Upgrade or pin Apprise to a version whose URL syntax matches the configured targets.
Example fix
# before: apprise URL uses deprecated syntax # after: correct scheme # 'tgram://' requires bot token + chat id tgram://<bot_token>/<chat_id>
Defensive patterns
Strategy: validation
Validate before calling
// Confirm apprise is installed AND the URL parses before sending
const { execSync } = require('child_process');
function appriseReady() {
try { execSync('apprise --version', { stdio: 'pipe' }); return true; }
catch { return false; }
}
if (!appriseReady()) throw new Error('apprise binary not on PATH'); Type guard
function isAppriseSuccess(stdout) { return typeof stdout === 'string' && !stdout.includes('ERROR'); } Try / catch
try { await provider.send(...); }
catch (e) {
if (/maybe apprise not found/i.test(e.message)) log.error('Install apprise on the Uptime Kuma host');
else log.warn(`Apprise delivery issue: ${e.message}`);
} Prevention
- Pin apprise version in your deployment; add a startup check that the binary exists.
- Maintain apprise URL syntax in lockstep with the installed version's changelog.
When it happens
Trigger: Apprise URL tags malformed (e.g. 'mailto://' without config), target service unreachable, apprise cannot find a configured plugin, or apprise itself prints an ERROR-prefixed diagnostic line.
Common situations: Apprise not installed / not on PATH (the fallback string 'ERROR: maybe apprise not found'), an Apprise URL syntax the installed apprise version no longer accepts, a persistent config token expired for a target (Discord/Telegram/Slack).
Related errors
- Child monitors down: ${downChildren.join(", ")}; pending: ${
- No recipient or group specified
- Received unexpected status code ${result.status} from notifi
- ${result.data.Message}
- Bark notification failed with invalid response!
AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12).
Data as JSON: /api/errors/6d24ab051d73b9a0.
Report an issue: GitHub.