rtb-chat 0.7.3

Unified multi-provider AI chat client for Claude, OpenAI, Gemini, and OpenAI-compatible endpoints. Part of the phpboyscout Rust toolkit.
Documentation
[project]
site_name = "rtb-chat"
site_description = "Unified multi-provider AI chat client — genai for the mainstream, direct Anthropic Messages for the rest."
site_author = "Matt Cockayne"
site_url = "https://chat.rust.phpboyscout.uk"
repo_url = "https://gitlab.com/phpboyscout/rust/chat"
copyright = """
Copyright © 2026 Matt Cockayne
"""

[project.theme]
logo = "images/branding/logo_transparent.svg"
favicon = "images/branding/favicon.svg"
language = "en"
features = [
    "content.code.copy",
    "navigation.footer",
    "navigation.indexes",
    "navigation.sections",
    "search.highlight",
    "search.suggest",
    "toc.follow",
]

# This nav block sits under [project], so unlike the inert root-level `nav`
# blocks elsewhere in the estate it *is* applied — a page added under docs/
# without an entry here will not appear in the sidebar.
[[project.nav]]
"Overview" = "index.md"

[[project.nav]]
Tutorials = [
    "tutorials/index.md",
    { "Your first chat call" = "tutorials/01-your-first-chat-call.md" },
]

[[project.nav]]
"How-to guides" = [
    "how-to/index.md",
    { "Choose a provider" = "how-to/01-choose-a-provider.md" },
    { "Stream a reply" = "how-to/02-stream-a-reply.md" },
    { "Get structured output" = "how-to/03-get-structured-output.md" },
    { "Cache a prompt and enable thinking" = "how-to/04-cache-and-think.md" },
    { "Test without a provider" = "how-to/05-test-without-a-provider.md" },
]

[[project.nav]]
Reference = [
    "reference/index.md",
    { "Configuration" = "reference/01-config.md" },
    { "Providers" = "reference/02-providers.md" },
    { "Requests" = "reference/03-requests.md" },
    { "Responses and streaming" = "reference/04-responses.md" },
    { "Errors" = "reference/05-errors.md" },
    { "Generated API (docs.rs)" = "https://docs.rs/rtb-chat" },
]

[[project.nav]]
Explanation = [
    "explanation/index.md",
    { "Why there are two backends" = "explanation/01-two-backends.md" },
    { "Why the endpoint is validated" = "explanation/02-endpoint-validation.md" },
    { "What rtb-chat does not do" = "explanation/03-limitations.md" },
]

[[project.nav]]
About = [
    { Branding = "about/branding.md" },
]

[[project.extra.social]]
icon = "fontawesome/brands/gitlab"
link = "https://gitlab.com/phpboyscout/rust/chat"

[[project.extra.social]]
icon = "fontawesome/solid/globe"
link = "https://phpboyscout.uk"

[[project.extra.social]]
icon = "fontawesome/brands/github"
link = "https://github.com/phpboyscout"

[[project.extra.social]]
icon = "fontawesome/brands/dev"
link = "https://dev.to/phpboyscout"

[[project.extra.social]]
icon = "fontawesome/brands/instagram"
link = "https://www.instagram.com/matt.cockayne/"

[[project.extra.social]]
icon = "fontawesome/brands/tiktok"
link = "https://www.tiktok.com/@phpboyscout"

[[project.extra.social]]
icon = "fontawesome/brands/youtube"
link = "https://www.youtube.com/@phpboyscout"

[[project.extra.social]]
icon = "fontawesome/brands/linkedin"
link = "https://www.linkedin.com/in/matthewcockayne/"

[[project.extra.social]]
icon = "fontawesome/brands/discord"
link = "https://discord.gg/mQzGbmGyzZ"

[[project.extra.social]]
icon = "fontawesome/solid/book"
link = "https://phpboyscout.uk/topics/rust/"
name = "Rust, and what survived the port — the guide on the blog"