tursodatabase/turso · warning

Manual page not found: {page_name}

Error message

Manual page not found: {page_name}

What it means

Returned by .manual <page> when no embedded page matches the name (cli/manual.rs:155). The CLI appends a 'Did you mean .manual X?' suggestion using closest-name matching, and .manual with no argument lists all available pages instead of erroring.

Source

Thrown at cli/manual.rs:155

        let content = strip_frontmatter(content);
        if IsTerminal::is_terminal(&std::io::stdout()) {
            render_in_terminal(content)?;
        } else {
            writeln!(writer, "{content}")?;
        }
        Ok(())
    } else if page.is_none() {
        // If no page specified, list available pages
        return list_available_manuals(writer);
    } else {
        let available_pages = MANUAL_DIR
            .files()
            .filter_map(|file| file.path().file_stem().and_then(|stem| stem.to_str()));
        let mut error_message = format!("Manual page not found: {page_name}");
        if let Some(suggestion) = find_closest_manual_page(page_name, available_pages) {
            error_message.push_str(&format!("\n\nDid you mean '.manual {suggestion}'?"));
        }
        Err(anyhow::anyhow!(error_message))
    }
}

fn render_in_terminal(content: &str) -> anyhow::Result<()> {
    // Create a skin with nice styling
    let mut skin = MadSkin::default();

    // Customize the skin for better appearance
    skin.set_headers_fg(termimad::crossterm::style::Color::Cyan);
    skin.bold.set_fg(termimad::crossterm::style::Color::Yellow);
    skin.italic
        .set_fg(termimad::crossterm::style::Color::Magenta);
    skin.inline_code
        .set_fg(termimad::crossterm::style::Color::Green);
    skin.code_block
        .set_fg(termimad::crossterm::style::Color::Green);

    let mut w = stdout();

View on GitHub (pinned to 244cde92a7)

Solutions

  1. Take the suggestion in the error message - it usually names the correct page
  2. Run .manual with no argument to list every available page
  3. Check spelling and case of the page name

Example fix

-- before
.manual querry
-- Did you mean '.manual query'?
-- after
.manual query
Defensive patterns

Strategy: validation

Validate before calling

let known: Vec<&str> = MANUAL_DIR.files()
    .filter_map(|f| f.path().file_stem().and_then(|s| s.to_str()))
    .collect();
anyhow::ensure!(known.contains(&page), "unknown page; available: {known:?}");

Prevention

When it happens

Trigger: Typo in the page name (.manual indxe); asking for a page that was renamed or removed; expecting a page that exists in external docs but was never added to the embedded MANUAL_DIR.

Common situations: Pages renamed between versions while muscle memory uses old names; not using shell completion; case-sensitive mismatch in the page name.

Related errors


AI-assisted analysis of tursodatabase/turso@244cde92a7 (2026-08-20). Data as JSON: /api/errors/c7c779c4a2de3096. Report an issue: GitHub.