DIYgod/RSSHub · error · ConfigNotFoundError

This RSS feed is disabled due to its incorrect configuration

Error message

This RSS feed is disabled due to its incorrect configuration: the token is missing.

What it means

Thrown as a ConfigNotFoundError by the Miniflux entries route when config.miniflux.token is falsy. RSSHub treats missing required configuration as a disabled feed (HTTP 404-ish, not a 500), so the feed is intentionally turned off rather than crashing. The token is the Miniflux API key/token for the self-hosted Miniflux instance identified by config.miniflux.instance.

Source

Thrown at lib/routes/miniflux/entry.ts:65

};

async function handler(ctx) {
    // Unchanged entries status after fetching.
    // mark = unchanged | read | removed | unread
    let mark = 'unchanged';
    // Return shared link as default behavior
    // link = shared | original
    // let link = 'shared';
    // Add feed's name to each article, default is off.
    let addFeedName = 0;
    // Here we use `limit` to temporarily store the limit number.
    let limit = 0;

    const instance = config.miniflux.instance;
    const token = config.miniflux.token;

    if (!token) {
        throw new ConfigNotFoundError('This RSS feed is disabled due to its incorrect configuration: the token is missing.');
    }

    // In this function, var`mark`, `link`, and `limit`, `addFeedName`
    // could be changed.
    function filterHandler(item) {
        if (item.search('=') === -1) {
            return '';
        }

        const filter = item.slice(0, item.indexOf('='));
        const option = item.slice(item.lastIndexOf('=') + 1);

        switch (filter) {
            case 'mark':
                if (['read', 'removed', 'unread'].includes(option) && !setMark.length) {
                    mark = option;
                    setMark.push(1);
                }

View on GitHub (pinned to bed535e087)

Solutions

  1. Generate an API key in Miniflux (Settings → API Keys → Create a new API key) and set it as the MINIFLUX_TOKEN environment variable, then restart RSSHub.
  2. Confirm both MINIFLUX_INSTANCE (e.g. https://miniflux.example.com) and MINIFLUX_TOKEN are exported in the same environment RSSHub runs in — check with `printenv | grep -i miniflux`.
  3. If using Docker, ensure the variables are under `environment:` (or an env_file) of the rsshub service and the container was recreated (not just restarted) after editing compose.
  4. Verify the token works against the instance directly: `curl -H "X-Auth-Token: <token>" <instance>/api/v1/me` should return 200.
Defensive patterns

Strategy: validation

Validate before calling

const token = config.miniflux.token;
const instance = config.miniflux.instance;
if (!token) {
    throw new ConfigNotFoundError('Set MINIFLUX_TOKEN (Miniflux API key) to enable this feed.');
}
if (!instance) {
    throw new ConfigNotFoundError('Set MINIFLUX_INSTANCE to your Miniflux URL.');
}

Type guard

function hasMinifluxConfig(c: any): c is { miniflux: { instance: string; token: string } } {
    return typeof c?.miniflux?.instance === 'string' && typeof c?.miniflux?.token === 'string' && c.miniflux.token.length > 0;
}

Prevention

When it happens

Trigger: The handler reads config.miniflux.instance and config.miniflux.token; if token is empty/undefined it throws immediately. Fires whenever MINIFLUX_TOKEN is unset in the environment (or misspelled), regardless of how valid the instance URL is.

Common situations: A self-hoster set MINIFLUX_INSTANCE but forgot MINIFLUX_TOKEN; the env var was named miniflux_token (wrong case) in docker-compose; the token was removed during a config cleanup; deploying via an orchestrator that did not propagate the secret.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/99bf3aa10ac25ddb. Report an issue: GitHub.